去年,Meta 宣布 PyTorch 加入 Linux 基金会,成为发展机器学习项目和社区的中立平台,AMD 作为创始成员和理事会成员参与其中。
PyTorch 基金会 的使命是通过开源原则普及 AI 软件生态系统,从而推动 AI 的应用,这与 AMD 开放软件生态系统的核心原则相一致。AMD 致力于通过支持最新一代的硬件、工具、库和其他组件来促进创新,从而简化和加速 AI 在广泛科学发现中的应用。
AMD 与 PyTorch 核心代码库开发者(包括 Meta AI 的开发者)一起,为 ROCm™ 开放软件生态系统交付了一系列更新,为 AMD Instinct™ 加速器以及许多 Radeon™ GPU 带来了稳定的支持。现在,PyTorch 开发者能够利用 AMD GPU 加速器和 ROCm 构建他们的下一个伟大的 AI 解决方案。PyTorch 社区在识别差距、确定关键更新的优先级、为性能优化提供反馈以及支持我们从“Beta”到“Stable”的历程中提供了极大的帮助,我们非常感谢 AMD 和 PyTorch 两个团队之间的密切合作。ROCm 支持从“Beta”到“Stable”的转变发生在 PyTorch 1.12 版本(2022 年 6 月),为在原生环境中轻松运行 PyTorch 增加了支持,而无需配置自定义 Docker。这标志着对使用 AMD Instinct 和 ROCm 的 PyTorch 的支持质量和性能充满信心。这些协作努力的成果在关键行业基准(如微软的 SuperBench)的性能测量中显而易见,如下图 1 所示。
“我们很高兴看到 AMD 的开发者为贡献和扩展 PyTorch 中的功能做出的重大影响,使 AI 模型以更高效、更有效和更可扩展的方式运行。一个很好的例子是围绕框架和未来硬件系统之间统一内存方法的思想领导力,我们期待看到该功能的进展。”
- Soumith Chintala,PyTorch 首席维护者兼 Meta AI 工程总监
AMD CDNA™ 架构以及 ROCm 和 PyTorch 的逐步改进表明,从 AMD Instinct MI100 到最新一代 AMD Instinct MI200 系列 GPU,单 GPU 模型吞吐量不断提高,从 ROCm 4.2 到 ROCm 5.3,从 PyTorch 1.7 到 PyTorch 1.12。
图 1:使用 Microsoft Superbench Suite 的 ML 模型性能随代际变化 1, 2, 3
以下是自 PyTorch 1.12 版本以来 ROCm 支持的一些关键更新
PyTorch 上 ROCm 的完整持续集成 (CI)
随着 PyTorch 的 ROCm 支持从“Beta”转变为“Stable”,所有功能和特性提交现在都通过完整的持续集成 (CI) 流程进行验证。CI 流程有助于确保在预期的 Docker 和 PIP wheel 版本发布之前进行正确的构建和测试过程,并提供稳定的提交。
支持 Kineto Profiler
ROCm 中添加 Kineto profiler 支持现在可以帮助开发者和用户通过有效的诊断和分析工具了解性能瓶颈。该工具还提供改进已知问题的建议,并通过 TensorBoard UI 进行可视化。
添加了关键 PyTorch 库支持
自 ROCm 5.1 和 PyTorch 1.12 上游以来,PyTorch 生态系统库(如 TorchText(文本分类)、TorchRec(推荐系统库 - RecSys)、TorchVision(计算机视觉)、TorchAudio(音频和信号处理))已获得完全支持。
ROCm 软件堆栈提供的关键库,包括 MIOpen(卷积模型)、RCCL(ROCm 集体通信)和 rocBLAS(用于 Transformer 的 BLAS)得到了进一步优化,以提供新的潜在效率和更高的性能。
MIOpen 在多个方面进行了创新,例如实施融合以优化内存带宽和 GPU 启动开销,提供自动调优基础设施以克服问题配置的大型设计空间,以及实施不同的算法来优化不同滤波器和输入大小的卷积。MIOpen 是首批公开支持用于卷积的 bfloat16 数据类型的库之一,允许以较低的精度进行高效训练,同时保持预期的准确性。
RCCL(发音为“Rickle”)是一个独立的标准集体通信例程库,适用于 GPU,实现了 all-reduce、all-gather、reduce、broadcast、reduce-scatter、gather、scatter 和 all-to-all。支持直接 GPU 到 GPU 的发送和接收操作。它经过优化,可在使用 PCIe®、Infinity Fabric™(GPU 到 GPU)以及使用 InfiniBand Verbs 或 TCP/IP 套接字的网络平台上实现高带宽。RCCL 支持安装在单个或多个节点中的任意数量的 GPU,并且可以在单进程或多进程(例如 MPI)应用程序中使用。
除了上述关键亮点之外,AMD 和 PyTorch 共同完成了 50 多项功能和特性改进,以增加对 ROCm 的稳定支持。这些改进包括工具、编译器、运行时、通过 TorchScript 进行的图形优化、INT8 量化路径使用以及 ONNX 运行时集成,包括对基于 Navi 21 的 Radeon™ PRO 数据中心显卡的支持,仅举几例。
AITemplate 推理引擎
MetaAI 最近发布了一篇博客,宣布发布其开源 AITemplate(链接),用于统一的推理系统,该系统使用 AMD ROCm 堆栈支持 AMD Instinct GPU 加速器。这个基于 Python 的框架可以通过提高 AMD 矩阵核心对 Transformer 模块的利用率来显著提高性能。这是通过 AMD Composable Kernel (CK) 库 实现的,该库为包括 GPU 和 CPU 在内的多种架构上的 ML AI 工作负载提供性能关键的内核,通过 HIP 和 C++。
此外,AITemplate 还为广泛使用的 AI 模型(如 BERT、ResNET、Vision Transformer、Stable Diffusion 等)提供开箱即用的支持,从而简化了通过这些预训练模型的部署过程。
未来的 ROCm 版本会带来什么?
CPU + GPU 的统一内存模型
随着系统架构不断发展以应对大型问题规模和数据集的复杂性,内存管理成为关键的性能瓶颈,需要通过硬件和软件层面的创新来制定有凝聚力的策略加以解决。AMD 凭借其有效的数据中心解决方案,将 AMD EPYC™ CPU 核心与其 AMD Instinct GPU 计算单元集成到真正的统一数据中心 APU(加速处理单元)外形尺寸中,计划于 2023 年下半年推出,从而在解决此问题方面具有独特的优势。
与 PyTorch 团队合作,利用统一 CPU + GPU 内存的软件工作已经开始,以实现快速、低延迟、同步的内存模型的使用,该模型不仅使 AMD,而且还使其他 AI 加速器能够解决当今复杂的内存管理问题。我们期待着这项共同努力和即将发布的公告。
致谢
本博客中的内容重点介绍了 AMD 和包括 Meta 在内的关键 PyTorch 贡献者在许多核心功能方面的合作,以及微软对 ONNX Runtime 支持的贡献。我们期待与 PyTorch 基金会的其他创始成员合作,共同推进下一步工作和改进,以普及和扩大 PyTorch 在整个行业中的应用。
警示声明
本博客包含关于 Advanced Micro Devices, Inc. (AMD) 的前瞻性声明,例如 AMD 数据中心 APU 外形尺寸的可用性、时间和预期收益,这些声明是根据 1995 年《私人证券诉讼改革法案》的安全港条款作出的。“将”、“可能”、“期望”、“相信”、“计划”、“打算”、“预计”以及其他具有类似含义的词语通常用于识别前瞻性声明。投资者请注意,本博客中的前瞻性声明基于当前的信念、假设和预期,仅代表本博客发布之日的情况,并且涉及风险和不确定性,这些风险和不确定性可能导致实际结果与当前预期存在重大差异。此类声明受到某些已知和未知风险和不确定性的影响,其中许多风险和不确定性难以预测且通常超出 AMD 的控制范围,这些风险和不确定性可能导致实际结果和其他未来事件与前瞻性信息和声明中明示、暗示或预测的结果存在重大差异。强烈建议投资者详细审查 AMD 向证券交易委员会提交的文件中包含的风险和不确定性,包括但不限于 AMD 最新的 10-K 表格和 10-Q 表格报告。除非法律要求,否则 AMD 不承担任何义务,并在此声明不承担任何更新本博客中前瞻性声明的义务。
尾注
- MI100D-01 SuperBench v0.5 模型训练结果基于 AMD 内部测试(截至 2022 年 11 月 9 日),测量了总训练吞吐量(半精度),使用 2P AMD EPYC™ 7763 CPU 服务器,测试配置为 1 个 AMD Instinct™ MI100 (32GB HBM2e) 300W GPU,SBIOS 2.2,Ubuntu® 20.04.5 LTS,主机 ROCm™ 5.2.0,访客 ROCm 4.2,PyTorch 1.7.0。服务器制造商的配置可能有所不同,从而导致不同的结果。性能可能因多种因素而异,包括使用最新的驱动程序和优化。
- MI200D-01 SuperBench v0.6 模型训练结果基于 AMD 内部测试(截至 2022 年 11 月 9 日),测量了总训练吞吐量(半精度),使用 2P AMD EPYC™ 7763 CPU 服务器,测试配置为 1 个 AMD Instinct™ MI210 (64GB HBM2e) 300W GPU,SBIOS 2.2,Ubuntu 20.04.5 LTS,主机 ROCm 5.3.0,访客 ROCm 5.3,PyTorch 1.12。服务器制造商的配置可能有所不同,从而导致不同的结果。性能可能因多种因素而异,包括使用最新的驱动程序和优化。
- MI200D-02:SuperBench v0.6 模型训练结果基于 AMD 内部测试(截至 2022 年 11 月 9 日),测量了总训练吞吐量(半精度),使用 2P AMD EPYC™️ 7763 CPU 服务器,测试配置为 1 个 AMD Instinct™️ MI250 (128GB HBM2e) 560W GPU,SBIOS M12,Ubuntu 20.04 LTS,主机 ROCm 5.3.0,访客 ROCm 5.3,PyTorch 1.12。服务器制造商的配置可能有所不同,从而导致不同的结果。性能可能因多种因素而异,包括使用最新的驱动程序和优化。