AMD MI50 vLLM 多卡并行

AI (470) 2026-04-08 16:48:34

 

执行摘要

核心挑战: 您的 Radeon VII 显卡(gfx906 架构)已被 AMD 官方在新版的 ROCm 驱动中停止支持。这意味着官方的 vLLM 推理框架无法直接在您的硬件上正常工作。

解决方案: 我们将采用一个由社区维护的、专门为 gfx906 硬件优化的 vLLM 分支 (nlzy/vllm-gfx906)。此方案将通过预构建的 Docker 容器来部署,以最大程度地简化安装流程并规避复杂的依赖问题。通过张量并行技术,我们将把 Qwen3-32B-AWQ 模型分片到您的两张 Radeon VII 显卡上,实现高效推理。

系统版本: ubuntu 22.04.5,如使用其他操作系统请自行通过AI修改相关命令。


第一部分:系统底层环境配置

在安装任何 AI 软件栈之前,必须确保操作系统和 BIOS 已为多 GPU 计算环境正确配置。这些步骤虽常被忽视,但至关重要。

  1. BIOS/UEFI 设置

您需要进入服务器的 BIOS/UEFI 设置界面,进行以下两项关键修改。这些设置是让操作系统正确识别和管理多个无头(headless)计算卡的先决条件。

  • 启用 "Above 4G Decoding": 此设置允许 64 位操作系统正确映射多个 GPU 所需的巨大内存地址空间,是避免资源冲突和硬件识别失败的关键。请在 "PCIe Subsystem Settings" 或 "Advanced" 菜单中找到并启用它。
  • 禁用 "Compatibility Support Module (CSM)": 禁用 CSM 会强制系统进入纯 UEFI 启动模式。由于 Radeon VII 在此场景下作为纯计算卡使用,没有视频输出,传统的 BIOS 启动模式可能会干扰其在操作系统层面的正确初始化。
  1. 安装 Docker Engine

我们将使用 Docker 来部署服务,这可以极大地简化环境配置。

Bash

# 更新您的包列表
sudo apt update && sudo apt upgrade -y

# 安装 Docker
sudo apt install docker.io -y

# 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker

---
 

第二部分:ROCm 驱动与验证

尽管 gfx906 已被官方弃用,但我们依赖的社区方案 (vllm-gfx906) 要求使用 ROCm 6.3 版本进行构建和运行。其底层的内核驱动仍对您的硬件保持兼容性。

  1. 安装 ROCm 6.3

我们将使用 amdgpu-install 脚本来精确安装所需的版本。

Bash

# 下载针对 Ubuntu 22.04 (Jammy) 的 ROCm 6.3 安装脚本
wget https://repo.radeon.com/amdgpu-install/6.3/ubuntu/jammy/amdgpu-install_6.3.60300-1_all.deb

# 安装该脚本
sudo apt install ./amdgpu-install_6.3.60300-1_all.deb

# 使用该脚本安装 ROCm 核心计算库# --usecase=rocm,hiplibsdk 参数确保安装了所有必要的计算库
sudo amdgpu-install -y --usecase=rocm,hiplibsdk
 
  1. 配置用户权限并重启

这是允许应用程序访问 GPU 硬件的强制步骤。

Bash

# 将当前用户添加到 render 和 video 组
sudo usermod -a -G render,video $LOGNAME# 必须重启系统以使新安装的内核模块和用户组权限生效
sudo reboot
 
  1. 严格验证 ROCm 环境

重启后,打开一个新的终端,执行以下命令来验证 ROCm 是否已正确安装且识别出您的两张 Radeon VII 显卡。

  • 检查用户组权限:
  • Bash
groups
 
  • 预期输出应包含 render 和 video。
  • 检查内核模块:
  • Bash
dkms status
 
  • 预期输出应显示 amdgpu 模块已为当前内核成功安装 (installed)。
  • 检查 ROCm Agent 枚举:
  • Bash
rocminfo
 
  • 您应该能在此命令的输出中找到 两个独立的 "Agent" 块,每个块的 "Name" 字段都应显示为 gfx906。
  • 检查硬件状态:
  • Bash
rocm-smi
 
  • 预期输出应清晰地列出 两张 显卡,每张卡的 VRAM 显示为 16384MiB,并且状态正常。

[SUCCESS CHECKPOINT] 在继续下一步之前,请确保以上所有验证命令均返回了预期的结果。任何一步的失败都表明底层驱动存在问题,必须先行解决。


第三部分:使用 vLLM-GFX906 部署模型

我们将采用社区推荐的、最直接的部署路径:使用预构建的 Docker 镜像。这个镜像封装了所有必需的补丁和依赖,包括为 gfx906 定制的 vLLM 和 Triton。

  1. 拉取预构建的 Docker 镜像

该镜像是 nlzy/vllm-gfx906 分支的作者提供的,专门为 ROCm 6.3 环境构建。

Bash

# 拉取社区报告中验证过的特定标签的镜像
docker pull nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3
 
  1. 启动 vLLM 服务器

