环境地基:系统准备与工具链隔离

在云端动手部署之前,先把操作系统层面的“地基”打牢,能避免后续 80% 的诡异报错。我们默认使用 Ubuntu 22.04 LTS,这是目前对 ROCm 7.x 支持最成熟的发行版。

拿到 DevCloud 实例后的第一件事,不是急着装驱动,而是配置用户权限。ROCm 驱动依赖特定的设备节点(如 /dev/kfd),普通用户默认无权访问。必须执行以下命令将当前用户加入 videorender 组:

sudo usermod -aG video,render $USER

注意:执行完后务必重启系统(sudo reboot),否则新的组权限不会生效。很多开发者卡在“驱动装好了但识别不到显卡”,根源往往就在这里。

重启登录后,接下来是工具链的版本控制。ROCm 生态对编译器版本非常敏感,GCC 11 或 Clang 15 是最稳妥的选择。如果系统默认版本过高,建议使用 update-alternatives 进行切换。同时,强烈建议使用 Conda 创建独立的虚拟环境,避免系统自带的 Python 包污染导致后续依赖冲突:

conda create -n vllm-rocm python=3.10 -y
conda activate vllm-rocm

一个干净、权限正确的环境,比事后花三天排查段错误要划算得多。

驱动安装与开发环境验证

环境底座打好后,正式安装 ROCm 7.x。最可靠的方式是直接添加 AMD 官方软件源,避免使用第三方打包版本以防内核模块不匹配。安装过程遵循官方文档执行 apt install rocm 系列命令即可。

安装完成不代表结束,验证环节才是确保后续编译不报错的关键。切勿跳过这一步直接安装 PyTorch。

首先,运行 rocm-smi 命令。如果终端能清晰列出 GPU 的温度、功耗、显存使用率及频率策略,说明内核态驱动工作正常。若该命令无输出或报错,请立即检查设备节点是否存在。

其次,确认开发工具链就绪。运行 rocminfo 获取详细的硬件架构信息,重点关注输出中的 Name: gfx90agfx942 等架构代码,记下这个代码,它在下一步编译 PyTorch 时是必填项。最后,尝试用 hipcc 编译一个简单的 Hello World 程序,如果能成功输出且无链接错误,才代表你的开发环境真正就绪。这一步能提前暴露绝大多数硬件识别和链接库路径问题。

源码编译:PyTorch 与 vLLM 的关键配置

虽然 PyTorch 提供了预编译的 ROCm 版本,但在生产环境或追求极致性能时,源码编译往往是必经之路,尤其是为了适配最新的算子优化。这里有两个极易踩坑的核心点:环境变量设置依赖版本匹配

在激活 Conda 环境并安装 ninjawheelhipblaslt 等构建依赖后,编译 PyTorch 前必须导出架构变量:

export PYTORCH_ROCM_ARCH="gfx90a"  # 替换为你刚才 rocminfo 查到的实际代码

如果忽略此步骤,编译出的二进制文件可能包含当前硬件不支持的指令集,运行时直接报 illegal instruction 错误,且极难排查。建议使用 MAX_JOBS 利用多核 CPU 加速构建:

export MAX_JOBS=$(nproc)
pip install .

PyTorch 安装完毕后,快速验证后端识别状态:

python -c "import torch; print(torch.cuda.is_available())"

若返回 True,说明后端识别成功。

随后进行 vLLM 的编译。vLLM 对 Triton 编译器有强依赖,需确保版本匹配。在执行 pip install vllm 之前,需显式导出 HIP_PATH 指向 ROCm 安装目录(通常为 /opt/rocm):

export HIP_PATH=/opt/rocm
pip install vllm --no-build-isolation

加上 --no-build-isolation 参数可以减少环境隔离带来的依赖冲突。编译过程中密切关注日志,确保 HIP 后端被正确启用。

服务启动与接口调用实战

一切准备就绪,终于可以启动第一个推理实例了。我们选择参数量适中的 Llama 3 8B 模型进行测试。使用 vllm serve 命令,结合之前确认的显存策略拉起服务:

python -m vllm.entrypoints.api_server \
    --model meta-llama/Meta-Llama-3-8B-Instruct \
    --gpu-memory-utilization 0.9 \
    --port 8000 \
    --host 0.0.0.0

这里 --gpu-memory-utilization 设置为 0.9 是一个经验值,预留 10% 显存给系统开销,防止因瞬时峰值导致 OOM。启动过程中,密切观察日志,直到看到 "Uvicorn running on…" 字样,表明服务已成功监听端口。

最后一步是验证接口可用性。vLLM 原生兼容 OpenAI API 格式,无需编写复杂客户端,直接用 Python 脚本即可测试:

import requests
import json

url = "http://localhost:8000/v1/completions"
headers = {"Content-Type": "application/json"}
payload = {
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "prompt": "AMD Instinct GPU 的优势在于",
    "max_tokens": 50
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
print(response.json()['choices'][0]['text'])

如果返回的 JSON 中包含流畅生成的文本,且没有报错信息,恭喜你,已经在 AMD Instinct GPU 上成功跑通了 vLLM 推理全流程。从此刻起,你就可以基于这套稳定的栈,进一步探索多卡并行、量化优化等高级特性了。

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