ROCm 环境搭建避坑指南,Conda 与 Docker 的选择建议
Conda 与 Docker:新手该如何选择部署方式?
刚拿到 AMD Instinct 系列显卡,兴奋之余最让人头大的往往是环境搭建。很多从 NVIDIA 平台转过来的朋友,第一反应就是:“我的代码全是 CUDA 写的,难道要推倒重来?”其实大可不必焦虑,ROCm 生态早已不是当年的“荒野”,尤其是工具链的成熟,让迁移和部署变得简单许多。但在动手写代码之前,我们得先解决“在哪跑”的问题——是选熟悉的 Conda 虚拟环境,还是直接上 Docker 容器?
对于新手而言,Conda的优势在于交互友好,它和你本地的 Python 开发习惯无缝衔接,调试脚本、安装小依赖都很顺手。如果你只是想在单卡上做做实验、跑通 Hello World,Conda 是个不错的起点。但它的痛点也很明显:系统级的 ROCm 驱动版本必须严格匹配,一旦你升级了内核或者换了显卡驱动,整个环境可能瞬间崩塌。更别提那些编译型的依赖库(如 flash-attention),在 Conda 里经常因为找不到正确的头文件路径而报错,排查起来极其耗时。
相比之下,Docker虽然上手曲线稍陡,却是生产环境和复杂项目的“定海神针”。AMD 官方提供的 ROCm Docker 镜像已经预装了所有底层驱动映射、编译器工具链以及经过验证的 PyTorch 版本。这意味着你完全隔离了宿主机的干扰,无论宿主机怎么折腾,容器内部的环境始终如一。特别是当你要复现 SGLang 或 LLaMA-Factory 这类对依赖极其敏感的大模型项目时,Docker 能帮你避开 90% 以上的“在我机器上能跑”的玄学问题。我的建议很明确:学习探索期可以用 Conda 试水,但一旦涉及实际训练或推理部署,请毫不犹豫地使用 Docker。
避坑实录:PyTorch 安装与环境变量那些事儿
如果你坚持先用 Conda 体验一下,那么恭喜你,大概率会撞上依赖冲突的“欢迎仪式”。在安装 PyTorch ROCm 版时,最常见的情况是 pip 默认去拉取 CUDA 版本的 wheel 包,或者编译本地扩展时链接到了错误的库目录。
这时候,环境变量就是你的救命稻草。很多教程只告诉你pip install torch,却忽略了显式指定平台的重要性。在构建任何涉及 GPU 加速的库之前,务必在终端执行以下导出操作,告诉编译系统我们身处 ROCm 世界:
exportROCM_PATH=/opt/rocmexportHIP_VISIBLE_DEVICES=0exportCMAKE_PREFIX_PATH=$ROCM_PATH特别是在编译deepspeed或自定义算子时,如果缺少ROCM_PATH的指引,编译器往往会去/usr/local/cuda下寻找不存在的文件,导致满屏的file not found错误。此外,安装 PyTorch 时请务必使用官方指定的索引地址,例如:
pip3installtorch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.0注意版本号需与你宿主机安装的 ROCm 驱动版本严格对应(如 6.0, 6.1 等)。即便这样,Conda 环境下仍可能遇到libamdhip64.so加载失败的问题,这通常是因为动态库路径未加入LD_LIBRARY_PATH。与其在这些琐碎的链接问题上反复横跳,不如看看下面这套经过验证的 Docker 方案,真正实现开箱即用。
开箱即用:一套稳如老狗的 Dockerfile 实战
为了让大家少走弯路,我整理了一套基于 Ubuntu 22.04 和 ROCm 6.0 的 Dockerfile。它不仅包含了 PyTorch 的最新稳定版,还预装了 SGLang 和 LLaMA-Factory 运行所需的基础组件,甚至处理好了权限映射问题,让你无需在容器内 sudo 也能操作文件。
FROM rocm/pytorch:rocm6.0_ubuntu22.04_py3.10_pytorch_release_2.5.1 # 设置工作目录 WORKDIR /workspace # 避免交互式安装提示,并更新源 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y \ git \ vim \ wget \ libnuma-dev \ && rm -rf /var/lib/apt/lists/* # 安装大模型常用依赖 # 注意:flash-attn 在 ROCm 下可能需要特定参数编译,这里先安装基础版 RUN pip3 install --no-cache-dir \ vllm \ sglang \ llama-factory \ transformers \ accelerate \ datasets # 配置环境变量,确保容器内能正确识别 GPU ENV HSA_OVERRIDE_GFX_VERSION=9.4.2 # 上述 GFX_VERSION 需根据实际显卡型号调整,MI300X 通常为 9.4.2 # 创建非 root 用户以避免权限问题 (可选,视安全策略而定) # 此处简化处理,直接使用 root 以便新手快速上手文件操作 CMD ["/bin/bash"]保存为Dockerfile后,构建镜像非常简单:
dockerbuild-trocm-stable-env.接下来是启动容器的关键命令。很多新手忽略了设备映射和共享内存大小,导致容器内看不到显卡或多卡通信失败。请使用以下命令启动:
dockerrun--rm-it\--device=/dev/kfd\--device=/dev/dri\--group-add video\--ipc=host\--shm-size 16G\-v$(pwd):/workspace\rocm-stable-env这里--device参数将宿主机的 KFD 和 DRI 设备透传给容器,--group-add video确保当前用户有访问权限,而--ipc=host则是多卡分布式训练(如使用 DeepSpeed ZeRO)的必备选项,否则极易出现通信死锁。挂载卷-v $(pwd):/workspace让你在本机编辑的代码能实时同步到容器中。
进入容器后,你可以直接运行python -c "import torch; print(torch.cuda.is_available())"(注意在 ROCm 中 torch 依然沿用 cuda 接口名,但底层调用的是 HIP),若返回True且显示显卡型号,恭喜你,环境搭建大功告成。接下来,无论是用 HIPify 迁移旧代码,还是直接部署 SGLang 推理服务,你都已经拥有了一个坚实、干净的起跑线。
200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper
