ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AMD MI50 32G Ubuntu跑大模型实战:BIOS设置、ROCm驱动与vllm部署

AMD MI50 32G Ubuntu跑大模型实战:BIOS设置、ROCm驱动与vllm部署 如果你最近在淘二手显卡跑本地大模型大概率会看到这么一张神奇的卡AMD Instinct MI50 32G。这卡当年是数据中心里的正经计算卡如今在二手市场却被以白菜价甩卖。很多人半信半疑地买回来发现它跑大模型居然还挺香但也有不少人卡在第一步——装系统、开BIOS、装驱动的连环坑里进退不得。这篇就是把我在MI50 32G Ubuntu上从零折腾到能跑vllm、能凑合微调qwen2.5-7b的路线记录一遍的踩坑过程也都写出来了。1. 为什么是MI50 32G这块老卡凭什么还能战大模型1.1 硬件底子与性价比真相MI50 32G大概是2024到2025年二手市场最魔幻的一张卡。它的底子是7nm Vega 20核心32GB HBM2显存显存带宽标称接近1TB/sPCIe 4.0 x16接口。和自家消费级、专业级显卡全家相比这个规格放在AI推理场景里最大卖点就是32GB大显存和高带宽。大模型推理最卡脖子的恰恰是显存容量和带宽而不是显卡上堆多少TFLOPS。说它是“白菜价计算卡”一点都不夸张。二手市场里它的价格通常远低于同显存的N卡不少玩家是拿它当过渡方案先让本地大模型跑起来再考虑升级。这片卡FP16算力大概13T左右和N卡里几张主流型号比确实弱不少但推理场景里瓶颈往往是显存算力只要够用就行。很多人实测下来跑7B、13B、甚至某些量化后的30B模型32G显存的MI50都能装得下体验远比小显存卡来得从容。1.2 适合谁、不适合谁我不建议小白把它当主力卡直接开冲。MI50在消费级平台上的兼容性并不完美需要用户愿意折腾BIOS、驱动、内核甚至忍受开源软件对Vega 20支持不稳定的问题。比较合适的用户是这几类有一定Linux动手能力、手头有老服务器或大板子、预算特别紧张但有耐心调参的玩家以及想用32G大显存做推理实验或微调入门的人。如果只想“插上就能用”我的建议是老老实实选N卡或者买新一点的AMD消费卡。MI50的快乐是建立在解决问题的过程之上的这篇避坑指南就是为了让这个过程尽量短一点。折腾它之前先把心态放平这是一张有脾气的卡但你理顺了规律它就能给你超出价格的价值。2. BIOS关键设置这一步不改后面全白搭2.1 Above 4G Decoding必须打开MI50的32GB显存用完会超过4GB地址空间操作系统要用64位PCIe BAR机制去访问全部显存前提就是主板BIOS里的Above 4G Decoding这个选项必须设为Enabled。不同主板叫法不太一样有些叫Above 4G MMIO BIOS assignment有些叫PCIe 64-bit BAR support反正看到包含“4G”“BAR”“64-bit”这类关键词的选项就要往这个方向想。很多机器尤其戴尔、联想这类品牌机的台式机或工作站这项默认是Disabled或Auto。如果不开系统虽然能识别到卡但显存地址会映射不完整常见表现是计算机只看到一小部分显存或者驱动反复报错、显存访问异常。我在某台消费主板上试过开着Above 4G时rocm-smi能看到32768MB关掉后只剩几百MB甚至直接找不到设备。这一步的优先级最高建议新装机时第一时间改。2.2 Resizable BAR和CSM怎么处理Resizable BAR也就是可调整大小的BAR在大多数BIOS里叫Re-Size BAR Support或Smart Access Memory。MI50本身对这种机制并不挑剔但建议和Above 4G一起开启这样PCIe地址映射更完整UEFI启动时初始化更顺利。你要是用服务器主板可能在PCIe子系统设置里找这组选项确认状态是Enabled再往下走。CSMCompatibility Support Module则是另一个关键点。如果主板BIOS里CSM是开启状态很多独显在POST阶段会走Legacy的VGA路径对大显存的AMD专业卡来说容易出现黑屏、无法显示、甚至系统起不来的情况。我建议直接关闭CSM保证系统以纯UEFI模式启动然后用板载核显或第二张卡来看桌面。如果是无头服务器不接显示器也行但为了调试方便建议至少留一个视频输出口。注意部分老主板BIOS里没有Above 4G Decoding选项多见于2015到2018年间的消费级平台。这时候要么去官方BIOS页面刷最新版要么用修改版BIOS要么干脆换个平台。不要寄希望于操作系统层硬改地址解码属于BIOS和CPU平台层面的机制操作系统没有权限去绕过。2.3 服务器主板的BMC/IPMI路径如果你和我一样用的是超微、戴尔这类服务器主板那么除了传统BIOS设置还要关注BMC里几个和PCIe相关的选项。比如超微的Advanced - PCIe/PCI/PnP Configuration里Above 4G Decoding选项在有的BIOS版本里叫MMIO High Base或类似名字需要把相关项都调到Enabled或者把高位地址窗口开到足够大比如512GB以上。在服务器场景下还要注意PCIe槽位。MI50属于双槽厚卡老服务器比如AMD EPYC 7002平台的机器如果插在某些PCIe交换芯片后面可能需要额外规划功耗和散热。BMC日志里如果出现PCIe link training失败先别急着怀疑卡坏了多半是槽位或BIOS配置问题换个槽位试试往往就能解决。热词里有人搜“amd epyc bios”“dell bios设置u盘启动”说明确实不少人在用服务器板子跑MI50。这类板子的BIOS功能项多但只要把Above 4G、ReBAR、CSM这三板斧搞定基础就稳了。接下来就要进入驱动安装这个核心环节。3. ROCm驱动安装实战从Ubuntu到能跑vllm的距离3.1 系统版本不要乱选MI50对应的是gfx906架构ROCm官方对它的支持经历过几个阶段最早原生支持后来标记为默认不支持再之后需要环境变量强行启用。实测下来最容易上手的组合是Ubuntu 22.04加上ROCm 5.7.x或5.6.x的amdgpu-install脚本。ROCm 6.0及以上对Vega系列的支持变得很别扭我不推荐新手一上来就装最新的6.x能用当然好但如果装完发现卡不亮、rocm-smi空白大概率还是要退回5.x。系统安装时注意两点一是用UEFI模式安装并关闭Secure Boot否则amdgpu内核模块的签名问题会让你在重启后白屏二是如果准备后续跑Docker和vllm建议在装完系统后先把基础工具链装齐比如build-essential、git、python3-venv、docker免得后面缺什么补什么浪费时间。提示ROCm安装之前最好先确认内核版本。Ubuntu 22.04的HWE最新内核有时候会和老版本的dkms模块冲突如果出现编译失败切回官方默认内核往往就好了我用的5.15内核基本没出过问题。3.2 amdgpu-install的具体安装流程大致步骤是去AMD ROCm官网下载对应Ubuntu版本的amdgpu-install包然后执行安装命令。以Ubuntu 22.04和ROCm 5.7.1为例常用的是下面这套流程# 系统更新 sudo apt update sudo apt upgrade -y # 下载amdgpu-install安装包 wget https://repo.radeon.com/amdgpu-install/5.7.1/jammy/amdgpu-install_5.7.50701-1_all.deb # 安装安装器本体 sudo apt install -y ./amdgpu-install_5.7.50701-1_all.deb # 安装ROCm运行时 sudo amdgpu-install --usecaserocm加--usecaserocm是为了只装ROCm运行环境不装给消费卡用的图形驱动栈。MI50本来也没有视频输出接口所以不需要额外的桌面驱动。如果想要更轻量还能加--no-dkms跳过内核模块编译但这时候你需要自己确认内核里是否已经带了amdgpu模块否则重启后设备还是不可用。安装完记得跑一下rocminfo如果能看到Agent列表里出现gfx906设备驱动层面就通了大半。再跑rocm-smi看显存大小正常时应该显示32768MB。如果显存大小不对回到第2章检查BIOS这一步千万不能跳过。3.3 gfx906被驱动“屏蔽”的终极解法重点来了在ROCm 6.x或者某些新版驱动下gfx906默认不在受支持列表里这时候即使驱动装好了PyTorch也找不到GPU。解决方法是伪造GPU版本号让运行时认为它是gfx908方法是设置环境变量export HSA_OVERRIDE_GFX_VERSION9.0.6把这个变量写进~/.bashrc或/etc/environment以后跑torch和vllm都能生效。9.0.6对应的是gfx906别写错。很多教程只说“设置这个变量”但没解释为什么。原因是ROCm的运行时在加载kernel和library时会根据target id去匹配预编译代码gfx906在某些版本里没有对应分支把它伪造成gfx908就能走兼容分支性能和功能基本可用。不过要提醒你这种方法属于踩在官方不支持列表的边缘强行运行个别算子可能编译失败或性能衰减。实测跑推理任务影响不大但跑训练和算子重一些的微调任务可能偶尔遇到类似Not implemented的错误。能忍就继续不能忍就换N卡。4. 踩坑实录我在这块卡上踩过的坑4.1 驱动装了但设备不识别常见现象是rocminfo只显示一个CPU Agent没有GPU Agent或者PyTorch里检查GPU可用性时返回False。排查顺序很重要先看内核模块加载了没有执行lsmod | grep amdgpu再看当前用户有没有权限访问/dev/kfd。默认情况下要把用户加入render和video组才能正常访问AMD计算设备sudo usermod -aG render,video $USER重登后再试。如果还是不行把HSA_OVERRIDE_GFX_VERSION9.0.6手动设置上再跑一次rocminfo。这个组合能解决我遇到过的八成“装了驱动但不识别”问题。如果以上都不奏效检查一下是不是内核模块根本没编译成功去/var/log/dkms日志里翻翻错误原因十有八九是内核头文件缺失。4.2 性能低得离谱MI50跑大模型推理时的预期是能跑、时延可接受、但打不过同价位新卡。但如果出现显存带宽完全跑不满、推理速度比CPU还慢的情况大概率不是这张卡本身的问题而是PCIe链路掉到了x1或PCIe 2.0。用lspci -vvv | grep -A5 VGA查一下LnkCap和LnkSta如果是x1或x4可能是槽位物理问题、金手指接触不良或者BIOS里的PCIe协商问题。重新插拔、换个槽位、在BIOS里强制指定PCIe速率都是常见解决办法。另外散热也是个隐藏坑。MI50的散热器有两种版本数据中心版偏吵改装版偏弱。高负载跑30B模型时HBM显存温度很容易冲到90度以上显存过热会降频性能反而更难看。有条件可以加风扇对着吹或者把功耗墙调低一点。温度、功耗、风扇转速全部能用rocm-smi监控这个命令对MI50的支持相当好rocm-smi --showtemp --showpower --showuse4.3 新旧ROCm混装的经典错误这个属于自己作死。我在一台机器上装过ROCm 5.7后来为了某个算子又手动叠加了ROCm 6.x的库结果连rocm-smi都崩了各种符号找不到。AMD的ROCm安装脚本虽然会给多个版本留目录但混装非常容易把运行时库路径弄乱。如果你要换ROCm版本最干净的做法是先彻底卸载把/opt/rocm*手动删掉再装新版本。经验MI50这种老计算卡稳定优先。装一个确定能用的版本不要为了追新功能反复折腾。生产环境尤其如此我现在这台机器就一直钉在ROCm 5.7.1上配合PyTorch的ROCm 5.7轮子跑各类推理任务都很稳。5. 大模型部署初体验ollama和vllm都能跑5.1 用ollama做最快验证装好ROCm之后最快验证整条链路的方式就是用ollama。官网安装脚本会帮你处理驱动探测运行时自动走ROCm后端。直接拉一个7B模型试试curl -fsSL https://ollama.com/install.sh | sh ollama run qwen2.5:7b如果能看到显存占用、生成速度稳定说明从BIOS到驱动的整条链路已经通了。ollama对ROCm的支持不一定是最优性能但作为“能不能用”的探针非常可靠。热词里很多人搜“ollama本地部署大模型哪个模型最佳”我的答案是先拿7B级别的Qwen2.5或Llama 3.1 8B跑通再按显存余量往上升级。32G显存跑7B模型一般也就占用8到12GB后面还有很大的空间跑更大模型。5.2 vllm部署显存规划是关键如果ollama验证通过下一步就可以上vllm。vllm在处理长上下文和高并发时有更好的页式显存管理机制推理吞吐明显更稳。以Qwen2.5-7B的AWQ或GPTQ量化版本为例模型权重大约4到6GBKV Cache再占几个GB32G显存跑起来很轻松甚至能再拉一个14B甚至32B量化模型。启动命令大致是python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --dtype float16 \ --gpu-memory-utilization 0.9 \ --max-model-len 8192--dtype float16保证用上MI50的FP16算力--gpu-memory-utilization建议从0.8起步试跑不稳再往下调。如果你的环境里没有vllm用pip install vllm直接装即可前提是PyTorch已经能用ROCm。这里容易踩的坑是PyTorch版本匹配问题建议直接安装torch2.0.1rocm5.4.2这类官方预编译的ROCm版本别自己从源码编译会省非常多事。初期遇到类似out of memory的报错先别慌看看是不是显存碎片或者KV Cache设太高。vllm的日志会对显存占用和KV Cache分配给出详细诊断照着调参数就好。5.3 微调方向补充热词里有人搜“qwen2.5-7b微调行业大模型”我对MI50跑微调的建议是能做小步子的LoRA和QLoRA实验但不要指望它当训练主力。32G显存跑7B的QLoRA也就是4bit权重是可行的。transformers peft bitsandbytes在ROCm下基本可用但训练时算子兼容性问题会比推理多。真要跑微调优先用比较保守的框架版本和PyTorch版本把HSA_OVERRIDE_GFX_VERSION设置好。跑大一点的数据集之前先切小样本把显存占用、梯度累积、Learning Rate这些参数调稳再说不然一次爆显存前面的训练轮数全白跑。6. 常见问题速查表可直接抄作业现象原因解决办法装好ROCm后rocm-smi看不到GPU内核模块未加载 / gfx906被屏蔽lsmod | grep amdgpuexport HSA_OVERRIDE_GFX_VERSION9.0.6显存显示几百MB或不对Above 4G Decoding未开启BIOS开启Above 4G Decoding / ReBAR开机黑屏、不显示CSM兼容模式或Secure Boot关闭CSM关闭Secure Boot纯UEFI启动系统重启后驱动白屏dkms模块未正确编译卸载重装amdgpu-install检查内核版本切回默认内核推理特别慢PCIe链路速率低 / 显存过热lspci -vvv查LnkSta检查金手指、槽位加强散热安装vllm失败PyTorch/ROCm版本不匹配使用官方支持组合避免混装ROCm版本这个表是我反复折腾的浓缩版。遇到问题先对表查解决不了的再贴日志去AMD ROCm GitHub的issue区或相关社区提问把rocminfo输出和内核版本一并贴出来别人帮你定位会快很多。最后再分享一个小技巧MI50在消费级桌面上跑大模型电源和主板供电规划别忽略。这张卡标称最大功耗大概300W虽然实际跑模型时不容易一直吃满但多路12V供电不够还是会导致重启或黑屏概率增加。你把系统其余配件的功耗预留出来比一味求“全默认”要稳得多。折腾到这一步这台老计算卡基本就发挥出它该有的价值了。
返回列表