AWS Inferentia2 基于 AWS Inferentia1 构建,吞吐量提高 4 倍,延迟降低 10 倍 | 亚马逊网络服务

AWS Inferentia2 基于 AWS Inferentia1 构建,吞吐量提高 4 倍,延迟降低 10 倍 | 亚马逊网络服务

机器学习 (ML) 模型的规模——大型语言模型 (法学硕士)和基础模型(调频)––逐年快速增长,这些模型需要更快、更强大的加速器,特别是对于生成式人工智能。 AWS Inferentia2 旨在提供更高的性能,同时降低法学硕士和生成式人工智能推理的成本。

在这篇文章中,我们展示第二代 AWS Inferentia 如何基于 AWS Inferentia1 引入的功能构建,并满足部署和运行 LLM 和 FM 的独特需求。

第一代 AWS Inferentia 是 2019 年推出的专用加速器,经过优化以加速深度学习推理。 AWS Inferentia 帮助 ML 用户降低推理成本并提高预测吞吐量和延迟。 借助 AWS Inferentia1,与同类推理优化相比,客户的吞吐量提高了 2.3 倍,每次推理成本降低了 70% 亚马逊弹性计算云 (Amazon EC2)实例。

AWS Inferentia2,新版本中的特色 Amazon EC2 Inf2实例 并支持在 亚马逊SageMaker,针对大规模生成式 AI 推理进行了优化,并且是 AWS 的第一个专注于推理的实例,该实例针对分布式推理进行了优化,在加速器之间具有高速、低延迟的连接。

现在,您可以在单个 Inf175 实例上高效部署包含 2 亿个参数的模型,以跨多个加速器进行推理,而无需昂贵的训练实例。 到目前为止,拥有大型模型的客户只能使用为训练而构建的实例,但这是一种资源浪费——因为它们更昂贵,消耗更多能源,而且他们的工作负载没有充分利用所有的资源。可用资源(例如更快的网络和存储)。 与 AWS Inferentia2 相比,借助 AWS Inferentia4,您的吞吐量可提高 10 倍,延迟可降低多达 1 倍。 此外,第二代 AWS Inferentia 增强了对更多数据类型、自定义运算符、动态张量等的支持。

AWS Inferentia2 的内存容量是 AWS Inferentia4 的 16.4 倍,内存带宽是 AWS Inferentia1 的 XNUMX 倍,并且原生支持跨多个加速器对大型模型进行分片。 加速器使用 NeuronLink 和神经元集体通信 最大限度地提高它们之间或加速器和网络适配器之间的数据传输速度。 AWS Inferentia2 更适合需要跨多个加速器进行分片的大型模型,尽管 AWS Inferentia1 仍然是小型模型的绝佳选择,因为与替代方案相比,它提供了更好的性价比。

架构演进

为了比较两代 AWS Inferentia,我们来回顾一下 AWS Inferentia1 的架构。 每个芯片有四个 NeuronCore v1,如下图所示。

AWS Inferentia2 基于 AWS Inferentia1 构建,吞吐量提高了 4 倍,延迟降低了 10 倍 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

每个芯片的规格:

  • 计算 – 四核总共提供 128 INT8 TOPS 和 64FP16/BF16 TFLOPS
  • 内存 – 8 GB DRAM(50 GB/秒带宽),由所有四个核心共享
  • 神经元链接 – 核心之间的链接,用于跨两个或更多核心的分片模型

让我们看看 AWS Inferentia2 是如何组织的。 每个 AWS Inferentia2 芯片都有两个基于 NeuronCore-v2 架构。 与 AWS Inferentia1 一样,您可以在每个 NeuronCore 上运行不同的模型,或者组合多个核心来对大模型进行分片。

AWS Inferentia2 基于 AWS Inferentia1 构建,吞吐量提高了 4 倍,延迟降低了 10 倍 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

每个芯片的规格:

  • 计算 – 两个内核总共提供 380 INT8 TOPS、190 FP16/BF16/cFP8/TF32 TFLOPS 和 47.5 FP32 TFLOPS
  • 内存 – 32 GB HBM,由两个核心共享
  • 神经元链接 – 芯片之间的链接(每个设备 384 GB/秒),用于跨两个或更多核心的分片模型

