从零部署千问模型(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 XTXRDNA3✅ 官方24GBQwen3-14B (量化)
RX 7900 XTRDNA3✅ 官方20GBQwen3-8B
RX 7800 XTRDNA3⚠️ 非官方*16GBQwen3-8B (量化)
RX 6800 XTRDNA2⚠️ 非官方*16GBQwen3-8B (量化)
RX 6700 XTRDNA2⚠️ 非官方*12GBQwen3-4B
Instinct MI250XCDNA2✅ 官方128GBQwen3-72B
Instinct MI300XCDNA3✅ 官方192GBQwen3-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)gfx1100RX 7900 XTX/XT
RDNA3 (Navi 32)gfx1101RX 7700 XT/7800 XT
RDNA3 (Navi 33)gfx1102RX 7600/7600 XT
RDNA2 (Navi 21)gfx1030RX 6800/6800XT/6900XT
RDNA2 (Navi 22)gfx1031RX 6700/6700XT/6750XT
RDNA2 (Navi 23)gfx1032RX 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 XTX24GBvLLM (ROCm)~5517GB
RTX 409024GBvLLM (CUDA)~7517GB
RX 7900 XTX24GBOllama (ROCm)~456GB (Q4)
RTX 409024GBOllama (CUDA)~606GB (Q4)
RX 6800 XT16GBOllama (ROCm)~356GB (Q4)
RX 7900 XTX24GBllama.cpp (HIP)~406GB (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 领域的表现值得期待。

参考资料

发表回复

后才能评论