GPU 软件
在 AMD Instinct MI355X 上配置 ROCm
您的 MI355X 服务器交付时已安装 ROCm 镜像。按以下步骤确认全部 8 张 GPU 状态正常,然后让 PyTorch、vLLM 和多 GPU 任务运行起来。
本页内容
本指南介绍 AMD Instinct MI355X 服务器的 ROCm 配置,带您从首次登录一直走到运行 PyTorch、vLLM 和多 GPU 任务。我们的 8 卡 MI355X 服务器是裸金属服务器,交付时已安装 ROCm 镜像,因此内核驱动和 ROCm 都已装好。根据 AMD 公布的规格,每张 GPU 配备 288 GB HBM3e 显存。请优先使用基于 ROCm 7.x 构建的容器和 wheel 包:为较早 ROCm 版本构建的软件可能不包含面向 MI355X(架构名称为 gfx950)的代码。
用 rocm-smi 、amd-smi 和 rocminfo 检查 GPU
rocm-smi
amd-smi list
amd-smi static
rocminfo | grep -E 'Marketing Name|gfx'
在 和 的输出中,您应该能看到 8 张 GPU,编号为 0 到 7。rocminfo 会把 CPU 和每张 GPU 都列为代理(agent),每张 GPU 都应显示 gfx950 还会提供每张 GPU 的详细信息。日常检查请参阅 GPU 监控。
将用户加入 render 和 video 组
root 用户可以直接使用 GPU。其他用户需要访问 /dev/kfd 和 /dev/dri,ROCm 通过 render 和 video 组授予这一权限。对每个非 root 用户(此处为 bob)执行:
sudo usermod -aG render,video bob
# after bob logs out and back in
groups bob
输出中应包含 render 和 video。缺少这两个组时,ROCm 程序会找不到 GPU,或者因 /dev/kfd 的权限错误而失败。
通过 ROCm 容器或 wheel 包运行 PyTorch
最简单的方式是使用 AMD 的 PyTorch 容器,其中自带版本匹配的 ROCm 用户态组件。如果您的镜像中没有 Docker,请先安装(在 Ubuntu 上运行 sudo apt install )。设备参数的含义见 Docker GPU 容器。
docker run -it --rm \
--device=/dev/kfd --device=/dev/dri --group-add video \
--ipc=host --security-opt seccomp=unconfined \
rocm/pytorch:latest
在容器内检查 PyTorch 的识别结果:
python3 -c "import torch; print(torch.version.hip, torch.cuda.device_count(),
torch.cuda.get_device_name(0))"
您应该会看到 HIP 版本号、8 和 GPU 名称。ROCm 版 PyTorch 保留了 torch.cuda API,因此大多数 CUDA 代码无需修改即可运行。为了让构建可复现,请固定使用 rocm/pytorch 仓库中的某个具体标签,而不是 latest。
如果要改为直接在主机上安装,请使用虚拟环境,以及 PyTorch 安装选择器针对您的 ROCm 版本列出的 ROCm wheel 索引:
sudo apt install -y python3-venv
python3 -m venv ~/venvs/rocm
source ~/venvs/rocm/bin/activate
pip install torch --index-url https://download.pytorch.org/whl/rocmX.Y
将 rocmX.Y 替换为该版本,并确认所用的 PyTorch 版本支持 MI355X。如果不支持,您会看到 hipErrorNoBinaryForGpu 错误。
选择进程可见的 GPU
HIP_VISIBLE_DEVICES=0,1 python3 train.py
# the same inside a container
docker run --rm --device=/dev/kfd --device=/dev/dri --group-add video \
-e HIP_VISIBLE_DEVICES=0,1 rocm/pytorch:latest \
python3 -c "import torch; print(torch.cuda.device_count())"
容器中的命令应输出 2。在进程内部,可见的 GPU 会从 0 开始重新编号。HIP 同样支持 CUDA_VISIBLE_DEVICES,而 ROCR_VISIBLE_DEVICES 在更底层进行过滤;请只设置其中一个,以免多个变量组合起来造成混乱。要同时运行两个任务,请为每个任务分配各自的一组 GPU,例如 0 到 3 号和 4 到 7 号。
在 ROCm 容器中用 vLLM 提供模型推理服务
AMD 发布了支持 ROCm 的 vLLM 镜像。用相同的设备参数启动容器,只在回环接口上发布端口,并把模型权重放在数据盘上:
docker run -d --name vllm \
--device=/dev/kfd --device=/dev/dri --group-add video \
--ipc=host --security-opt seccomp=unconfined \
-p 127.0.0.1:8000:8000 \
-v /data/hf:/data/hf -e HF_HOME=/data/hf \
rocm/vllm:latest \
vllm serve Qwen/Qwen2.5-72B-Instruct --tensor-parallel-size 8 \
--host 0.0.0.0 --port 8000
用 docker logs 跟踪启动过程,然后运行 curl http://127.0.0.1:8000/v1/models:您应该能在列表中看到该模型。vLLM 在容器内监听所有接口,而 127.0.0.1 映射让它只能从主机本机访问。72B 模型的 BF16 权重约需 145 GB,因此单张 MI355X 即可装下;分布到 8 张 GPU 上,则能为 KV 缓存留出多得多的显存。启动选项、需授权访问的模型(gated model)和 API 测试见用 vLLM 提供大语言模型(LLM)推理服务,如何安全地对外开放推理端点见防火墙指南。
使用 RCCL 进行多 GPU 通信
RCCL 是 ROCm 的集合通信库,实现了 NCCL API。当您选择 nccl 后端时,ROCm 版 PyTorch 使用的就是 RCCL,因此用 torchrun 启动的 DDP 和 FSDP 脚本无需修改即可运行;RCCL 也会读取常用的 NCCL 变量,例如 NCCL_DEBUG=INFO
sudo apt install -y git build-essential
git clone https://github.com/ROCm/rccl-tests.git
cd rccl-tests
make
./build/all_reduce_perf -b 8 -e 8G -f 2 -g 8
每一行的 #wrong 列都应为 0。带宽列的解读方法见 NCCL 测试。对于跨多台服务器的多节点任务,请在部署服务器时,通过给工程师的备注申请在服务器之间开通私有网络;如果服务器已经交付,请在控制台提交工单。
故障排查
- hipErrorNoBinaryForGpu. 该构建不包含面向
gfx950的代码。请使用基于 ROCm 7.x 的镜像,或支持 MI355X 的 wheel 包。 - 访问 /dev/kfd 时出现 Permission denied,或找不到 GPU。将该用户加入 render 和 video 组,然后重新登录。在 Docker 中,请同时传入两个
参数。--device - 列出的 GPU 少于 8 张。运行
sudo dmesg | grep,然后将其输出连同-i amdgpu 的输出,通过控制台中的工单发送给我们。amd-smi list
问题仍未解决?
请在控制台提交工单,写明服务器、您运行了什么以及错误输出(如有)。工程师 7×24 小时答复。