写这篇东西的起因很简单:我手头主力机装的是AMD显卡,平时既要跑目标检测模型,也要跑本地大语言模型和ComfyUI出图。但网上一搜,全是NVIDIA + CUDA的教程,AMD用户照着抄作业,第一步装驱动就卡住了。折腾了几个月,踩了不少坑,我把AMD显卡部署模型、跑推理的完整路径整理出来,希望能帮到同路人。
这篇文章不假设你有N卡,也不假设你熟悉CUDA,只要求你有一块AMD显卡、一台能装系统的电脑。内容覆盖环境选型、驱动配置、三个实操案例(YOLO目标检测、Ollama跑大模型、ComfyUI图像生成)和一份报错排查表,适合从零开始的纯新手,也适合被“ROCm装不上、推理慢、显存不够”折磨的进阶用户。
1. 先搞清楚:AMD显卡跑AI到底有哪几条路
很多人一上来就搜“AMD 部署模型 教程”,搜出来的全是NVIDIA专用内容,然后怀疑是不是AMD压根没法跑。其实AMD能跑,而且不止一条路,关键在于选对路线。主流方案有四条,每条的适用场景差很多。
1.1 ROCm路线:AMD的“官方正统”,但Windows下别指望它
ROCm(Radeon Open Compute)是AMD对标CUDA的GPU计算平台,在Linux下配合PyTorch官方ROCm版,效果很不错。如果你用的是Radeon RX 6000/7000系列或Instinct计算卡,装好ROCm后,PyTorch直接就能识别显卡,跑YOLO、Stable Diffusion、大模型微调都行。
但这里有个现实问题:ROCm官方主要支持Linux和部分数据中心卡。Windows下的ROCm支持一直半残不残,虽然AMD发布了HIP SDK,但PyTorch在Windows下没有官方ROCm轮子,你只能通过WSL2或者手动编译,折腾成本极高,新人不建议碰。所以我的建议是:如果你主力系统是Linux,优先走ROCm;如果主力是Windows,直接放弃ROCm,看下面两条路。
1.2 DirectML路线:Windows用户的现实选择
DirectML是微软做的DirectX 12机器学习加速库,好处是所有支持DX12的显卡都能用,AMD自然没问题。你用PyTorch-DirectML或者ONNX Runtime DirectML版本,就能在Windows下调用AMD显卡做推理。
- PyTorch-DirectML:
pip install torch-directml,然后代码里用dml设备名替代cuda。它能跑大多数Vision模型,但训练支持有坑,大模型也不建议用这个跑。 - ONNX Runtime DirectML:把模型导出成ONNX格式,用
onnxruntime-directml包推理,性能和稳定性都不错,适合YOLO这类视觉模型部署。
DirectML的缺点是性能上限比ROCm低一点,显存管理也比较保守,但在“Windows + AMD”这个组合下,它是最省心、最不缺文档的路。
1.3 llama.cpp的Vulkan后端:大语言模型的救星
如果你跑的是Qwen、Llama这类大语言模型,别直接用PyTorch,太重了。用llama.cpp,它自带Vulkan后端,通过Vulkan调用AMD显卡的算力,Windows/Linux都能用,而且对显存要求宽限得多——显存不够时会把部分层放在内存里跑,虽然慢一点,但至少能跑。
Ollama也封装了llama.cpp,所以Ollama在AMD显卡上也能用,只是它默认走CPU,你需要在启动前设置环境变量让它识别显卡设备。这个下文会拆开讲。
1.4 CPU兜底:听起来丢人,关键时刻救命
如果你的AMD显卡太老(比如HD 7000系列之前的GCN 1.0),驱动早就停更了,任何GPU路线都白搭。这时候老实装个CPU版的PyTorch或ONNX Runtime,用CPU跑推理。速度确实慢,但对小模型来说完全可用,而且不会报一堆莫名其妙的错。
以上四条路,你可以对照自己的显卡情况选一条主攻。我的建议是:Linux用户选ROCm,Windows视觉模型选DirectML,Windows大语言模型选Vulkan/llama.cpp,老卡用户老老实实CPU兜底。
2. 环境准备:驱动检查、型号确认、显存这三大件必须搞定
很多AMD部署模型的教程默认“你已经装好了正确驱动”,实际上一大半报错都出在驱动和系统识别这里。这一章把环境准备的基本功补上。
2.1 检查显卡型号和驱动版本:别刷成“AMD兼容设备”
老规矩,先按Win + X打开设备管理器,展开“显示适配器”,看看你显卡的准确型号。如果显示的是“Microsoft 基本显示适配器”,说明驱动没装上或装错了。如果显示“AMD Radeon (TM) RX 6750 XT”这种,说明驱动正常。
驱动版本怎么确认?在系统里搜索“AMD Software: Adrenalin Edition”,打开后点“设置”可以看到当前版本。驱动还能不能在官网找到不重要,关键是适配你的显卡代数。如果你的是老卡(比如R9 380、RX 570),Adrenalin驱动依然有适配版本,但注意不要硬装新版,老卡装新驱动反而可能蓝屏。
提示:AMD驱动有个容易踩的坑——机器存在核显+独显“混合显卡”时,设备管理器会显示两个显卡。这时候安装AMD驱动,一定要确认你是给独显装的。如果装到核显上,独显跑AI时会一直报“device not found”。
2.2 显存:决定你能跑多大模型的物理天花板
显存(VRAM)是AMD显卡跑AI最重要的硬件指标,没有之一。模型权重都要往显存里放,显存不够只能往内存和硬盘里换入换出,速度断崖式下降。查显存很简单:任务管理器 → 性能 → GPU,能看到“专用GPU内存”,这就是显存。
不同显存适合跑的模型范围如下,我按自己的实测经验整理:
| 显存大小 | 适合跑的模型 |
|---|---|
| 4GB以下 | YOLOv5s/v8s目标检测、OCR小模型、轻量BERT类任务 |
| 6GB-8GB | YOLOv8m/x、Stable Diffusion 1.5低分辨率出图、Qwen2.5-3B/4B量化版 |
| 12GB-16GB | SDXL出图、Qwen2.5-7B量化版、Llama-3-8B量化版 |
| 24GB及以上 | 更大参数模型、长上下文推理、多显卡并行 |
注意显存不足时,系统会自动调用共享GPU内存(占用系统内存),速度会暴跌但至少能跑。如果你看到任务管理器里“共享GPU内存”一直在涨,说明模型已经跨到内存里了,该考虑换小模型或者加量化。
2.3 Linux下安装ROCm环境:这次说透版本匹配
如果你决定走ROCm路线,操作系统建议Ubuntu 22.04,这是ROCm支持最成熟的发行版。安装ROCm前,先确认你的显卡在支持列表里。RX 5000系列部分旧卡需要额外设置HSA_OVERRIDE_GFX_VERSION,否则PyTorch检测不到。
ROCm装好后验证方式很简单:
rocm-smi能看到显卡温度、频率、显存使用率,就说明ROCm装成功了。然后再装PyTorch的ROCm版:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.0注意这里有个巨大的坑:PyTorch ROCm版只匹配特定ROCm版本。你系统里装的是ROCm 5.7,却装了对应ROCm 6.0的PyTorch,它大概率能跑但会静默降级,或者直接报“undefined symbol”错误。我吃过这种亏,建议先确定PyTorch轮子对应的ROCm版本,再去装系统级ROCm。
验证是否识别到GPU:
import torch print(torch.cuda.is_available()) # ROCm下也返回True print(torch.cuda.get_device_name(0))2.4 Windows下装DirectML环境和Ollama:一劳永逸的组件清单
Windows用户别碰ROCm,直接用以下组件:
- 显卡驱动:装最新版Adrenalin驱动,去AMD官网按型号下载,别用Windows Update自动装的。
- Python:建议3.10或3.11,直接官网装,记得勾选“Add Python to PATH”。
- PyTorch-DirectML:
pip install torch-directml- ONNX Runtime DirectML:
pip install onnxruntime-directml- Ollama:官网下载Windows安装包,装完默认走CPU。要让Ollama识别AMD显卡,需要在系统环境变量里增加
OLLAMA_DEVICE=0或OLLAMA_VK_DEVICE=0,具体看你的Ollama版本用的是哪个后端。最稳的验证方法是命令行输入ollama run qwen2.5:3b,然后看任务管理器里GPU是否真的被占用。
3. 实操案例:YOLO目标检测、Ollama大模型、ComfyUI出图
光讲环境不落地等于白说。这一章我挑三个最常见的场景,给出可以直接跑的完整步骤和代码。这三个场景基本覆盖了AMD用户90%的部署需求。
3.1 案例一:Windows下用AMD显卡跑YOLOv8目标检测
YOLO是目前视觉部署里最刚需的模型之一。在AMD显卡上,我推荐用ONNX Runtime DirectML这条链路,步骤清晰,性能也稳定。
第一步,导出ONNX模型。先下载ultralytics的YOLOv8权重,然后导出:
from ultralytics import YOLO model = YOLO("yolov8n.pt") model.export(format="onnx", opset=12, dynamic=True)导出OPSE版本不要低于12,不然DirectML对某些算子的兼容会出问题。导出后同目录下会出现yolov8n.onnx。
第二步,安装并验证ONNX Runtime DirectML:
pip install onnxruntime-directml python -c "import onnxruntime as ort; print(ort.get_available_providers())"输出里包含DmlExecutionProvider就说明DirectML可用。
第三步,写推理脚本。下面这个脚本可以直接跑,识别摄像头或图片里的物体:
import cv2 import numpy as np import onnxruntime as ort sess = ort.InferenceSession( "yolov8n.onnx", providers=["DmlExecutionProvider", "CPUExecutionProvider"] ) def preprocess(img): # 等比例缩放后填充到640x640,保持模型输入要求 h, w = img.shape[:2] scale = min(640 / w, 640 / h) new_w, new_h = int(w * scale), int(h * scale) resized = cv2.resize(img, (new_w, new_h)) canvas = np.full((640, 640, 3), 114, dtype=np.uint8) canvas[:new_h, :new_w] = resized blob = canvas[:, :, ::-1].transpose(2, 0, 1).astype(np.float32) / 255.0 return blob[None], scale, new_w, new_h img = cv2.imread("test.jpg") blob, scale, new_w, new_h = preprocess(img) outputs = sess.run(None, {sess.get_inputs()[0].name: blob}) # outputs形状为 [1, 84, 8400],按YOLOv8标准后处理 predictions = outputs[0][0] print("检测到目标的维度:", predictions.shape)这里有个容易卡住的点:YOLOv8的输出是[1, 84, 8400],8400是不同尺度特征图上的候选框数量,84是4个框坐标 + 80个类别分数。你拿到输出后要做阈值过滤和NMS,这部分代码比较长,我用“直接看输出维度没报错”作为Step 1通过标志,后续再补后处理即可。如果官方仓库里ultralytics自带的推理在你的机器上报错,排查顺序永远是:先确认onnxruntime能列出DmlExecutionProvider,再确认模型是opset>=12,最后才去调代码逻辑。
3.2 案例二:Ollama本地部署Qwen等大语言模型
大语言模型在AMD显卡上跑,我强烈建议用Ollama。Ollama底层是llama.cpp,天然支持Vulkan后端,也就是能调用AMD显卡。
安装Ollama后,先确认它能找到显卡设备。默认情况下Ollama可能只跑CPU,需要通过环境变量指定设备。
- 右键“此电脑” → 属性 → 高级系统设置 → 环境变量,在系统变量里新增:
- 变量名:
OLLAMA_VK_DEVICE,变量值:0(0表示第一块支持Vulkan的显卡,如果你的电脑有核显+独显,可能需要试0或1)
- 变量名:
- 也可以同时设置
OLLAMA_FLASH_ATTENTION=1,让大模型推理时显存占用更低、速度更快。
设置完后重启Ollama(托盘图标右键退出,再重新启动),然后拉取模型:
ollama run qwen2.5:7b第一次运行会下载模型权重,之后就可以直接对话。怎么确认它真的用了GPU?打开任务管理器 → 性能 → GPU,如果GPU利用率有明显波动,说明确实在显卡上跑。更准确的判断方法:对话时输入一个长文本,看任务管理器里“专用GPU内存”占用是否上涨,如果只涨“共享GPU内存”或者完全不涨,说明还在用CPU跑,这时候去检查环境变量是否生效。
如果Ollama版本不支持OLLAMA_VK_DEVICE,那就用llama.cpp手动编译Vulkan版,链接本地Qwen模型文件运行,网上教程不少,原理一样:让Vulkan接管矩阵计算。
3.3 案例三:ComfyUI用AMD显卡出图
ComfyUI是当前最流行的Stable Diffusion图形化工作流工具。AMD用户装ComfyUI,很多时候搜到的是A卡的“秋叶整合包”,虽然方便,但版本和驱动可能不匹配。我建议按官方源装,自定义程度更高,排查报错也更直接。
ComfyUI在Windows下调用AMD显卡有两个途径:DirectML和ROCm(通过WSL2)。我推荐DirectML路线,因为WSL2的显存管理和文件互通太麻烦。
安装步骤:
- 安装Git和Python 3.10。
- 克隆官方仓库:
git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI- 安装依赖:
pip install -r requirements.txt pip install torch-directml- 启动时指定设备:
python main.py --directml如果你直接python main.py跑,ComfyUI默认会去找CUDA,发现没有就会报错。指定--directml后,它会用DirectML调用AMD显卡。为了验证,启动后浏览器打开127.0.0.1:8188,随便跑一个文生图工作流,任务管理器里GPU利用率开始跳动,基本就成功了。
ComfyUI的常见爆显存问题,在AMD上也很典型。如果你8GB显存跑SDXL直接OOM,可以这样降级:把采样器步数从30降到20,分辨率从1024x1024降到768x768,或者换用SD 1.5模型。显存不够时别硬撑,出图质量靠模型,不靠分辨率。
4. 常见报错与排查:把我踩过的坑一次说清
AMD部署模型最大的痛点不是能力不行,而是报错信息太“裸”,或者干脆不报错只是静默失败。这里整理一份高频问题排查表,都是我自己或身边朋友实测遇到的。
| 报错/现象 | 原因 | 解决方案 |
|---|---|---|
torch.cuda.is_available()返回False | 你装的是CUDA版PyTorch,AMD无法识别 | 换成torch-directml,代码里用dml设备名;或在Linux下装ROCm版PyTorch |
onnxruntime报No DmlExecutionProvider相关错 | onnxruntime装成了CPU版 | pip uninstall onnxruntime,再pip install onnxruntime-directml |
| Ollama一直不调用GPU,只在CPU上跑 | 环境变量未设置或设置错误 | 设置OLLAMA_VK_DEVICE=0(或1),重启Ollama,确认任务管理器GPU占用 |
| ComfyUI启动后找不到CUDA,自动退出 | 没指定DirectML参数 | 启动命令必须带--directml |
| 显存占用满,出图/推理速度突然暴跌 | 模型跨过显存落到共享内存 | 换更小模型、降低分辨率、减少batch size、开启量化 |
| 驱动新版装上后花屏/性能下降 | 核显+独显混合显卡时驱动冲突 | 彻底卸载后,单独下载对应独显型号的Adrenalin驱动,禁用核显驱动更新 |
| 老显卡(GCN 1.0以前)装驱动失败 | 官方驱动已停止支持 | 只能走CPU推理,或考虑换卡 |
除了这些,我还想单独说几个容易忽略的坑。
第一个是混合显卡问题。AMD核显+AMD独显、或者AMD核显+Intel独显的组合,在跑AI时经常出现“明明有独显,但程序还是用核显跑”的现象。排查方法是任务管理器里看GPU0和GPU1的利用率,确认是哪个设备在跑。如果程序跑在核显上,你需要手动指定设备编号,比如DirectML里把设备索引设为1。
第二个是驱动安装顺序。很多人先装驱动,再装PyTorch,最后装ONNX Runtime。如果换了显卡或换了驱动版本,建议按“卸载旧驱动 → 安装新驱动 → 卸载Python里所有AI相关包 → 重装对应包”的顺序重来一遍。不要嫌麻烦,AMD的软件栈耦合度高,顺序错了容易出鬼问题。
第三个是排查时先看“设备是否被识别”,再看“算子是否被支持”。很多AMD下跑模型报错,实质是某个算子DirectML或ROCm不支持。这时候最快的方法是翻模型算子表,如果某个模块有自定义CUDA算子,AMD下基本必挂。比如某些注意力模块用了flash-attn,AMD下就要替换成普通的attention实现。
5. 性能调优:让AMD显卡跑得更快的小技巧
我能给出的性价比最高的调优手段,按优先级排序如下。
5.1 活用量化:显存减半,速度翻倍
无论是大语言模型还是视觉模型,量化永远是AMD用户的第一优化手段。AMD显卡的推理性能在FP16和INT8下差距很大。如果你用Ollama,直接选带-q4_K_M或-q5_K_M后缀的量化版本,比如:
ollama run qwen2.5:7b-q4_K_M显存占用只有FP16版的一半左右,速度反而快,精度损失在可接受范围内。用PyTorch推理时,也可以尝试把模型加载为半精度:
model.half()但要注意,DirectML下不是所有算子都支持FP16,遇到不支持就退回FP32。
5.2 调对batch size和线程数
AMD显卡的DirectML后端对batch size很敏感。视觉模型推理时,batch size从1调到4,吞吐量通常会明显提升,但显存占用也翻倍。我建议在显存允许的情况下,尽量把batch调大,因为DirectML对单个小batch的调用开销很高,大batch能摊薄这份开销。
CPU线程数也要调,特别是混合显卡机器。ONNX Runtime里可以设置线程数:
sess = ort.InferenceSession("model.onnx", providers=["DmlExecutionProvider"], sess_options=ort.SessionOptions()) sess.set_intra_op_num_threads(4)实测下来,线程数超过物理核心数反而会变慢,别盲开。
5.3 关闭“图形增强”等花哨功能
AMD Adrenalin驱动里有很多图像增强功能,比如Radeon Boost、Anti-Lag、锐化等。这些功能不是为AI推理设计的,在运行推理时反而可能抢占GPU资源或改变显存分配策略。我的建议是跑AI任务前,在Adrenalin里创建一个单独的“性能模式”配置文件,关闭这些增强项,并把功耗限制调到最高。
5.4 监控工具:学会看这4个数字
排查性能问题,我习惯开着这几个监控:
- 任务管理器GPU利用率:判断程序是否真的在用GPU。
- 任务管理器专用GPU内存:判断是否爆显存。
rocm-smi(Linux下):看ROCm状态、温度、功耗。- AMD Adrenalin自带的性能监控浮层:Windows下全局监控。
有一次我以为模型推理慢是显卡不行,结果开着监控一看,GPU利用率只有20%,瓶颈全在CPU的数据预处理上。这种问题,不看监控根本定位不了。
6. 写在最后:新手最容易忽视的3个习惯
折腾AMD显卡部署模型这一年多,我有个非常强烈的体会:AMD的坑大多是“版本不匹配”造成的,不是“能力不行”。下面这3个习惯,建议你从第一天就养成。
第一,固定版本组合。驱动、ROCm/DirectML、PyTorch、ONNX Runtime,这些组件之间是有兼容性要求的。不要今天升级驱动,明天升级PyTorch,一出问题全链路都跟着动。我都是先在官方文档里确认某套版本组合没问题,然后锁死版本,至少稳定用一两个月。
第二,学会先看报错再搜解决方案。很多人遇到报错直接复制整段报错去搜索,其实应该先看报错最末尾的几行,定位是驱动问题、算子问题还是显存问题。AMD相关的报错很多是“假报错”,后面跟一串忽略不计的警告,真问题往往藏在最后那两行。
第三,多搜英文资料,少搜中文二手教程。AMD的AI生态更新太快,中文教程很容易过时。比如OLLAMA_VK_DEVICE这个问题,中文社区讨论很少,英文GitHub issue里早就翻烂了。搜索时用“AMD + 报错关键词 + github”的组合,命中率最高。
最后说个实际经验:如果你的AMD显卡能跑3B-8B的量化大模型、能跑YOLO系列目标检测、能跑SD 1.5出图,你已经超过90%的显卡使用场景了。别纠结跑不了70B模型,那不是显卡问题,是你对硬件上限的认知问题。AMD的生态这几年进步很快,给点耐心,按本文的路线和排查思路逐步来,你的显卡能跑的东西,远比你现在以为的多。