NeuronCore-v2 有一个 具有四个独立发动机的模块化设计:

  • ScalarEngine(比 v3 快 1 倍) – 运行浮点数 ––1600 (BF16/FP16) FLOPS
  • VectorEngine(比 v10 快 1 倍) – 通过单一运算对数字向量进行运算,以进行归一化、池化等计算。
  • TensorEngine(比 v6 快 1 倍) – 执行张量计算,例如 Conv、Reshape、Transpose 等。
  • GPSIMD引擎 – 拥有八个完全可编程的 512 位宽通用处理器,供您创建您的 自定义运算符 标准 PyTorch 自定义 C++ 运算符 API。 这是 NeuronCore-v2 中引入的一项新功能。

AWS Inferentia2 NeuronCore-v2 速度更快、更优化。 此外,它还能够加速不同类型和规模的模型,从 ResNet 50 等简单模型到 GPT-3(175 亿个参数)等具有数十亿参数的大型语言模型或基础模型。 与 AWS Inferentia2 相比,AWS Inferentia1 还具有更大、更快的内部内存,如下表所示。

芯片 神经元核心 内存类型 内存大小 内存带宽
AWS 推理 x4(v1) DDR4 8GB 50GB/秒
AWS 推理 2 x2(v2) HBM 32GB 820GB/秒

您在 AWS Inferentia2 中找到的内存是高带宽内存 (HBM) 类型。 每个 AWS Inferentia2 芯片都有 32 GB,可以与其他芯片结合使用 NeuronLink(设备到设备互连)分发非常大的模型。 例如,inf2.48xlarge 拥有 12 个 AWS Inferentia2 加速器,加速内存总计 384 GB。 如上表所示,AWS Inferentia2 内存的速度比 AWS Inferentia16.4 快 1 倍。

其他功能

AWS Inferentia2 提供以下附加功能:

  • 硬件支持 – cFP8(新的、可配置的 FP8)、FP16、BF16、TF32、FP32、INT8、INT16 和 INT32。 欲了解更多信息,请参阅 数据类型.
  • 惰性张量推理 - 我们讨论 惰性张量推理 在这篇文章的后面。
  • 自定义运算符 – 开发人员可以使用标准 PyTorch 自定义运算符编程接口来使用 自定义 C++ 运算符 特征。 自定义运算符由可用的低级原语组成 张量工厂函数 并由 GPSIMD-Engine 加速。
  • 控制流(即将推出) – 这是用于模型内部的本机编程语言控制流,最终对从一层到另一层的数据进行预处理和后处理。
  • 动态形状(即将推出) – 当您的模型动态更改任何内部层的输出形状时,这非常有用。 例如:根据输入数据减少模型内部输出张量大小或形状的过滤器。

加速 AWS Inferentia1 和 AWS Inferentia2 上的模型

AWS 神经元开发工具包 用于编译和运行您的模型。 它与 PyTorch 和 TensorFlow 原生集成。 这样,您就不需要运行额外的工具。 使用在这些 ML 框架之一中编写的原始代码,并通过几行代码更改,您就可以使用 AWS Inferentia。

让我们看看如何使用 PyTorch 在 AWS Inferentia1 和 AWS Inferentia2 上编译和运行模型。

从 torchvision 加载预训练模型 (ResNet 50)

加载一个预先训练的模型并运行一次以预热:

import torch
import torchvision model = torchvision.models.resnet50(weights='IMAGENET1K_V1').eval().cpu()
x = torch.rand(1,3,224,224).float().cpu() # dummy input
y = model(x) # warmup model

在 Inferentia1 上跟踪和部署加速模型

要将模型跟踪到 AWS Inferentia,请导入 torch_neuron 并调用跟踪功能。 请记住,模型需要 PyTorch Jit 可追踪才能工作。

跟踪过程结束时,将模型保存为普通 PyTorch 模型。 编译模型一次,然后根据需要多次加载。 Neuron SDK 运行时已集成到 PyTorch 中,并负责自动将运算符发送到 AWS Inferentia1 芯片以加速您的模型。

在你的推理代码中,你总是需要导入 torch_neuron 激活集成运行时。

你可以通过 附加参数 给编译器定制优化模型的方式或启用特殊功能,例如神经元管道核心。 将模型分片到多个核心以提高吞吐量。

