更快的训练和推理:Habana Gaudi®-2 对比 Nvidia A100 80GB

发布于 2022 年 12 月 14 日
在 GitHub 上更新

在本文中,您将学习如何使用 Habana® Gaudi®2 来加速模型训练和推理,并使用 🤗 Optimum Habana 训练更大的模型。然后,我们介绍了包括 BERT 预训练、Stable Diffusion 推理和 T5-3B 微调在内的几项基准测试,以评估第一代 Gaudi、Gaudi2 和 Nvidia A100 80GB 之间的性能差异。剧透警告——Gaudi2 在训练和推理方面都比 Nvidia A100 80GB 快约两倍!

Gaudi2 是 Habana Labs 设计的第二代 AI 硬件加速器。单个服务器包含 8 个加速器设备,每个设备具有 96GB 内存(而第一代 Gaudi 为 32GB,A100 80GB 为 80GB)。Habana SDK SynapseAI 适用于第一代 Gaudi 和 Gaudi2。这意味着 🤗 Optimum Habana,它在 🤗 Transformers 和 🤗 Diffusers 库与 SynapseAI 之间提供了非常用户友好的界面,**在 Gaudi2 上的工作方式与在第一代 Gaudi 上完全相同!**因此,如果您已经有适用于第一代 Gaudi 的即用型训练或推理工作流程,我们鼓励您在 Gaudi2 上尝试它们,因为它们无需任何更改即可工作。

如何访问 Gaudi2?

英特尔和 Habana 提供 Gaudi2 的一种简单、经济高效的方式是在英特尔开发云上。要开始在那里使用 Gaudi2,您应该遵循以下步骤:

  1. 访问 英特尔开发云登录页面,登录您的账户,如果没有账户则注册。

  2. 访问 英特尔开发云管理控制台

  3. 选择“Habana Gaudi2 深度学习服务器,包含八张 Gaudi2 HL-225H 夹层卡和最新的 Intel® Xeon® 处理器”,然后单击右下角的“启动实例”,如下图所示。

    Cloud Architecture
  4. 然后您可以请求一个实例

    Cloud Architecture
  5. 请求通过验证后,重复步骤 3 并点击“添加 OpenSSH 公钥”来添加支付方式(信用卡或促销代码)和 SSH 公钥,您可以使用 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa 生成 SSH 公钥。每次添加支付方式或 SSH 公钥时,您可能会被重定向到步骤 3。

  6. 重新执行步骤 3,然后单击“启动实例”。您必须接受建议的通用条款才能实际启动实例。

  7. 访问 英特尔开发云管理控制台,然后单击名为“查看实例”的选项卡。

  8. 您可以复制 SSH 命令以远程访问您的 Gaudi2 实例!

如果您终止实例并希望再次使用 Gaudi2,则必须重新执行整个过程。

您可以在此处找到有关此过程的更多信息。

基准测试

我们进行了一些基准测试,以评估第一代 Gaudi、Gaudi2 和 A100 80GB 在训练和推理方面的能力,以及不同大小模型的表现。

BERT 预训练

几个月前,Hugging Face 的技术主管 Philipp Schmid 介绍了如何在 Gaudi 上使用 🤗 Optimum Habana 预训练 BERT。共进行了 65k 训练步骤,每个设备批处理大小为 32 个样本(总计 8*32=256),总训练时间为 8 小时 53 分钟(您可以在此处查看此运行的 TensorBoard 日志)。

我们在 Gaudi2 上以相同的超参数重新运行了相同的脚本,总训练时间为 2 小时 55 分钟(查看此处的日志)。这意味着 Gaudi2 在不改变任何设置的情况下实现了 3.04 倍的加速。

由于 Gaudi2 的每个设备内存容量大约是第一代 Gaudi 的 3 倍,因此可以利用更大的容量来处理更大的批次。这将使 HPU 有更多的工作要做,同时也能让开发者尝试一系列第一代 Gaudi 无法实现的超参数值。在每个设备批处理大小为 64 个样本(总计 512 个)的情况下,我们在 20k 步实现了与之前 65k 步运行相似的损失收敛。总训练时间为 1 小时 33 分钟(查看此处的日志)。在此配置下,吞吐量提高了 1.16 倍,同时新的批处理大小显著加速了收敛。总的来说,与第一代 Gaudi 相比,Gaudi2 的总训练时间缩短了 5.75 倍,吞吐量提高了 3.53 倍

Gaudi2 也比 A100 更快:批处理大小为 32 时,Gaudi2 为 1580.2 样本/秒,A100 为 981.6 样本/秒;批处理大小为 64 时,Gaudi2 为 1835.8 样本/秒,A100 为 1082.6 样本/秒,这与 Habana 宣布的 BERT 预训练第一阶段批处理大小为 64 时加速 1.8 倍的结果一致。

