更快的训练和推理:Habana Gaudi®-2 对比 Nvidia A100 80GB
在本文中,您将学习如何使用 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,您应该遵循以下步骤:
访问 英特尔开发云登录页面,登录您的账户,如果没有账户则注册。
访问 英特尔开发云管理控制台。
选择“Habana Gaudi2 深度学习服务器,包含八张 Gaudi2 HL-225H 夹层卡和最新的 Intel® Xeon® 处理器”,然后单击右下角的“启动实例”,如下图所示。
然后您可以请求一个实例
请求通过验证后,重复步骤 3 并点击“添加 OpenSSH 公钥”来添加支付方式(信用卡或促销代码)和 SSH 公钥,您可以使用
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
生成 SSH 公钥。每次添加支付方式或 SSH 公钥时,您可能会被重定向到步骤 3。重新执行步骤 3,然后单击“启动实例”。您必须接受建议的通用条款才能实际启动实例。
访问 英特尔开发云管理控制台,然后单击名为“查看实例”的选项卡。
您可以复制 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 硬件加速器和软件库来加速您的机器学习训练和推理工作流程,请查看我们的在此处阅读我们的合作关系并联系他们。要了解更多关于 Hugging Face 致力于使 AI 硬件加速器易于使用的努力,请查看我们的硬件合作伙伴计划。
。要了解更多关于 Habana 解决方案的信息,请