import torch_neuron # Tracing the model using AWS NeuronSDK
neuron_model = torch_neuron.trace(model,x) # trace model to Inferentia
# Saving for future use
neuron_model.save('neuron_resnet50.pt') # Next time you don't need to trace the model again
# Just load it and AWS NeuronSDK will send it to Inferentia automatically
neuron_model = torch.jit.load('neuron_resnet50.pt') # accelerated inference on Inferentia
y = neuron_model(x)

在 Inferentia2 上跟踪和部署加速模型

对于 AWS Inferentia2,过程类似。 唯一的区别是您导入的包以 x 结尾: torch_neuronx。 Neuron SDK 会透明地为您处理模型的编译和运行。 您还可以通过 编译器的附加参数 微调操作或激活特定功能。

import torch_neuronx # Tracing the model using NeuronSDK
neuron_model = torch_neuronx.trace(model,x) # trace model to Inferentia
# Saving for future use
neuron_model.save('neuron_resnet50.pt') # Next time you don't need to trace the model again
# Just load it and NeuronSDK will send it to Inferentia automatically
neuron_model = torch.jit.load('neuron_resnet50.pt') # accelerated inference on Inferentia
y = neuron_model(x)

AWS Inferentia2 还提供了第二种运行模型的方法,称为 惰性张量推理。 在此模式下,您之前无需跟踪或编译模型; 相反,编译器会在您每次运行代码时即时运行。 考虑到跟踪模式有 很多优点 通过惰性张量推理。 但是,如果您仍在开发模型并需要更快地测试它,那么惰性张量推理可能是一个不错的选择。 以下是如何使用 Lazy Tensor 编译和运行模型:

import torch
import torchvision
import torch_neuronx
import torch_xla.core.xla_model as xm device = xm.xla_device() # Create XLA device
model = torchvision.models.resnet50(weights='IMAGENET1K_V1').eval().cpu()
model.to(device) x = torch.rand((1,3,224,224), device=device) # dummy input
with torch.no_grad(): y = model(x) xm.mark_step() # Compilation occurs here

现在您已经熟悉了 AWS Inferentia2,下一步最好是开始使用 PyTorch or Tensorflow 并了解如何设置开发环境并运行教程和示例。 另外,请检查 AWS Neuron 示例 GitHub 存储库,您可以在其中找到有关如何准备模型以在 Inf2、Inf1 和 Trn1 上运行的多个示例。

AWS Inferentia1 和 AWS Inferentia2 之间的功能比较摘要

AWS Inferentia2 编译器是 基于XLA,AWS 是 OpenXLA 倡议。 这是与 AWS Inferentia1 相比的最大区别,这是相关的,因为 PyTorch、TensorFlow 和 JAX 具有本机 XLA 集成。 XLA 带来了许多性能改进,因为它优化了图形以在单个内核启动中计算结果。 它将连续的张量运算融合在一起,并输出最佳的机器代码,以加速模型在 AWS Inferentia2 上的运行。 Neuron SDK 的其他部分也在 AWS Inferentia2 中得到了改进,同时在跟踪和运行模型时保持用户体验尽可能简单。 下表显示了编译器和运行时两个版本中可用的功能。

专栏 火炬神经元 火炬神经元
张量板
支持的实例 信息1 Inf2 和 Trn1
推理支持
培训支持 没有
建筑 NeuronCore-v1 NeuronCore-v2
追踪API torch_neuron.trace() torch_neuronx.trace()
分布式推理 神经元核心管道 集体通讯
IR 图定义 LO
编译器 神经元CC 神经元CC
灭菌监测 神经元监视器 / 监视器顶部 神经元监视器 / 监视器顶部

更详细的比较 torch-neuron (Inf1) 和 torch-neuronx (Inf2),参考 torch-neuron (Inf1) 与 torch-neuronx (Inf2 & Trn1) 的推理比较.

模特服务

跟踪模型以部署到 Inf2 后,您有许多部署选项。 您可以以不同的方式运行实时预测或批量预测。 Inf2 可用是因为 EC2 实例本机集成到使用 InfXNUMX 的其他 AWS 服务 深度学习容器 (DLC)例如 亚马逊弹性容器服务 (亚马逊 ECS), Amazon Elastic Kubernetes服务 (Amazon EKS)和 SageMaker。

