GPU 软件

在 AMD Instinct MI355X 上配置 ROCm

您的 MI355X 服务器交付时已安装 ROCm 镜像。按以下步骤确认全部 8 张 GPU 状态正常,然后让 PyTorch、vLLM 和多 GPU 任务运行起来。

本页内容
  1. 用 rocm-smi、amd-smi 和 rocminfo 检查 GPU
  2. 将用户加入 render 和 video 组
  3. 通过 ROCm 容器或 wheel 包运行 PyTorch
  4. 选择进程可见的 GPU
  5. 在 ROCm 容器中用 vLLM 提供模型推理服务
  6. 使用 RCCL 进行多 GPU 通信
  7. 故障排查

本指南介绍 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'

在 rocm-smi 和 amd-smi list 的输出中,您应该能看到 8 张 GPU,编号为 0 到 7。rocminfo 会把 CPU 和每张 GPU 都列为代理(agent),每张 GPU 都应显示 gfx950。amd-smi 是 AMD 较新的工具:它涵盖 rocm-smi 的功能,amd-smi static 还会提供每张 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 -y docker.io)。设备参数的含义见 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 -f vllm 跟踪启动过程,然后运行 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 --standalone --nproc_per_node=8 启动的 DDP 和 FSDP 脚本无需修改即可运行;RCCL 也会读取常用的 NCCL 变量,例如 NCCL_DEBUG=INFO。要测量 GPU 之间的带宽,请编译 AMD 的 rccl-tests,它与 NVIDIA 的 nccl-tests 相对应:

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 小时答复。

提交工单

登录 FullGPU

管理您的 GPU 服务器、余额和账单。

首次使用 FullGPU? 创建账户