去年,Meta 宣布 PyTorch 加入 Linux 基金会,成为一个中立的家园,以促进机器学习项目和社区的发展,其中 AMD 作为创始成员和理事会的一部分拥有代表席位。
PyTorch 基金会的使命是通过开源原则普及其软件生态系统,从而推动 AI 的采用,这与 AMD 开放软件生态系统的核心原则一致。AMD 致力于通过支持最新一代的硬件、工具、库和其他组件来促进创新,以简化和加速 AI 在广泛科学发现领域的采用。
AMD 与主要的 PyTorch 代码库开发者(包括 Meta AI 的开发者)一起,为 ROCm™ 开放软件生态系统提供了一系列更新,这些更新为 AMD Instinct™ 加速器以及众多 Radeon™ GPU 带来了稳定支持。这使得 PyTorch 开发者现在能够利用 AMD GPU 加速器和 ROCm 构建出卓越的 AI 解决方案。PyTorch 社区在识别差距、确定关键更新优先级、提供性能优化反馈以及支持我们将 ROCm 支持从“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 的持续改进表明,在 ROCm 版本从 4.2 升级到 5.3、PyTorch 版本从 1.7 升级到 1.12 的过程中,单 GPU 模型吞吐量从 AMD Instinct MI100 提升到了最新一代 AMD Instinct MI200 系列 GPU。
图表 1:使用 Microsoft Superbench 套件的跨代 ML 模型性能 1, 2, 3
以下是 PyTorch 1.12 版本发布以来 ROCm 支持的一些关键更新
PyTorch 上 ROCm 的完整持续集成 (CI)
随着 PyTorch 对 ROCm 的支持从“Beta”阶段转向“Stable”阶段,所有功能和特性提交现在都通过完整的持续集成 (CI) 流程进行验证。CI 流程有助于确保在即将发布的包含稳定提交的 Docker 和 PIP wheel 版本之前,构建和测试流程的正确性。
支持 Kineto Profiler
将 Kineto profiler 支持添加到 ROCm 中,现在可以帮助开发者和用户通过有效的诊断和性能分析工具理解性能瓶颈。该工具还提供改进已知问题的建议以及通过 TensorBoard UI 进行可视化。
添加了对关键 PyTorch 库的支持
PyTorch 生态系统库,例如 TorchText(文本分类)、TorchRec(推荐系统库 - RecSys)、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 sockets 的网络平台上实现高带宽。RCCL 支持安装在单个或多个节点中的任意数量的 GPU,并可用于单进程或多进程(例如 MPI)应用程序。
除了上述关键亮点,AMD 和 PyTorch 共同完成了 50 多项功能和性能改进,以增加对 ROCm 的稳定支持。这些改进包括对工具、编译器、运行时、通过 TorchScript 进行图优化、INT8 量化路径使用以及 ONNX runtime 集成的改进,包括对基于 Navi 21 的 Radeon™ PRO 数据中心显卡的支持等等。
AITemplate 推理引擎
MetaAI 最近发布了一篇博客,宣布开源 AITemplate (链接),这是一个统一的推理系统,使用 AMD ROCm 栈支持 AMD Instinct GPU 加速器。这个基于 Python 的框架可以通过提高 AMD 矩阵核心在 Transformer 块中的利用率来显著提高性能。这是通过 AMD Composable Kernel (CK) 库实现的,该库通过 HIP 和 C++ 为包括 GPU 和 CPU 在内的多种架构上的 ML 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 与包括 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 模型训练结果基于截至 2022 年 11 月 9 日的 AMD 内部测试,测量了使用一台配备 2P AMD EPYC™ 7763 CPU 服务器和 1x AMD Instinct™ MI100 (32GB HBM2e) 300W GPU 的总训练吞吐量(半精度),测试配置为 SBIOS 2.2, Ubuntu® 20.04.5 LTS, host ROCm™ 5.2.0, guest ROCm 4.2, PyTorch 1.7.0。服务器制造商的配置可能有所不同,从而产生不同的结果。性能可能因使用最新驱动程序和优化等因素而异。
- MI200D-01 SuperBench v0.6 模型训练结果基于截至 2022 年 11 月 9 日的 AMD 内部测试,测量了使用一台配备 2P AMD EPYC™ 7763 CPU 服务器和 1x AMD Instinct™ MI210 (64GB HBM2e) 300W GPU 的总训练吞吐量(半精度),测试配置为 SBIOS 2.2, Ubuntu 20.04.5 LTS, host ROCm 5.3.0, guest ROCm 5.3, PyTorch 1.12。服务器制造商的配置可能有所不同,从而产生不同的结果。性能可能因使用最新驱动程序和优化等因素而异。
- MI200D-02: SuperBench v0.6 模型训练结果基于截至 2022 年 11 月 9 日的 AMD 内部测试,测量了使用一台配备 2P AMD EPYC™️ 7763 CPU 服务器和 1x AMD Instinct™️ MI250 (128GB HBM2e) 560W GPU 的总训练吞吐量(半精度),测试配置为 SBIOS M12, Ubuntu 20.04 LTS, host ROCm 5.3.0, guest ROCm 5.3, PyTorch 1.12。服务器制造商的配置可能有所不同,从而产生不同的结果。性能可能因使用最新驱动程序和优化等因素而异。