用于经济高效、高性能 AI 推理的 Amazon EC2 DL2q 实例现已全面上市 | 亚马逊网络服务

用于经济高效、高性能 AI 推理的 Amazon EC2 DL2q 实例现已全面上市 | 亚马逊网络服务

这是来自 Qualcomm AI 的 AK Roy 的客座文章。

Amazon Elastic Compute Cloud(Amazon EC2) DL2q 实例由 Qualcomm AI 100 Standard 加速器提供支持,可用于在云中经济高效地部署深度学习 (DL) 工作负载。 它们还可用于开发和验证将部署在高通设备上的深度学习工作负载的性能和准确性。 DL2q 实例是首批将 Qualcomm 人工智能 (AI) 技术引入云端的实例。

凭借八个 Qualcomm AI 100 Standard 加速器和 128 GiB 总加速器内存,客户还可以使用 DL2q 实例运行流行的生成式 AI 应用程序,例如内容生成、文本摘要和虚拟助理,以及用于自然语言处理的经典 AI 应用程序和计算机视觉。 此外,Qualcomm AI 100 加速器采用与智能手机、自动驾驶、个人电脑和扩展现实耳机相同的 AI 技术,因此 DL2q 实例可用于在部署之前开发和验证这些 AI 工作负载。

新 DL2q 实例亮点

每个 DL2q 实例均包含 100 个 Qualcomm Cloud AI2.8 加速器,综合性能超过 8 PetaOps 的 Int1.4 推理性能和 16 PetaFlops 的 FP112 推理性能。 该实例共有128个AI核心,加速器内存容量为1.1GB,内存带宽为XNUMXTB/秒。

每个DL2q实例拥有96个vCPU,系统内存容量为768 GB,支持100 Gbps的网络带宽以及 亚马逊弹性块存储(亚马逊EBS) 19 Gbps 的存储。

实例名称 虚拟CPU 云AI100加速器 加速器内存 加速器内存 BW(聚合) 实例内存 实例组网 存储 (Amazon EBS) 带宽
DL2q.24xlarge 96 8 128 GB 1.088 TB / s 768 GB 100 Gbps 19 Gbps

高通云AI100加速器创新

Cloud AI100 加速器片上系统 (SoC) 是一种专门构建的可扩展多核架构,支持从数据中心到边缘的各种深度学习用例。 该 SoC 采用标量、矢量和张量计算核心,具有业界领先的 126 MB 片上 SRAM 容量。 这些内核通过高带宽低延迟片上网络 (NoC) 网格互连。

AI100 加速器支持广泛而全面的模型和用例。 下表重点介绍了模型支持的范围。

车型类别 型号数量 示例​
自然语言处理​ 157 BERT、BART、FasterTransformer、T5、Z 代码 MOE
生成式人工智能——NLP 40 LLaMA、CodeGen、GPT、OPT、BLOOM、Jais、Luminous、StarCoder、XGen
生成式人工智能——图像 3 稳定扩散 v1.5 和 v2.1,OpenAI CLIP
CV——图像分类 45 ViT、ResNet、ResNext、MobileNet、EfficientNet
CV——物体检测 23 YOLO v2、v3、v4、v5 和 v7、SSD-ResNet、RetinaNet
简历 – 其他 15 LPRNet、超分辨率/SRGAN、ByteTrack
汽车网络* 53 感知和激光雷达、行人、车道和交通灯检测
全部的 > 300 

* 大多数汽车网络都是由各个网络融合而成的复合网络。

DL2q 加速器上的大型片上 SRAM 能够高效实施先进的性能技术,例如用于存储权重的 MX6 微指数精度和用于加速器间通信的 MX9 微指数精度。 以下开放计算项目 (OCP) 行业公告中描述了微指数技术: AMD、Arm、英特尔、Meta、微软、NVIDIA 和高通标准化人工智能的下一代窄精度数据格式 » 开放计算项目.

实例用户可以使用以下策略来最大化性价比:

  • 使用加速器上的 DDR 内存中的 MX6 微指数精度存储权重。 使用 MX6 精度可最大限度地利用可用内存容量和内存带宽,从而提供一流的吞吐量和延迟。
  • 在 FP16 中进行计算以提供所需的用例精度,同时使用卡上卓越的片上 SRAM 和备用 TOP,以实现高性能低延迟 MX6 到 FP16 内核。
  • 通过使用可用的大型片上 SRAM,使用优化的批处理策略和更高的批处理大小,以最大限度地重用权重,同时最大限度地保留片上激活。

DL2q AI 堆栈和工具链

DL2q 实例配有 Qualcomm AI Stack,可在云端的 Qualcomm AI 和其他 Qualcomm 产品中提供一致的开发人员体验。 相同的高通人工智能堆栈和基础人工智能技术在DL2q实例和高通边缘设备上运行,为客户提供一致的开发人员体验,并在云、汽车、个人计算机、扩展现实和智能手机开发环境中提供统一的API。

