从零部署千问模型(AMD篇):使用AMD显卡部署Qwen模型完整指南
前言
在前面的系列教程中,我们介绍了使用 NVIDIA GPU 部署千问模型的方法。但很多同学手上是 AMD 显卡(如 RX 7900XTX、RX 6800XT 等),CUDA 生态不直接支持 AMD。本文将详细介绍如何在 AMD GPU 上部署 Qwen 千问模型,涵盖 ROCm 安装、vLLM-ROCm 部署、Ollama ROCm 版本以及 CPU 兜底方案。
一、AMD GPU 推理方案概览
AMD GPU 运行大模型主要有以下几条路径:
- ROCm + PyTorch:AMD 官方的 GPU 计算平台,类似 CUDA,是官方推荐方案
- ROCm + vLLM:vLLM 已支持 ROCm 后端,可直接用 AMD 显卡跑高性能推理
- Ollama (ROCm):Ollama 提供 ROCm 版本,支持 AMD 显卡
- llama.cpp + HIP:轻量级方案,通过 HIP 后端支持 AMD GPU
- CPU 推理:无 GPU 或 GPU 不支持时的兜底方案
| 方案 | 性能 | 易用性 | 支持的 AMD 显卡 |
|---|---|---|---|
| ROCm + vLLM | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | RX 7900XTX/XT, Instinct MI系列 |
| Ollama (ROCm) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 同上 |
| llama.cpp + HIP | ⭐⭐⭐ | ⭐⭐⭐ | 较广泛(含 RDNA2/3) |
| CPU 推理 | ⭐⭐ | ⭐⭐⭐⭐⭐ | 所有设备 |
二、确认 AMD GPU 兼容性
2.1 ROCm 支持的显卡列表
ROCm 并非支持所有 AMD 显卡,目前官方支持的型号主要是 RDNA3 / CDNA 架构:
| 显卡型号 | 架构 | ROCm 支持 | 显存 | 推荐模型 |
|---|---|---|---|---|
| RX 7900 XTX | RDNA3 | ✅ 官方 | 24GB | Qwen3-14B (量化) |
| RX 7900 XT | RDNA3 | ✅ 官方 | 20GB | Qwen3-8B |
| RX 7800 XT | RDNA3 | ⚠️ 非官方* | 16GB | Qwen3-8B (量化) |
| RX 6800 XT | RDNA2 | ⚠️ 非官方* | 16GB | Qwen3-8B (量化) |
| RX 6700 XT | RDNA2 | ⚠️ 非官方* | 12GB | Qwen3-4B |
| Instinct MI250X | CDNA2 | ✅ 官方 | 128GB | Qwen3-72B |
| Instinct MI300X | CDNA3 | ✅ 官方 | 192GB | Qwen3-235B |
* 非官方支持的显卡可以通过设置环境变量 HSA_OVERRIDE_GFX_VERSION 强制启用,后面会详细介绍。
2.2 查看显卡信息
# 查看 AMD GPU 设备
lspci | grep -i amd | grep -i vga
# 示例输出:
# 03:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Navi 31 [Radeon RX 7900 XT/XTX]
# 安装 rocm-smi 后查看详情
rocm-smi --showproductname
# 示例输出:
# GPU[0] : Card series: RX 7900 XTX
# GPU[0] : Device ID: 0x744c
# GPU[0] : Unique ID: 0x1a2b3c4d
三、安装 ROCm 环境
3.1 系统要求
- 操作系统:Ubuntu 22.04 LTS(推荐)或 RHEL 9
- 内核:Linux 5.15+(Ubuntu 22.04 自带)
- 空间:至少 20GB 可用磁盘
- 注意:不建议在 WSL2 中使用 ROCm,支持不完善
3.2 安装 ROCm 驱动
# 添加 AMD ROCm 仓库
wget https://repo.radeon.com/amdgpu-install/6.2/ubuntu/jammy/amdgpu-install_6.2.60200-1_all.deb
sudo apt install ./amdgpu-install_6.2.60200-1_all.deb
# 安装 ROCm 完整套件(包含驱动 + amdgpu + rocm)
sudo amdgpu-install --usecase=rocm --no-dkms
# 如果只需要驱动和基础组件
# sudo amdgpu-install --usecase=graphics,rocm
# 重启加载驱动
sudo reboot
3.3 验证 ROCm 安装
# 检查 GPU 状态
rocm-smi
# 预期输出:
# ========================================= ROCm System Management Interface =========================================
# ================================================= Concise Info ================================================
# Device [Model: Family: Chip] Temperature Power Avg clock SCLK MCLK Fan PWM Voltage
# =================================================================================================================
# 0 [0x744c: gfx1100: Navi 31] 42.0°C 28.0W 852MHz 852MHz 250MHz 0% 0% 800mV
# =================================================================================================================
# 检查 ROCm 运行时
rocminfo | grep "gfx"
# 预期输出:
# Name: gfx1100 # RDNA3 架构 (RX 7900XTX/XT)
# Name: gfx1030 # RDNA2 架构 (RX 6800XT)
# 检查 HIP 工具链
hipconfig --version
# 预期输出:6.2.60200
3.4 非官方支持显卡的强制启用
如果你的显卡不在 ROCm 官方支持列表中(如 RX 6800XT、RX 7800 XT),可以通过设置环境变量强制启用。不同架构对应的 GFX 版本号如下:
| 架构 | GFX 版本 | 代表显卡 |
|---|---|---|
| RDNA3 (Navi 31) | gfx1100 | RX 7900 XTX/XT |
| RDNA3 (Navi 32) | gfx1101 | RX 7700 XT/7800 XT |
| RDNA3 (Navi 33) | gfx1102 | RX 7600/7600 XT |
| RDNA2 (Navi 21) | gfx1030 | RX 6800/6800XT/6900XT |
| RDNA2 (Navi 22) | gfx1031 | RX 6700/6700XT/6750XT |
| RDNA2 (Navi 23) | gfx1032 | RX 6600/6600XT |
# 查询你的 GPU 的 GFX 版本
rocminfo | grep "gfx"
# 设置环境变量强制启用(以 RX 6800XT gfx1030 为例)
export HSA_OVERRIDE_GFX_VERSION=10.3.0
# 对于 gfx1101(RX 7800 XT)
# export HSA_OVERRIDE_GFX_VERSION=11.0.1
# 对于 gfx1102(RX 7600 XT)
# export HSA_OVERRIDE_GFX_VERSION=11.0.2
# 永久生效
echo 'export HSA_OVERRIDE_GFX_VERSION=10.3.0' >> ~/.bashrc
# 验证 PyTorch 能否识别
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
四、安装 PyTorch (ROCm 版)
4.1 创建 Conda 环境
conda create -n qwen-amd python=3.11 -y
conda activate qwen-amd
4.2 安装 PyTorch ROCm 版
PyTorch 官方提供了 ROCm 版本,直接通过 pip 安装:
# 安装 PyTorch 2.4 + ROCm 6.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.1
# 如果下载慢,可以使用国内 PyPI 镜像加速
pip install torch torchvision torchaudio \
--index-url https://download.pytorch.org/whl/rocm6.1 \
--extra-index-url https://mirrors.aliyun.com/pypi/simple/
4.3 验证 GPU 可用性
import torch
print(f"PyTorch version: {torch.__version__}")
print(f"HIP available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f"GPU count: {torch.cuda.device_count()}")
print(f"GPU name: {torch.cuda.get_device_name(0)}")
print(f"GPU memory: {torch.cuda.get_device_properties(0).total_mem / 1024**3:.1f} GB")
# 简单 GPU 运算测试
x = torch.randn(1000, 1000).cuda()
y = torch.randn(1000, 1000).cuda()
z = torch.mm(x, y)
print(f"GPU 矩阵运算测试通过,结果形状: {z.shape}")
预期输出:
PyTorch version: 2.4.0+rocm6.1
HIP available: True
GPU count: 1
GPU name: AMD Radeon RX 7900 XTX
GPU memory: 24.0 GB
GPU 矩阵运算测试通过,结果形状: torch.Size([1000, 1000])
五、下载并验证 Qwen 模型
5.1 下载模型
# 方式一:ModelScope(国内推荐)
pip install modelscope
modelscope download --model Qwen/Qwen3-8B --local_dir ./models/Qwen3-8B
# 方式二:HuggingFace 镜像
export HF_ENDPOINT=https://hf-mirror.com
pip install huggingface_hub
huggingface-cli download Qwen/Qwen3-8B --local-dir ./models/Qwen3-8B
5.2 使用 Transformers 验证
pip install transformers accelerate
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
# 如果是非官方支持的显卡,确保环境变量已设置
# import os
# os.environ["HSA_OVERRIDE_GFX_VERSION"] = "10.3.0"
model_path = "./models/Qwen3-8B"
print("正在加载模型到 AMD GPU...")
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
print(f"模型设备: {next(model.parameters()).device}")
# 对话测试
messages = [
{"role": "system", "content": "你是一个有用的AI助手。"},
{"role": "user", "content": "AMD GPU和NVIDIA GPU有什么区别?"}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print("正在生成...")
outputs = model.generate(**inputs, max_new_tokens=256, temperature=0.7)
response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(f"回复: {response}")
六、使用 vLLM (ROCm) 部署高性能推理
6.1 安装 vLLM ROCm 版
vLLM 官方已支持 ROCm 后端,安装方式与 CUDA 版略有不同:
# 方式一:pip 安装预编译版(推荐)
pip install vllm-rocm
# 方式二:从源码编译(需要 ROCm 开发工具链)
git clone https://github.com/vllm-project/vllm.git
cd vllm
# 使用 ROCm 编译脚本
pip install -e . \
--env VLLM_TARGET_DEVICE=rocm \
--env PYTORCH_ROCM_ARCH="gfx1100"
# 注意:PYTORCH_ROCM_ARCH 需要替换为你的 GPU 架构
# gfx1100 = RX 7900 XTX/XT
# gfx1030 = RX 6800 XT
# gfx1101 = RX 7800 XT
6.2 启动 vLLM 推理服务
# 非官方支持的显卡需要先设置环境变量
export HSA_OVERRIDE_GFX_VERSION=10.3.0 # 根据你的显卡修改
# 启动 vLLM 服务
vllm serve ./models/Qwen3-8B \
--served-model-name qwen3-8b \
--host 0.0.0.0 \
--port 8000 \
--trust-remote-code \
--dtype float16 \
--gpu-memory-utilization 0.90 \
--max-model-len 32768 \
--enforce-eager
注意:ROCm 版 vLLM 有以下限制:
--dtype推荐使用float16(bfloat16 在部分 AMD 显卡上支持不完善)- PagedAttention 在 ROCm 上的性能略低于 CUDA 版本
- AWQ 量化支持有限,建议使用 GPTQ 或 FP16
- 建议添加
--enforce-eager避免 CUDA Graph 兼容问题
6.3 测试 API
# 测试对话接口
curl -s http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-8b",
"messages": [
{"role": "user", "content": "你好,请介绍一下你自己"}
],
"max_tokens": 256
}' | python3 -m json.tool
# Python SDK 调用
python3 -c "
from openai import OpenAI
client = OpenAI(base_url='http://localhost:8000/v1', api_key='not-needed')
r = client.chat.completions.create(
model='qwen3-8b',
messages=[{'role': 'user', 'content': 'AMD GPU好用吗?'}],
max_tokens=256
)
print(r.choices[0].message.content)
"
七、使用 Ollama (ROCm) 部署
7.1 安装 Ollama ROCm 版
# 官方安装脚本会自动检测 AMD GPU
curl -fsSL https://ollama.com/install.sh | sh
# 安装后验证是否识别到 AMD GPU
ollama ps # 运行一个模型后查看 PROCESSOR 列
# 如果显示 100% GPU 说明 ROCm 生效
7.2 非官方显卡的 Ollama 配置
如果 Ollama 没有正确识别到 AMD GPU,需要修改 systemd 服务配置:
sudo mkdir -p /etc/systemd/system/ollama.service.d/
sudo tee /etc/systemd/system/ollama.service.d/override.conf > /dev/null << 'EOF'
[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_NUM_PARALLEL=2"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
7.3 拉取模型并验证 GPU 加速
# 拉取 Qwen3 模型
ollama pull qwen3:8b
# 运行并查看 GPU 使用情况
ollama run qwen3:8b "你好"
# 另一个终端查看 GPU 状态
rocm-smi
# 观察 VRAM 占用和 GPU 利用率变化
# 查看 Ollama 运行状态
ollama ps
# NAME ID SIZE PROCESSOR UNTIL
# qwen3:8b abc123def 5.2 GB 100% GPU 5 minutes from now
# 如果 PROCESSOR 显示 100% GPU 说明 AMD GPU 加速生效
八、使用 Docker (ROCm) 部署
8.1 安装 ROCm Docker 运行时
# 安装 Docker(如果还没有)
sudo apt install docker.io
sudo systemctl enable docker
# 配置 Docker 使用 ROCm 运行时
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"runtimes": {
"rocm": {
"path": "/opt/rocm/bin/rocm-runtime",
"runtimeArgs": []
}
},
"default-runtime": "rocm"
}
EOF
# 添加用户到 docker 组
sudo usermod -aG docker $USER
newgrp docker
sudo systemctl restart docker
8.2 使用 ROCm 镜像部署 vLLM
# 拉取 vLLM ROCm 官方镜像
docker pull rocm/vllm:latest
# 启动容器(挂载模型目录)
docker run -d \
--name vllm-rocm \
--device /dev/kfd \
--device /dev/dri \
--group-add video \
--group-add render \
-v /root/models/Qwen3-8B:/models/Qwen3-8B \
-p 8000:8000 \
-e HSA_OVERRIDE_GFX_VERSION=10.3.0 \
rocm/vllm:latest \
--model /models/Qwen3-8B \
--served-model-name qwen3-8b \
--host 0.0.0.0 \
--port 8000 \
--trust-remote-code \
--dtype float16 \
--enforce-eager
# 查看日志
docker logs -f vllm-rocm
8.3 使用 Ollama Docker (ROCm)
# 拉取 Ollama ROCm 版镜像
docker pull ollama/ollama:rocm
# 启动容器
docker run -d \
--name ollama-rocm \
--device /dev/kfd \
--device /dev/dri \
--group-add video \
--group-add render \
-v /data/ollama:/root/.ollama \
-p 11434:11434 \
-e HSA_OVERRIDE_GFX_VERSION=10.3.0 \
ollama/ollama:rocm
# 进入容器拉取模型
docker exec -it ollama-rocm ollama pull qwen3:8b
docker exec -it ollama-rocm ollama run qwen3:8b "你好"
九、性能对比与优化建议
9.1 AMD vs NVIDIA 实测对比
以下是 Qwen3-8B (FP16) 在同级别显卡上的推理性能参考:
| 显卡 | 显存 | 框架 | 推理速度 (tokens/s) | 显存占用 |
|---|---|---|---|---|
| RX 7900 XTX | 24GB | vLLM (ROCm) | ~55 | 17GB |
| RTX 4090 | 24GB | vLLM (CUDA) | ~75 | 17GB |
| RX 7900 XTX | 24GB | Ollama (ROCm) | ~45 | 6GB (Q4) |
| RTX 4090 | 24GB | Ollama (CUDA) | ~60 | 6GB (Q4) |
| RX 6800 XT | 16GB | Ollama (ROCm) | ~35 | 6GB (Q4) |
| RX 7900 XTX | 24GB | llama.cpp (HIP) | ~40 | 6GB (Q4) |
结论:AMD RX 7900 XTX 的推理速度约为 RTX 4090 的 70-75%,性价比依然很高(7900XTX 价格约为 4090 的 60%)。
9.2 性能优化建议
- 使用 float16 而非 bfloat16:AMD RDNA3 架构对 float16 优化更好
- 启用 --enforce-eager:ROCm 的 CUDA Graph 支持不完善,禁用反而更稳定
- 调整 gpu-memory-utilization:ROCm 显存管理不如 CUDA 精细,建议 0.85-0.90
- 减小 max-model-len:如果显存不足,降到 8192 或 16384
- 使用量化模型:GPTQ 量化在 ROCm 上支持较好
- 关闭不必要的后台进程:AMD 显卡的显存不像 NVIDIA 那样有独立的 GPU 内存管理
十、常见问题排查
Q1:torch.cuda.is_available() 返回 False
# 1. 检查 ROCm 是否正确安装
rocm-smi
rocminfo | grep gfx
# 2. 检查 PyTorch 版本是否为 ROCm 版
python -c "import torch; print(torch.__version__)"
# 应包含 rocm 字样,如 2.4.0+rocm6.1
# 3. 设置环境变量
export HSA_OVERRIDE_GFX_VERSION=10.3.0 # 根据你的显卡修改
# 4. 检查用户是否在 video 和 render 组
groups $USER
sudo usermod -aG video $USER
sudo usermod -aG render $USER
# 5. 检查设备权限
ls -la /dev/kfd /dev/dri/render*
Q2:vLLM 启动报错 "No available GPU"
# 确保 ROCm 运行时可用
export HSA_OVERRIDE_GFX_VERSION=10.3.0
export PYTORCH_ROCM_ARCH="gfx1100"
# 测试 PyTorch GPU
python -c "import torch; print(torch.cuda.device_count())"
# 如果返回 0,尝试重装 PyTorch
pip uninstall torch -y
pip install torch --index-url https://download.pytorch.org/whl/rocm6.1
Q3:Ollama 只用 CPU 不用 GPU
# 查看 Ollama 日志
journalctl -u ollama --no-pager | grep -i "gpu\|rocm\|amd"
# 设置环境变量
sudo systemctl edit ollama
# 添加:
# [Service]
# Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"
sudo systemctl restart ollama
# 再次运行模型查看
ollama run qwen3:8b "test"
ollama ps # 查看 PROCESSOR 列
Q4:Docker 容器内无法访问 GPU
# 确保容器启动时传入了设备参数
docker run --device /dev/kfd --device /dev/dri --group-add video ...
# 验证容器内可见 GPU
docker exec -it vllm-rocm rocminfo | grep gfx
# 如果使用 Podman
podman run --security-opt=label=disable --device /dev/kfd --device /dev/dri ...
Q5:显存不足(OOM)
- 使用量化模型(Q4_K_M GGUF 或 GPTQ)
- 减小
--max-model-len(如 8192) - 降低
--gpu-memory-utilization(如 0.80) - 添加
--enforce-eager禁用 CUDA Graph - 关闭桌面环境释放显存:
sudo systemctl stop gdm
十一、总结
本文详细介绍了在 AMD GPU 上部署千问模型的完整方案:
- ✅ 了解了 AMD GPU 推理的多种方案和兼容性
- ✅ 安装了 ROCm 驱动和 PyTorch ROCm 版
- ✅ 解决了非官方支持显卡的兼容问题(HSA_OVERRIDE_GFX_VERSION)
- ✅ 使用 vLLM (ROCm) 部署了高性能推理服务
- ✅ 使用 Ollama (ROCm) 实现了轻量快速部署
- ✅ 通过 Docker (ROCm) 实现了容器化部署
- ✅ 掌握了常见问题的排查方法
AMD GPU 部署大模型的生态正在快速完善。虽然目前兼容性和性能略逊于 NVIDIA CUDA 生态,但 RX 7900 XTX 的 24GB 大显存和较高性价比,使其成为预算有限场景下的有力选择。随着 ROCm 的持续更新,未来 AMD 在 AI 领域的表现值得期待。