AWS Inferentia2 与最流行的部署技术兼容。 以下是使用 AWS Inferentia2 部署模型的一些选项的列表:

  • SageMaker – 用于准备数据以及构建、训练和部署机器学习模型的完全托管服务
  • 火炬服务 – PyTorch集成部署机制
  • TensorFlow服务 – TensorFlow集成部署机制
  • 深度Java库 – 用于模型部署和训练的开源Java机制
  • 海卫一 – 用于模型部署的 NVIDIA 开源服务

基准

下表重点介绍了 AWS Inferentia2 相对于 AWS Inferentia1 的改进。 具体来说,我们测量延迟(模型使用每个加速器进行预测的速度)、吞吐量(每秒进行多少次推理)和每次推理的成本(每次推理的成本是多少美元)。 以毫秒为单位的延迟和以美元为单位的成本越低越好。 吞吐量越高越好。

这个过程中使用了两个模型——都是大型语言模型:ELECTRA Large Discriminator 和 BERT Large Uncased。 本实验中使用的主要库 PyTorch (1.13.1) 和 Hugging Face Transformers (v4.7.0) 在 Python 3.8 上运行。 编译批量大小 = 1 和 10 的模型后(使用上一节中的代码作为参考),每个模型都进行预热(调用一次以初始化上下文),然后连续调用 10 次。 下表显示了这个简单基准测试中收集的平均数字。

型号名称 批量大小 句子长度 延迟(ms) Inf2 相对于 Inf1 的改进(x 倍) 吞吐量(每秒推理次数) 每次推理成本 (EC2 us-east-1) **
信息1 信息2 信息1 信息2 信息1 信息2
ElectraLarge鉴别器 1 256 35.7 8.31 4.30 28.01 120.34 $0.0000023 $0.0000018
ElectraLarge鉴别器 10 256 343.7 72.9 4.71 2.91 13.72 $0.0000022 $0.0000015
BertLargeUncased 1 128 28.2 3.1 9.10 35.46 322.58 $0.0000018 $0.0000007
BertLargeUncased 10 128 121.1 23.6 5.13 8.26 42.37 $0.0000008 $0.0000005

* c6a.8xlarge 本次基准测试中使用了 32 个 AMD Epyc 7313 CPU。

**EC2 1 月 20 日在 us-east-XNUMX 公开定价:inf2.xlarge:0.7582 美元/小时; inf1.xlarge:0.228 美元/小时。 每次推理成本考虑批次中每个元素的成本。 (每次推理的成本等于模型调用/批量大小的总成本。)

有关训练和推理性能的更多信息,请参阅 Trn1/Trn1n 性能.

结论

AWS Inferentia2 是一项强大的技术,旨在提高深度学习模型推理的性能并降低成本。 它比 AWS Inferentia1 性能更高,与其他同类推理优化 EC4 实例相比,吞吐量提高了 10 倍,延迟降低了 50 倍,性能功耗比提高了 2%。 最终,您支付更少,申请更快,并实现您的可持续发展目标。

将推理代码迁移到 AWS Inferentia2 既简单又直接,它还支持更广泛的模型,包括大型语言模型和生成 AI 的基础模型。

您可以按照以下步骤开始 AWS Neuron 开发工具包文档 设置开发环境并启动您的加速深度学习项目。 为了帮助您入门,Hugging Face 为其添加了 Neuron 支持 最佳 库,它优化模型以加快训练和推理速度,并且有许多示例任务可供在 Inf2 上运行。 另外,请检查我们的 使用大型模型推理容器在 AWS Inferentia2 上部署大型语言模型 了解如何使用模型推理容器将 LLM 部署到 AWS Inferentia2。 有关其他示例,请参阅 AWS Neuron 示例 GitHub 存储库.


关于作者

AWS Inferentia2 基于 AWS Inferentia1 构建,吞吐量提高了 4 倍,延迟降低了 10 倍 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。萨米尔·阿劳霍(SamirAraújo) 是AWS的AI / ML解决方案架构师。 他帮助客户创建AI / ML解决方案,以使用AWS解决其业务挑战。 他一直从事与计算机视觉,自然语言处理,预测,边缘ML等有关的多个AI / ML项目。 他喜欢在业余时间玩硬件和自动化项目,并且对机器人技术特别感兴趣。

时间戳记:

更多来自 AWS机器学习