使用 亚马逊云科技 Graviton 处理器优化了 PyTorch 2.0 的推断

由于采用了专门的内置指令,新一代 CPU 显著提高了机器学习 (ML) 推理的性能。结合其灵活性、高速开发和低运营成本,这些通用处理器为其他现有硬件解决方案提供了替代方案。

亚马逊云科技、Arm、Meta 等公司帮助优化了基于 ARM 的处理器的 PyTorch 2.0 推理性能。因此,我们很高兴地宣布,PyTorch 2.0的基于亚马逊云科技 Graviton的实例推断性能与之前的PyTorch版本相比,Resnet50的速度高达3.5倍(见下图),以及BERT速度的1.4倍,这使得基于Graviton的实例成为这些模型在亚马逊云科技上最快的计算优化实例。

亚马逊云科技测得,在Torch Hub Resnet50上使用基于亚马逊云科技 Graviton3的亚马逊弹性云计算C7g实例,以及与同类EC2实例相比,使用多个Hugging Face模型进行PyTorch推断可节省多达50%的成本,如下图所示。

此外,推理的延迟也减少了,如下图所示。

我们在Graviton上看到其他工作负载的性价比优势也有类似的趋势,例如使用FFmpeg进行 视频 编码。

优化详情

优化集中在三个关键领域:

  • GEMM 内核 — PyTorch 通过 OneDNN 后端(以前称为 MKL-DNN)支持基于 ARM 的处理器的 Arm 计算库 (ACL) GEMM 内核。ACL 库提供适用于 fp32 和 bfloat16 格式的 Neon 和 SVE 优化的 GEMM 内核。这些内核提高了 SIMD 硬件利用率并减少了端到端推理延迟。
  • bfloat16 支持 — Graviton3 中的 bfloat16 支持允许高效部署使用 bfloat16、fp32 和 AMP(自动混合精度)训练的模型。标准 fp32 模型通过 OneDNN 快速数学模式使用 bfloat16 内核,无需模型量化,与不支持 bfloat16 快速数学的现有 fp32 模型推断相比,性能最多快两倍。
  • 原始缓存 — 我们还为 conv、matmul 和内积运算符实现了原始缓存,以避免冗余的 GEMM 内核初始化和张量分配开销。

如何利用优化

最简单的入门方法是在 亚马逊弹性计算云 (Amazon EC2) C7g 实例 或亚马逊 S ageMaker 上使用 A WS 深度学习容器 (DLC)。 适用于 A WS Gravit on 或 x86 的 DLC 可在 亚马逊弹性容器注册表 (亚马逊 ECR) 上使用。 有关 SageMaker 的更多详细信息,请参阅使用亚马逊 SageMaker 在基于 Graviton 的 亚马逊云科技 实例上 运行机器学习推理工作负载,亚马逊 SageMa ker 新增了八个基于 Gravit on 的实例用于模型部 署。

使用 亚马逊云科技 DLC

要使用 亚马逊云科技 DLC,请使用以下代码:

sudo apt-get update
sudo apt-get -y install awscli docker

# Login to ECR to avoid image download throttling
aws ecr get-login-password --region us-east-1 \
| docker login --username AWS \
  --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com

# Pull the AWS DLC for pytorch
# Graviton
docker pull 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference-graviton:2.0.0-cpu-py310-ubuntu20.04-ec2

# x86
docker pull 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:2.0.0-cpu-py310-ubuntu20.04-ec2

如果你更喜欢通过 pip 安装 PyTorch,请从官方存储库中安装 PyTorch 2.0 轮子。在这种情况下,在启动 PyTorch 以激活 Graviton 优化之前,你必须按照以下代码中的说明设置两个环境变量。

使用 Python 轮子

要使用 Python 轮子,请参阅以下代码:

# Install Python
sudo apt-get update
sudo apt-get install -y python3 python3-pip

# Upgrade pip3 to the latest version
python3 -m pip install --upgrade pip

# Install PyTorch and extensions
python3 -m pip install torch
python3 -m pip install torchvision torchaudio torchtext

# Turn on Graviton3 optimization
export DNNL_DEFAULT_FPMATH_MODE=BF16
export LRU_CACHE_CAPACITY=1024

运行推断

你可以使用 Py Torch TorchBench 来衡量 CPU 推理性能的改进,或者比较不同的实例类型:

# Pre-requisite: 
# pull and run the AWS DLC
# or 
# pip install PyTorch2.0 wheels and set the previously mentioned environment variables

# Clone PyTorch benchmark repo
git clone https://github.com/pytorch/benchmark.git

# Setup Resnet50 benchmark
cd benchmark
python3 install.py resnet50

# Install the dependent wheels
python3 -m pip install numba

# Run Resnet50 inference in jit mode. On successful completion of the inference runs,
# the script prints the inference latency and accuracy results
python3 run.py resnet50 -d cpu -m jit -t eval --use_cosine_similarity

基准设定

您可以使用 Amazon SageMaker 推理 推荐器实用程序自动对不同实例进行性能基准测试。使用推理推荐器,您可以找到以最低成本为给定机器学习模型提供最佳性能的实时推理端点。我们通过在生产端点上部署模型,使用推理推荐笔记本收集了上述数据。有关推理推荐的更多详细信息,请参阅 GitHub 存储库。 我们对这篇文章的以下模型进行了基准测试: ResNet50 图像分类 、D ist ilbert 情感分析 、 Rober tA 填充掩码 和 RobertA 情感分析。

结论

亚马逊云科技测得,使用基于亚马逊云科技 Graviton3的亚马逊弹性云计算C7g实例,在Torch Hub Resnet50上进行PyTorch推断可节省多达50%的成本,与同类的EC2实例相比,使用多个Hugging Face模型。这些实例在 SageMaker 和亚马逊 EC2 上可用。 亚马逊云科技 Graviton 技术指南 提供了经过优化的库和最佳实践的列表,可帮助您在不同工作负载中使用 Graviton 实例实现成本优势。

如果您发现在 亚马逊云科技 Graviton 上没有看到类似性能提升的用例,请在 亚马逊云科技 Graviton 技术指南 中打开一个问题告诉我们。我们将继续增加更多性能改进,使Graviton成为使用PyTorch进行推理的最具成本效益和最高效的通用处理器。


作者简介

Sunita Nadampalli 是 亚马逊云科技 的软件开发经理。她负责针对机器学习、HPC 和多媒体工作负载的 Graviton 软件性能优化。她热衷于开源开发,并通过 Arm SoC 提供具有成本效益的软件解决方案。