现在,我们将使用一条命令来启动 Docker 容器,并在其中运行 vLLM 服务器。该命令将配置张量并行,把 Qwen3-32B-AWQ 模型加载到您的两张 Radeon VII 上。

Bash

# 将 /path/to/your/models 替换为您在主机上存储模型的实际路径# 如果您希望 vLLM 自动从 Hugging Face 下载,可以省略 -v 挂载和 --model 参数中的路径部分

docker run -it --rm \
  --network=host \
  --ipc=host \
  --shm-size=16g \
  --device=/dev/kfd \
  --device=/dev/dri \
  --group-add video \
  --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  -v /path/to/your/models:/models \
  nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3 \
  vllm serve Qwen/Qwen3-32B-AWQ \
  --tensor-parallel-size 2 \
  --quantization awq \
  --max-model-len 5100 \
  --disable-log-requests \
  --dtype float16
 

命令参数详解:

  • docker run ...: 启动容器所需的一系列标准参数,用于正确地将 AMD GPU 设备暴露给容器。
  • nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3: 指定我们下载的、包含所有 gfx906 补丁的必需镜像。
  • vllm serve Qwen/Qwen3-32B-AWQ: vLLM 的启动命令,指向您要服务的模型。vLLM 会自动从 Hugging Face 下载。
  • --tensor-parallel-size 2: 核心参数。指示 vLLM 将模型的权重均匀地切分到您的 2 张 GPU 上。
  • --quantization awq: 明确告知 vLLM 加载的模型是 AWQ 量化格式。
  • --max-model-len 8192: 设置模型能处理的最大序列长度。
  • --disable-log-requests: 一项性能优化措施,在生产环境中建议开启。
  • --dtype float16: vllm-gfx906 分支推荐使用 float16 以在 gfx906 硬件上获得更好的性能。

第四部分:验证与客户端交互

服务器成功启动后,vLLM 会在日志中显示工作进程已在所有指定的 GPU (GPU 0, 1) 上初始化,并开始在 localhost:8000 上监听 API 请求。

  1. 使用curl进行快速测试

这是验证 API 端点是否正常响应的最简单方法。

Bash

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "Qwen/Qwen3-32B-AWQ",
    "prompt": "San Francisco is a",
    "max_tokens": 20,
    "temperature": 0
}'
 

如果一切正常,您将收到一个包含模型生成文本的 JSON 响应。

  1. 使用 Python 客户端进行交互

为了更方便地进行程序化访问,您可以使用 openai Python 库,因为它与 vLLM 提供的 API 完全兼容。

首先,安装 openai 库:

Bash

pip install openai
 

然后,使用以下 Python 脚本与您的本地模型进行交互: Python

from openai import OpenAI

# 配置客户端以指向本地 vLLM 服务器# 对于本地服务,API 密钥可以是任意字符串
client = OpenAI(
    api_key="not-needed",
    base_url="http://localhost:8000/v1"
)

# 准备聊天消息
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "请介绍一下什么是张量并行(Tensor Parallelism)?"}
]

print("向本地 Qwen3 模型发送请求...")

try:
    chat_completion = client.chat.completions.create(
        model="Qwen/Qwen3-32B-AWQ",
        messages=messages,
        max_tokens=512,
        temperature=0.7
    )
    # 解析并打印结果
    print("\n模型回复:")
    print(chat_completion.choices[0].message.content)
except Exception as e:
    print(f"\n发生错误: {e}")
 

第五部分:性能调优与故障排除

  • 显存管理:
    • --gpu-memory-utilization (默认为 0.90) 控制用于存储 KV 缓存的显存比例。如果服务器日志中频繁出现 preempted 警告,说明 KV 缓存空间不足,可以适当降低此值(如 0.85)。如果显存充裕,可以适当提高(如 0.95)以支持更多并发请求。
  • 批处理大小:
    • --max-num-batched-tokens (默认值较高) 和 --max-num-seqs (默认 256) 共同决定了批处理的大小。调整这些值可以在吞吐量和延迟之间进行权衡。
  • 关于量化 MoE 模型的说明:
    • 请注意,您当前使用的 Qwen3-32B-AWQ 不是 MoE(混合专家)模型。如果您将来尝试部署量化的 MoE 模型(如 Mixtral 的量化版),vllm-gfx906 分支预计将无法工作。这是该社区分支的一个已知局限性。届时您可能需要转向 llama.cpp 等其他框架。

第六部分:通过 Open WebUI 调用模型

Open WebUI 是一个功能强大且用户友好的 Web 界面,可以连接到各种 LLM 后端,包括我们刚刚部署的 vLLM 服务器。我们将使用 Docker 来运行它。

  1. 安装并运行 Open WebUI

打开一个新的终端窗口(保持 vLLM 服务器正在运行),执行以下命令来下载并启动 Open WebUI 容器:

