博客

PyTorch 基金会和 ROCm™ 对 PyTorch 的支持,实现人工智能大众化

作者 2023年2月14日2024年11月14日暂无评论
AMD Founding Member

去年,Meta 宣布 PyTorch 加入 Linux 基金会,作为一个中立的平台来推动机器学习项目和社区的发展,AMD 作为创始成员和理事会成员参与其中。

PyTorch 基金会的使命是通过开源原则实现其软件生态系统的平民化,从而推动 AI 的普及,这与 AMD 倡导开放软件生态系统的核心原则不谋而合。AMD 致力于通过支持最新一代硬件、工具、库和其他组件来促进创新,以简化并加速 AI 在广泛科学发现领域的应用。

AMD 与 PyTorch 的核心代码开发人员(包括来自 Meta AI 的开发人员)共同为 ROCm™ 开源软件生态系统带来了一系列更新,实现了对 AMD Instinct™ 加速器以及许多 Radeon™ GPU 的稳定支持。这使 PyTorch 开发人员能够利用 AMD GPU 加速器和 ROCm 构建其卓越的下一代 AI 解决方案。PyTorch 社区在发现缺口、确定关键更新优先级、为性能优化提供反馈以及支持我们从“测试版”转向“稳定版”的过程中提供了极大的帮助。我们深切感谢 AMD 和 PyTorch 团队之间的紧密协作。ROCm 支持从“测试版”升级为“稳定版”是在 PyTorch 1.12 版本(2022 年 6 月)中实现的,它新增了在原生环境中轻松运行 PyTorch 的功能,无需配置自定义 Docker。这是 PyTorch 使用 AMD Instinct 和 ROCm 在质量和性能上获得认可的标志。这些协作成果已在微软 SuperBench 等关键行业基准测试的性能表现中得到体现(见下文图 1)。

“我们很高兴看到 AMD 的开发人员为贡献和扩展 PyTorch 的功能所产生的重大影响,这使得 AI 模型能够以更具性能、更高效、更具扩展性的方式运行。其中一个很好的例子是关于框架与未来硬件系统之间统一内存方法的思想引领,我们期待看到该功能的进一步发展。”
– Soumith Chintala,PyTorch 首席维护者及 Meta AI 工程总监

AMD CDNA™ 架构以及 ROCm 和 PyTorch 的持续改进表明,从 ROCm 4.2 和 PyTorch 1.7 升级至 ROCm 5.3 和 PyTorch 1.12 后,AMD Instinct MI100 到最新一代 AMD Instinct MI200 系列 GPU 的单 GPU 模型吞吐量均有所提升。

Graph 1: ML model performance over generation using Microsoft Superbench Suite

图 1:使用 Microsoft Superbench 套件评估的各代机器学习模型性能1, 2, 3

以下是 PyTorch 1.12 版本发布以来 ROCm 支持的部分关键更新

PyTorch 上 ROCm 的全面持续集成 (CI)

随着 PyTorch 对 ROCm 的支持从“测试版”转向“稳定版”,所有功能提交现在都通过全面的持续集成 (CI) 流程进行验证。CI 流程有助于在 Docker 和 PIP wheel 发布之前,确保构建和测试过程的正确性,并保证稳定代码的及时交付。

支持 Kineto Profiler

向 ROCm 添加 Kineto profiler 支持,现在可以帮助开发人员和用户通过有效的诊断和分析工具识别性能瓶颈。该工具还提供针对已知问题的改进建议,并通过 TensorBoard UI 进行可视化展示。

新增对关键 PyTorch 库的支持

PyTorch 生态系统库,如 TorchText(文本分类)、TorchRec(推荐系统库)、TorchVision(计算机视觉)和 TorchAudio(音频与信号处理),自 ROCm 5.1 起已得到全面支持,并已合并入 PyTorch 1.12 上游版本。

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 的框架可以通过增加对 Transformer 模块的 AMD 矩阵核心利用率,显著提高性能。这是通过 AMD Composable Kernel (CK) 库实现的,该库通过 HIP 和 C++ 为跨多种架构(包括 GPU 和 CPU)的机器学习 AI 工作负载提供了关键性能内核。

