AMD GPU部署LLM推理框架

基础环境

CPU: Intel(R) Xeon(R) Platinum 8358P * 2
内存:32GB * 16
显卡:AMD Instinct MI210 * 8
操作系统:CentOS Linux release 8.4.2105
内核:4.18.0-305.3.1.el8.x86_64

部署结果

vllm+Qwen3-32B,运行成功
sglang+Qwen3-32B,运行失败,所部署的sglang版本暂时不支持Qwen3,详细说明

部署过程

安装驱动和rocm:

rocm目前的最新版本是6.4.1,但截止到本文编写时间,vllm和sglang暂时还只是适配了6.3.x版本,因此建议安装6.3.x的最新版本(本文以6.3.3为例)
可以在此URL:https://repo.radeon.com/amdgpu-install/6.3.3/下找到对应的安装源,本文是安装了amdgpu-install-6.3.60303-1.el8.noarch.rpm

wget https://repo.radeon.com/amdgpu-install/6.3.3/el/8.10/amdgpu-install-6.3.60303-1.el8.noarch.rpm
rpm -ivh amdgpu-install-6.3.60303-1.el8.noarch.rpm

安装repo后,再执行以下命令安装驱动及rocm:

amdgpu-install
amdgpu-install --usecase=rocm

运行dkms status和rocm-smi命令验证安装成功。

部署vllm

直接拉起vllm镜像

拉取镜像(国内需要从国内的镜像源拉取或使用代理)

docker pull rocm/vllm:rocm6.3.1_vllm_0.8.5_20250521

更多版本见这里,https://hub.docker.com/r/rocm/vllm/tags

拉起vllm容器

docker run -it \
  --network=host \
  --group-add=video \
  --ipc=host \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --device /dev/kfd \
  --device /dev/dri \
  -v /public/models:/root/.cache/huggingface \
  rocm/vllm:rocm6.3.1_vllm_0.8.5_20250521 \
  bash

自己构建vllm镜像

直接从docker hub拉取的镜像,是vllm 0.8.5版本,如果想要较新版本,可以自己构建。
目前构建起来的版本是0.9.1

下载rocm版本的Dockerfile,https://github.com/vllm-project/vllm/blob/main/docker/Dockerfile.rocm,运行以下命令进行构建

DOCKER_BUILDKIT=1 docker build -f Dockerfile.rocm -t vllm-rocm .

如果构建失败,把Dockerfile.rocm中的ARG REMOTE_VLLM=”0″改为”1″

构建完成后,拉起容器

docker run -it \
  --network=host \
  --group-add=video \
  --ipc=host \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --device /dev/kfd \
  --device /dev/dri \
  -v /public/models:/root/.cache/huggingface \
  vllm-rocm \
  bash

运行vllm

运行vllm服务端(在容器内运行)

#已下载好模型文件,本地离线运行
vllm serve /root/.cache/huggingface/Qwen3-32B \     #目录路径是模型文件夹本身的路径
--served-model-name Qwen3-32B \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.95 \
--trust-remote-code

#在线运行,从huggingface下载模型文件
vllm serve Qwen/Qwen3-32B \       #用huggingface格式填写模型名称
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.95 \
--trust-remote-code

部署sglang

用于rocm的sglang,目前最新版是v0.4.7-rocm630,同样可以从docker hub拉取,也可以自己构建。但最新版不支持MI210(gfa90a),建议使用”lmsysorg/sglang:v0.4.3.post2-rocm630″,来源

直接拉起sglang镜像

部署lmsysorg/sglang:v0.4.3.post2-rocm630版本

拉取镜像(国内需要从国内的镜像源拉取或使用代理)

docker pull lmsysorg/sglang:v0.4.7-rocm630

更多版本见这里,https://hub.docker.com/r/lmsysorg/sglang/tags

拉起sglang容器

docker run -it \
  --network=host \
  --device=/dev/kfd \
  --device=/dev/dri \
  --ipc=host \
  --shm-size 16G \
  --group-add video \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  -v /public/models:/root/.cache/huggingface \
  --privileged \
  -w /workspace \
  lmsysorg/sglang:v0.4.3.post2-rocm630

运行sglang

运行sglang服务端(在容器内运行)

#已下载好模型文件,本地离线运行
python3 -m sglang.launch_server \
  --model-path /root/.cache/huggingface/DeepSeek-R1-Distill-Qwen-7B \   #目录路径是模型文件夹本身的路径
  --host 0.0.0.0 \
  --port 30000 \
  --tp 4 \
  --context-len 8192 \
  --max-prefill-tokens 8192 \
  --chunked-prefill-size 2048

#在线运行,从huggingface下载模型文件
python3 -m sglang.launch_server \
  --model-path deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \       #用huggingface格式填写模型名称
  --host 0.0.0.0 \
  --port 30000 \
  --tp 4

测试vllm模型运行效果:

curl -X POST -H "Content-Type: application/json" -d '{"model": "Qwen3-32B", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 10}' http://localhost:8000/v1/chat/completions

其它

sglang支持qwen3问题

因为目前的硬件环境是MI210(gfx90a),只能使用”lmsysorg/sglang:v0.4.3.post2-rocm630″这个版本,而这个版本是不支持qwen3。
最新版lmsysorg/sglang:v0.4.7-rocm630目前还没支持MI210(gfx90a),所以暂时也没法测试最新版是否支持qwen3。

下载模型

huggingface命令下载

huggingface-cli login
huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local-dir /root/.cache/huggingface/DeepSeek-R1-Distill-Qwen-7B --local-dir-use-symlinks False

国内代理站

https://hf-mirror.com/

相关资料

AMD

驱动、rocm等: https://repo.radeon.com/
rocm相关镜像: https://hub.docker.com/u/rocm

vllm

github: https://github.com/vllm-project/vllm
Dockerfile: https://github.com/vllm-project/vllm/blob/main/docker/Dockerfile.rocm
部署指引: https://docs.vllm.ai/en/latest/getting_started/installation/gpu.html#amd-rocm
镜像: https://hub.docker.com/r/rocm/vllm/tags

sglang

github: https://github.com/sgl-project/sglang
Dockerfile: https://github.com/sgl-project/sglang/blob/main/docker/Dockerfile.rocm
部署指引: https://docs.sglang.ai/start/install.html
镜像: https://hub.docker.com/r/lmsysorg/sglang/tags

监控相关

  • device-metrics-exporter
    github: https://github.com/ROCm/device-metrics-exporter
    镜像: https://hub.docker.com/r/rocm/device-metrics-exporter/tags
    运行命令:
docker run -d \
  --device=/dev/dri \
  --device=/dev/kfd \
  -p 5000:5000 \
  --name device-metrics-exporter \
  rocm/device-metrics-exporter:v1.2.1
  • amd_smi_exporter
    github: https://github.com/amd/amd_smi_exporter

  • grafana模板
    https://grafana.com/grafana/dashboards/23434-amd-instinct-single-node-dashboard/