下表显示了第一代 Gaudi、Gaudi2 和 Nvidia A100 80GB GPU 的吞吐量

第一代 Gaudi (BS=32) Gaudi2 (BS=32) Gaudi2 (BS=64) A100 (BS=32) A100 (BS=64)
吞吐量(样本/秒) 520.2 1580.2 1835.8 981.6 1082.6
加速比 x1.0 x3.04 x3.53 x1.89 x2.08

BS 为每个设备的批处理大小。Gaudi 运行在混合精度 (bf16/fp32) 下进行,A100 运行在 fp16 下进行。所有运行均为 分布式 运行,使用 8 个设备

使用 Stable Diffusion 从文本生成图像

🤗 Optimum Habana 1.3 版本的主要新功能之一是对 Stable Diffusion 的支持。现在在 Gaudi 上从文本生成图像变得非常容易。与在 GPU 上使用 🤗 Diffusers 不同,图像是批量生成的。由于模型编译时间,前两个批次会比后续迭代慢。在此基准测试中,这些前两次迭代被丢弃,以计算第一代 Gaudi 和 Gaudi2 的吞吐量。

此脚本以 8 个样本的批处理大小运行。它使用 Habana/stable-diffusion Gaudi 配置。

我们得到的结果与 Habana 此处发布的数据一致,如下表所示。Gaudi2 展示的延迟比第一代 Gaudi 快 3.51 倍(3.25 秒对比 0.925 秒),比 Nvidia A100 快 2.84 倍(2.63 秒对比 0.925 秒)。它还可以支持更大的批处理大小。

第一代 Gaudi (BS=8) Gaudi2 (BS=8) A100 (BS=1)
延迟(秒/图) 3.25 0.925 2.63
加速比 x1.0 x3.51 x1.24

更新:以上数据已更新,因为 SynapseAI 1.10 和 Optimum Habana 1.6 在第一代 Gaudi 和 Gaudi2 上带来了额外的加速。

BS 为批处理大小。Gaudi 运行在 bfloat16 精度下进行,A100 运行在 fp16 精度下(更多信息请参阅此处)。所有运行均为 单设备 运行。

微调 T5-3B

Gaudi2 每个设备拥有 96 GB 内存,可以运行更大的模型。例如,我们成功地微调了 T5-3B(包含 30 亿参数),其中唯一的内存优化是梯度检查点。这在第一代 Gaudi 上是不可能的。这里是此运行的日志,模型使用此脚本在 CNN DailyMail 数据集上进行文本摘要微调。

我们取得的结果如下表所示。Gaudi2 比 A100 80GB 快 2.44 倍。我们观察到 Gaudi2 无法适应大于 1 的批处理大小。这是因为在运行的第一次迭代中,操作累积的图所占用的内存空间。Habana 正在努力优化未来 SynapseAI 版本中的内存占用。我们期待使用新版本的 Habana SDK 和 DeepSpeed 来扩展此基准测试,看看趋势是否保持不变。

第一代 Gaudi Gaudi2 (BS=1) A100 (BS=16)
吞吐量(样本/秒) 不适用 19.7 8.07
加速比 / x2.44 x1.0

BS 为每个设备的批处理大小。Gaudi2 和 A100 运行在 fp32 精度下,并启用了梯度检查点。所有运行均为 分布式 运行,使用 8 个设备

结论

在本文中,我们讨论了我们对 Gaudi2 的首次体验。由于 Habana 的 SDK SynapseAI 完全兼容第一代 Gaudi 和 Gaudi2,因此从第一代 Gaudi 到 Gaudi2 的过渡完全无缝。这意味着未来版本提出的新优化将同时惠及它们。

您已经看到,Habana Gaudi2 显著提高了第一代 Gaudi 的性能,并且在训练和推理方面都提供了 Nvidia A100 80GB 大约两倍的吞吐速度。

您现在也知道如何通过英特尔开发者专区设置 Gaudi2 实例。查看您可以使用 🤗 Optimum Habana 轻松运行的示例

如果您有兴趣使用最新的 AI 硬件加速器和软件库来加速您的机器学习训练和推理工作流程,请查看我们的专家加速计划。要了解更多关于 Habana 解决方案的信息,请在此处阅读我们的合作关系联系他们。要了解更多关于 Hugging Face 致力于使 AI 硬件加速器易于使用的努力,请查看我们的硬件合作伙伴计划

相关主题


感谢阅读!如果您有任何问题,请随时通过Github或在论坛上与我联系。您也可以在LinkedIn上与我联系。

社区

注册登录以发表评论