如何优雅地构建 ROCm(不发疯指南)
如果你曾经尝试过在 AMD GPU 上部署 ROCm(Radeon Open Compute)技术栈来做神经网络开发,你就会知道这有多折腾。通常的结局要么是安装庞大的二进制包,把系统一半的依赖都拖进来,要么是从源码编译一切,变成一场无休止的寻找正确库版本的冒险。
最近我偶然发现了 AMD 团队的 TheRock 仓库。这是一个让 HIP 和 ROCm 构建与部署过程变得人性化的尝试。该项目目前处于早期预览状态,但对于那些想在 AMD 硬件上使用最新 PyTorch 或 JAX 功能而不必等待官方发行版发布的人来说,它看起来像是一条生命线。
这块“石头”里面有什么
TheRock(The HIP Environment and ROCm Kit)是一个轻量级构建平台。本质上,它是一个庞大的 CMake 项目,能够拉取所需的 ROCm 组件、打补丁,并将它们构建成一个统一的整体。
这里的主要价值不在于代码本身,而在于基础设施。从各方面来看,AMD 的人们发布了自己日常构建使用的工具。
以下是该项目目前提供的内容:
- ROCm 和 PyTorch 的每日构建版本。如果你需要昨天才合入 master 的修复,这就是你的选择。
- 支持从源码构建专门针对 ROCm 的 PyTorch 和 JAX。
- 跨平台兼容性。支持多种 Linux 发行版,而且令人惊讶的是,还支持原生 Windows 11。
- 细粒度定制。你可以剥离所有不必要的组件(如调试器或特定的通信库),只构建特定任务所需的内容。
实际使用体验
该项目使用 Python 脚本进行环境准备,CMake 负责实际的构建过程。一个有趣的细节:DVC(Data Version Control)被用来管理大型二进制数据(如编译好的 MIOpen 内核)。这确实节省了编译时间,因为你不必从头重建所有内容。
在 Ubuntu 24.04 上开始使用,过程大致如下:
之后,CMake 的魔法就开始了。你可以使用 标志指定你的 GPU 架构。如果你不知道自己有什么“脑袋”,仓库中有一个脚本会建议你正确的目标。
构建灵活性
TheRock 实现了一个模块化的标志系统。如果你不做集群上的分布式训练,你可能不需要像 RCCL 这样的通信库。你可以直接关闭它们:
组件列表令人印象深刻:从编译器和运行时到视频处理库(rocDecode、rocJPEG)和性能分析工具。还有通过 ROCjitsu 提供的仿真支持,如果你手边没有想要的 GPU 但要编写代码,这很有用。
使用 ccache 加速构建过程
构建 LLVM 和重型 ML 库需要很长时间。TheRock 开发者理解这一点,并添加了配置 ccache 的脚本。此外,他们还考虑了 AMDGPU( 标志)编译代码的特殊性,这有时会让常规的 ccache 出问题。
在 Linux 上,只需一条命令即可启用:
之后,重复构建会快很多。
谁会从中受益
我认为 TheRock 真正有用的场景有三个:
- 研究人员和 ML 工程师:当你需要运行带有新 ROCm 功能的最新 PyTorch,而这些功能还没有进入稳定版 Docker 镜像时。
- 库开发者:如果你在 HIP 之上进行开发,TheRock 提供了一个方便的环境,包含所有调试工具(ROCgdb、rocprofv3)。
- Windows 用户:ROCm 在 Windows 上的支持仍在追赶 Linux,有一个通过 VS 2022 的清晰构建指南是一个很大的优势。
TheRock 项目不是“又一个安装程序”——它更像是一个专业的工作台。是的,它需要你理解 CMake 的工作方式和系统需要哪些依赖。但作为回报,它让你完全掌控 ROCm 技术栈。
如果你厌倦了与系统中的包冲突作斗争,或者想在机器学习任务中充分发挥你的 Radeon 的性能,不妨看看这个仓库。只是请记住,该项目处于早期访问阶段——可能会有 bug,但社区和 AMD 开发者相当活跃。
你可以在他们的 相关项目