从权限配置开始:别急着装驱动

很多刚从 NVIDIA 生态转到 AMD Instinct GPU 的开发者,在 DevCloud 上拿到实例后的第一反应往往是“赶紧装 ROCm"。但根据我最近踩坑的经验,90% 的“驱动安装成功却识别不到显卡”问题,根源都不在驱动本身,而是最基础的用户组权限没配好。

在 Ubuntu 22.04 环境下,ROCm 驱动依赖特定的设备节点(如 /dev/kfd/dev/dri),默认情况下普通用户是没有访问权的。如果你跳过这一步直接跑 rocm-smi,大概率只会看到一片空白或者报错。正确的做法是在创建实例登录后,立即执行:

sudo usermod -aG video,render $USER

执行完这条命令后,必须重启系统sudo reboot)才能生效。很多教程轻描淡写地提一句“建议重启”,但实际上这是硬性要求。重启后,可以用 groups $USER 确认自己是否已加入这两个组。只有当权限就位,后续的驱动调用才不会因为"Permission denied"而静默失败。这一步看似简单,却是避开“环境配置地狱”的第一道防线。

驱动验证:用命令看清硬件真相

权限配好后,再安装 ROCm 7.x 驱动就稳妥多了。安装过程遵循官方源即可,但真正的考验在于验证环节。不要相信安装成功的提示语,要用命令亲自确认硬件状态。

首先运行 rocm-smi。如果一切正常,你应该能看到一个清晰的表格,列出所有 Instinct 加速卡的温度、功耗、显存使用率以及频率策略。如果命令无输出或报错,请立刻检查 /dev/kfd 设备节点是否存在,这通常意味着底层内核模块未加载成功。

紧接着,执行 rocminfo 获取详细的架构信息。你需要重点关注输出中的 Name 字段,例如 gfx90agfx942请务必记下这个代码,它在下一步编译 PyTorch 时是必填项。如果这里识别到的架构与你预期的型号不符,说明驱动层仍有问题,切勿强行继续。这一步能提前规避 80% 因架构不匹配导致的“非法指令”错误。

源码编译陷阱:一个环境变量引发的崩溃

虽然 PyTorch 提供了预编译的 ROCm 版本,但在生产环境或追求极致性能时,源码编译往往是必经之路。这里有一个极易踩坑的核心点:PYTORCH_ROCM_ARCH 环境变量。

在激活 Conda 虚拟环境后,编译前必须导出该变量:

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

我曾在一次部署中忽略了这一步,结果编译过程看似顺利,但在运行 import torch 时直接报出 Illegal instruction 错误,没有任何友好提示。这是因为编译出的二进制文件包含了错误的指令集,无法在当前硬件上运行。清理构建缓存(rm -rf build/)并重新指定架构编译是唯一解法。

此外,vLLM 对 Triton 编译器有强依赖,需确保其版本与当前 PyTorch ROCm 后端严格匹配。建议在安装 vLLM 前显式导出 HIP_PATH 并利用多核 CPU 加速构建:

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

加上 --no-build-isolation 参数可以减少环境隔离带来的依赖冲突,这在复杂的 ROCm 生态中尤为重要。

快速诊断:用脚本确认 BF16 支持

环境搭建完成后,不要急着启动大模型,先跑一个简单的健康检查脚本。AMD Instinct 系列(如 MI300)对 BF16(Brain Floating Point 16)的支持是大模型推理性能的关键,但并非所有配置都能自动启用。

我习惯在容器入口运行以下 health_check.py 脚本进行摸底:

import torch
import sys

def check_rocm_health():
    if not torch.cuda.is_available():
        print("❌ 错误:未检测到可用的 ROCm 设备")
        return False
    
    device_count = torch.cuda.device_count()
    print(f"✅ 检测到 {device_count} 个加速卡")
    
    for i in range(device_count):
        props = torch.cuda.get_device_properties(i)
        free_mem = torch.cuda.mem_get_info(i)[0] / 1024**3
        total_mem = props.total_memory / 1024**3
        print(f"--- 卡 {i}: {props.name} ---")
        print(f" 显存总量:{total_mem:.2f} GB")
        print(f" 可用显存:{free_mem:.2f} GB")
        
        # 检查 BF16 支持
        if props.major >= 9:
            print(" ✅ 支持 BF16 加速")
        else:
            print(" ⚠️ 需确认是否开启 FP16 兼容模式")
    return True

if __name__ == "__main__":
    if not check_rocm_health():
        sys.exit(1)
    print("🎉 环境健康检查通过,准备启动服务")

如果脚本顺利输出"🎉 环境健康检查通过”,并且确认了 BF16 支持,那么恭喜你,最艰难的适配期已经结束。

启动第一个推理服务

最后一步,启动 vLLM 服务。针对 ROCm 7.x 和 Instinct GPU,建议将显存利用率控制在 0.90 左右,预留部分显存给系统开销,防止 OOM。同时指定 bfloat16 数据类型以发挥硬件优势:

python -m vllm.entrypoints.api_server \
  --model meta-llama/Meta-Llama-3-8B-Instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --dtype bfloat16 \
  --gpu-memory-utilization 0.90 \
  --block-size 16

当终端显示"Uvicorn running on…"时,服务已就绪。你可以用一条简单的 curl 命令测试接口:

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

如果返回了流畅的 JSON 响应,说明你已经在 DevCloud 上成功跑通了全流程。从用户组权限到架构变量,再到 BF16 验证,每一个环节的严谨对待,都是为了让这套开源栈在生产环境中稳如磐石。

200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper
在这里插入图片描述

Logo

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

更多推荐