该工具链使实例用户能够快速加入先前训练的模型,针对实例功能编译和优化模型,然后通过下图所示的三个步骤将编译后的模型部署到生产推理用例。

用于经济高效、高性能 AI 推理的 Amazon EC2 DL2q 实例现已全面上市 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

要了解有关调整模型性能的更多信息,请参阅 Cloud AI 100关键性能参数 文档。

DL2q 实例入门

在此示例中,您编译并部署一个预训练的 BERT模型 止 拥抱脸 在使用预构建的可用 DL2q AMI 的 EC2 DL2q 实例上,分四个步骤。

您可以使用预先构建的 高通DLAMI 在实例上,或者从 Amazon Linux2 AMI 开始,并使用本文档中提供的 Cloud AI 2 平台和应用程序开发工具包构建您自己的 DL100q AMI 亚马逊简单存储服务(Amazon S3) 桶: s3://ec2-linux-qualcomm-ai100-sdks/latest/.

以下步骤使用预构建的 DL2q AMI, 高通 Base AL2 DLAMI.

使用 SSH 通过 Qualcomm Base AL2 DLAMI AMI 访问您的 DL2q 实例,并按照步骤 1 至 4 进行操作。

步骤1.搭建环境并安装所需包

  1. 安装 Python 3.8。
    sudo amazon-linux-extras install python3.8

  2. 设置Python 3.8虚拟环境。
    python3.8 -m venv /home/ec2-user/userA/pyenv

  3. 激活Python 3.8虚拟环境。
    source /home/ec2-user/userA/pyenv/bin/activate

  4. 安装所需的软件包,如图所示 需求.txt文档 可在 Qualcomm 公共 Github 站点上获取。
    pip3 install -r requirements.txt

  5. 导入必要的库。
    import transformers from transformers import AutoTokenizer, AutoModelForMaskedLM
    import sys
    import qaic
    import os
    import torch
    import onnx
    from onnxsim import simplify
    import argparse
    import numpy as np

步骤 2. 导入模型

  1. 导入并标记模型。
    model_card = 'bert-base-cased'
    model = AutoModelForMaskedLM.from_pretrained(model_card)
    tokenizer = AutoTokenizer.from_pretrained(model_card)

  2. 定义一个样本输入并提取 inputIdsattentionMask.
    sentence = "The dog [MASK] on the mat."
    encodings = tokenizer(sentence, max_length=128, truncation=True, padding="max_length", return_tensors='pt')
    inputIds = encodings["input_ids"]
    attentionMask = encodings["attention_mask"]

  3. 将模型转换为 ONNX,然后可以将其传递给编译器。
    # Set dynamic dims and axes.
    dynamic_dims = {0: 'batch', 1 : 'sequence'}
    dynamic_axes = { "input_ids" : dynamic_dims, "attention_mask" : dynamic_dims, "logits" : dynamic_dims
    }
    input_names = ["input_ids", "attention_mask"]
    inputList = [inputIds, attentionMask] torch.onnx.export( model, args=tuple(inputList), f=f"{gen_models_path}/{model_base_name}.onnx", verbose=False, input_names=input_names, output_names=["logits"], dynamic_axes=dynamic_axes, opset_version=11,
    )

  4. 您将以 FP16 精度运行模型。 因此,您需要检查模型是否包含任何超出 FP16 范围的常数。 将模型传递给 fix_onnx_fp16 函数生成包含所需修复的新 ONNX 文件。
    from onnx import numpy_helper def fix_onnx_fp16( gen_models_path: str, model_base_name: str,
    ) -> str: finfo = np.finfo(np.float16) fp16_max = finfo.max fp16_min = finfo.min model = onnx.load(f"{gen_models_path}/{model_base_name}.onnx") fp16_fix = False for tensor in onnx.external_data_helper._get_all_tensors(model): nptensor = numpy_helper.to_array(tensor, gen_models_path) if nptensor.dtype == np.float32 and ( np.any(nptensor > fp16_max) or np.any(nptensor < fp16_min) ): # print(f'tensor value : {nptensor} above {fp16_max} or below {fp16_min}') nptensor = np.clip(nptensor, fp16_min, fp16_max) new_tensor = numpy_helper.from_array(nptensor, tensor.name) tensor.CopyFrom(new_tensor) fp16_fix = True if fp16_fix: # Save FP16 model print("Found constants out of FP16 range, clipped to FP16 range") model_base_name += "_fix_outofrange_fp16" onnx.save(model, f=f"{gen_models_path}/{model_base_name}.onnx") print(f"Saving modified onnx file at {gen_models_path}/{model_base_name}.onnx") return model_base_name fp16_model_name = fix_onnx_fp16(gen_models_path=gen_models_path, model_base_name=model_base_name)

步骤 3. 编译模型

qaic-exec 命令行界面(CLI)编译工具用于编译模型。 该编译器的输入是步骤 2 中生成的 ONNX 文件。编译器生成一个二进制文件(称为 QPC,为 高通程序容器)在定义的路径中 -aic-binary-dir 论据。