Bash

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
 
  • -d: 在后台运行容器。
  • -p 3000:8080: 将主机的 3000 端口映射到容器的 8080 端口。您将通过 http://localhost:3000 访问 WebUI。
  • -v open-webui:/app/backend/data: 创建一个 Docker volume 来持久化存储 Open WebUI 的数据(用户、设置等)。
  • --name open-webui: 为容器命名。
  • --restart always: 确保在 Docker 重启或服务器重启后,Open WebUI 容器能自动启动。
  1. 首次登录并配置模型
  2. 访问 WebUI: 在您的浏览器中打开 http://<YOUR_SERVER_IP>:3000 (如果是本机,则为 http://localhost:3000)。
  3. 创建管理员账户: 首次访问时,系统会提示您创建一个管理员账户。请按提示完成注册。
  4. 进入设置: 登录后,点击左上角的头像,然后选择 “设置”。
  5. 连接模型:
    1. 在设置页面,点击左侧菜单的 “连接”。
    2. 在 “模型名称” 字段下,输入 Qwen/Qwen3-32B-AWQ。
    3. 点击 “保存”。系统会自动从 ollama.io 尝试拉取模型信息,但这步不重要,我们稍后会覆盖它。
    4. 现在,您会在下方的 “已连接的模型” 列表中看到刚刚添加的模型。点击模型右侧的 “编辑” (铅笔图标)。
  6. 配置 API 地址:
    1. 在弹出的编辑窗口中,找到 API 基础 URL 字段。
    2. 输入您的 vLLM 服务器的地址。因为 Open WebUI 和 vLLM 运行在同一台机器上,您可以使用 http://host.docker.internal:8000/v1。
  • 注意: host.docker.internal 是一个特殊的 DNS 名称,它能让 Docker 容器访问到宿主机的网络。这比直接使用 localhost 或 127.0.0.1 更可靠。
  1. API 密钥 字段可以留空,或者填入任意字符(例如 NA)。
  2. 模型 字段应保持为 Qwen/Qwen3-32B-AWQ。
  3. 点击 “保存”。
  4. 开始聊天
  5. 返回 Open WebUI 的主界面。
  6. 点击屏幕顶部的 “选择一个模型” 下拉菜单。
  7. 您应该能看到刚刚配置好的 Qwen/Qwen3-32B-AWQ。选择它。
  8. 现在,您可以在下方的输入框中输入提示词,开始与您的本地大模型进行对话了!

至此,您已经成功地为您的 vLLM 服务搭建了一个功能完善、易于使用的图形化界面。

 

(转自:司波徒) 双卡Radeon VII使用张量并行运行大语言模型: ubuntu下调用双卡Radeon VII 使用张量并行运行大语言模型(基于vllm)


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
执行摘要核心挑战: 您的 Radeon VII 显卡(gfx906 架构)已被 AMD 官方在新版的 ROCm 驱动中停止支持。这意味着官方的 vLLM 推理
安装结果参考MI50 驱动安装确保已经刷了VBIOS一般商家会刷,早期刷的雷7.现在一般刷的v420,直观区别就是v420 不用核显,能上机点亮。驱动下载用浏览
下载 安装选next安装目录默认即可如上图所示,勾上 创建桌面快捷方式,然后下一步 配置 设置中文找到左边的Settings 然后右边的language 下拉框
Ubuntu禁用独立显卡方法
挂载部分内存当硬盘用 # mount -t tmpfs -o size=50M tmpfs /opt/说明:50M是挂载的大小,/opt/挂载的是目录,这里op
GPUNvidiaOllama 支持计算能力为 5.0 及以上的 Nvidia GPU。检查你的计算兼容性,以确认你的显卡是否受支持: https://deve
PVE安装黑群晖6卡57%/58%59%解决导致原因1 虚拟机网卡mac1地址与引导内部grub设置不一样 解决:修改mac即可 导致原因2N100/N200这
需求PVE IP修改/迁移新网络网段配置-WEB操作版从 IP:192.168.50.147 网关:192.168.50.1 -&gtl; IP:192.168.153
确认Ollama兼容您的GPUNvidiaOllama 支持计算能力 5.0 及以上的 Nvidia GPU。要检查您的显卡是否受支持,请查看您的计算兼容性:h
java多线程编程_java多线程安全_java多线程实现安全锁CAS机制,CAS在java多线程中相当于数据库的乐观锁,synchronized相当于数据库的乐观锁。
概述Ollama官方最新版0.5.7,默认是不支持AMD 780m(代号:gfx1103)集成显卡的,已知方法都是基于一个开源项目ollama-for-amd来
安装HIP SDK打开AMD HIP官网,下载6.1.2版本 Windows10/Windows11版本AMD HIP SDK for Windows下载完成后
开启crontab日志默认情况大多数系统都是没有开启cron的日志的。编辑配置文件sudo vim /etc/rsyslog.d/50-default.conf
某些情况下我们需要使用多个微信,需要在PC上多开微信,下面具体介绍Windows 10 操作系统上如何多开微信1.获取微信的安装路径找到桌面安装的微信快捷方式,然后数表右键属