此外,AITemplate 还为广泛使用的 AI 模型(如 BERT、ResNET、Vision Transformer、Stable Diffusion 等)提供开箱即用的支持,简化了这些预训练模型的部署流程。

未来 ROCm 版本有哪些新特性?

CPU + GPU 的统一内存模型

随着系统架构的发展以应对大规模问题和数据集的复杂性,内存管理已成为关键的性能瓶颈。这就需要一种有凝聚力的策略,通过硬件和软件层面的创新来解决。AMD 凭借其有效的数据中心解决方案处于应对这一问题的独特地位,这些解决方案将 AMD EPYC™ CPU 内核与其 AMD Instinct GPU 计算单元集成在统一的数据中心 APU(加速处理单元)外形尺寸中,计划于 2023 年下半年推出。

利用统一 CPU + GPU 内存的软件开发工作已与 PyTorch 团队合作启动,旨在启用一种快速、低延迟、同步的内存模型,使不仅是 AMD,其他 AI 加速器也能解决当今复杂的内存管理问题。我们期待这一共同努力并尽快发布公告。

致谢

本篇博客重点介绍了 AMD 与 PyTorch 主要贡献者(包括 Meta)之间的共同工作,他们致力于许多核心功能的开发,以及微软对 ONNX Runtime 支持的实现。我们期待与 PyTorch 基金会的其他创始成员在接下来的步骤中开展合作,进行改进,从而实现 PyTorch 在全行业的平民化和广泛应用。

警示性声明

本博客包含有关超威半导体公司 (AMD) 的前瞻性陈述,例如 AMD 数据中心 APU 外形尺寸的可用性、时间和预期收益,这些陈述是根据 1995 年《私人证券诉讼改革法案》的安全港条款作出的。前瞻性陈述通常由“将”、“可能”、“预期”、“相信”、“计划”、“打算”、“项目”等词语以及具有类似含义的其他术语来标识。提醒投资者,本博客中的前瞻性陈述基于当前的信念、假设和预期,仅代表本博客发布之日的情况,并涉及可能导致实际结果与当前预期产生重大差异的风险和不确定性。此类陈述受某些已知和未知的风险和不确定性影响,其中许多风险难以预测,且通常超出 AMD 的控制范围,这可能导致实际结果和其他未来事件与前瞻性信息和陈述中表达、暗示或预测的结果产生重大差异。强烈建议投资者仔细审阅 AMD 在美国证券交易委员会提交的文件中的风险和不确定性,包括但不限于 AMD 最近的 10-K 和 10-Q 表格报告。除非法律要求,否则 AMD 不承担且在此声明放弃更新本博客中前瞻性陈述的任何义务。

尾注

  1. MI100D-01 SuperBench v0.5 模型训练结果基于 AMD 截至 2022 年 11 月 9 日的内部测试,测量指标为半精度下的总训练吞吐量。测试配置:2P AMD EPYC™ 7763 CPU 服务器,搭配 1x 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。服务器制造商可能会改变配置,从而产生不同的结果。性能可能因包括使用最新驱动程序和优化在内的因素而异。
  2. MI200D-01 SuperBench v0.6 模型训练结果基于 AMD 截至 2022 年 11 月 9 日的内部测试,测量指标为半精度下的总训练吞吐量。测试配置:2P AMD EPYC™ 7763 CPU 服务器,搭配 1x 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。服务器制造商可能会改变配置,从而产生不同的结果。性能可能因包括使用最新驱动程序和优化在内的因素而异。
  3. MI200D-02: SuperBench v0.6 模型训练结果基于 AMD 截至 2022 年 11 月 9 日的内部测试,测量指标为半精度下的总训练吞吐量。测试配置:2P AMD EPYC™️ 7763 CPU 服务器,搭配 1x AMD Instinct™️ MI250 (128GB HBM2e) 560W GPU,SBIOS M12,Ubuntu 20.04 LTS,主机 ROCm 5.3.0,客户机 ROCm 5.3,PyTorch 1.12。服务器制造商可能会改变配置,从而产生不同的结果。性能可能因包括使用最新驱动程序和优化在内的因素而异。