在下面的编译命令中,您使用四个 AI 计算核心和批量大小为 XNUMX 来编译模型。

/opt/qti-aic/exec/qaic-exec -m=bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16.onnx -aic-num-cores=4 -convert-to-fp16 -onnx-define-symbol=batch,1 -onnx-define-symbol=sequence,128 -aic-binary-dir=bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16_qpc -aic-hw -aic-hw-version=2.0 -compile-only

QPC 生成于 bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16_qpc 文件夹中。

步骤 4. 运行模型

设置一个会话以在 DL100q 实例中的 Cloud AI2 Qualcomm 加速器上运行推理。

Qualcomm qaic Python 库是一组 API,为在 Cloud AI100 加速器上运行推理提供支持。

  1. 使用会话 API 调用来创建会话实例。 会话 API 调用是使用 qaic Python 库的入口点。
    qpcPath = 'bert-base-cased/generatedModels/bert-base-cased_fix_outofrange_fp16_qpc' bert_sess = qaic.Session(model_path= qpcPath+'/programqpc.bin', num_activations=1) bert_sess.setup() # Loads the network to the device. # Here we are reading out all the input and output shapes/types
    input_shape, input_type = bert_sess.model_input_shape_dict['input_ids']
    attn_shape, attn_type = bert_sess.model_input_shape_dict['attention_mask']
    output_shape, output_type = bert_sess.model_output_shape_dict['logits'] #create the input dictionary for given input sentence
    input_dict = {"input_ids": inputIds.numpy().astype(input_type), "attention_mask" : attentionMask.numpy().astype(attn_type)} #run inference on Cloud AI 100
    output = bert_sess.run(input_dict)

  2. 重构输出缓冲区中的数据 output_shapeoutput_type.
    token_logits = np.frombuffer(output['logits'], dtype=output_type).reshape(output_shape)

  3. 解码产生的输出。
    mask_token_logits = torch.from_numpy(token_logits[0, mask_token_index, :]).unsqueeze(0)
    top_5_results = torch.topk(mask_token_logits, 5, dim=1)
    print("Model output (top5) from Qualcomm Cloud AI 100:")
    for i in range(5): idx = top_5_results.indices[0].tolist()[i] val = top_5_results.values[0].tolist()[i] word = tokenizer.decode([idx]) print(f"{i+1} :(word={word}, index={idx}, logit={round(val,2)})")

以下是输入句子“垫子上的狗 [MASK]”的输出。

1 :(word=sat, index=2068, logit=11.46)
2 :(word=landed, index=4860, logit=11.11)
3 :(word=spat, index=15732, logit=10.95)
4 :(word=settled, index=3035, logit=10.84)
5 :(word=was, index=1108, logit=10.75)

就是这样。 只需几个步骤,您就可以在 Amazon EC2 DL2q 实例上编译并运行 PyTorch 模型。 要了解有关在 DL2q 实例上加入和编译模型的更多信息,请参阅 云AI100教程文档。

要了解有关哪些 DL 模型架构非常适合 AWS DL2q 实例和当前模型支持矩阵的更多信息,请参阅 高通云AI100文档.

现在可

您现在可以在美国西部(俄勒冈)和欧洲(法兰克福)AWS 区域启动 DL2q 实例: 按需保留的及 竞价实例,或作为 储蓄计划。 与使用 Amazon EC2 一样,您只需按使用量付费。 有关更多信息,请参阅 亚马逊 EC2 定价.

DL2q 实例可以使用以下方式部署 AWS 深度学习 AMI (DLAMI),并且容器映像可通过托管服务获得,例如 亚马逊SageMaker, 亚马逊弹性 Kubernetes 服务 (Amazon EKS), Amazon Elastic Container Service(Amazon ECS)AWS 并行集群.

要了解更多信息,请访问 亚马逊 EC2 DL2q 实例 页面,并将反馈发送至 适用于 EC2 的 AWS re:Post 或通过您常用的 AWS Support 联系人。


关于作者

用于经济高效、高性能 AI 推理的 Amazon EC2 DL2q 实例现已全面上市 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。AK罗伊 是高通产品管理总监,负责云和数据中心人工智能产品和解决方案。 他在产品战略和开发方面拥有 20 多年的经验,目前专注于云中人工智能推理的一流性能和性能/成本端到端解决方案,适用于广泛的用例,包括 GenAI、法学硕士、汽车和混合人工智能。

用于经济高效、高性能 AI 推理的 Amazon EC2 DL2q 实例现已全面上市 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。 郎建英 是 AWS 全球专家组织 (WWSO) 的首席解决方案架构师。 她在 HPC 和 AI 领域拥有超过 15 年的工作经验。 在 AWS,她专注于帮助客户在加速计算实例上部署、优化和扩展其 AI/ML 工作负载。 她热衷于将 HPC 和 AI 领域的技术结合起来。 建英拥有科罗拉多大学博尔德分校计算物理学博士学位。

时间戳记:

更多来自 AWS机器学习