
1. 为什么选A卡一场被预算逼出来的方案1.1 算力预算的现实账事情起因很简单团队要跑大模型但预算批下来那一刻所有人都沉默了。当时对比了一圈NVIDIA那边随便一张24GB显存的卡就是天价放眼望去性价比感人。而需求其实很明确本地部署7B到13B规模的模型做推理偶尔做做LoRA微调不需要跑满血70B也不需要训练千亿参数。大模型这东西有个特点显存比算力更卡脖子。跑一个7B模型FP16精度光权重就要14GB加上KV Cache和中间激活16GB是底线24GB才舒服。13B模型FP16要26GB基本只有24GB显存以上的卡才能玩。这么一算团队的注意力自然就落到了A卡上同样是24GB价格却不到N卡大显存型号的一半。说实话如果不是预算有限没人愿意主动去蹚A卡这摊生态的水但现实逼着你必须认真考虑。A卡方案解决的是这样一个问题预算有限的前提下怎么用尽可能少的钱获得足够大的显存把7B/13B级别的模型跑起来、微调起来。适合三类人参考预算卡死在两万以内的个人开发者、想给团队搭一套私有化推理环境但没被批大经费的工程师、以及手里正好有存量A卡想物尽其用的折腾党。1.2 大模型对A卡的真实友好度说实话在动手之前我也担心A卡生态不成熟。2024年之前AMD的ROCm在Linux下的支持还比较拉胯很多框架根本不认。但最近一年变化非常明显llama.cpp对AMD显卡的支持已经相当成熟Ollama直接在官方文档里列了AMD GPU的支持列表PyTorch也发布了官方ROCm构建版vLLM的ROCm后端也能用了。这意味着什么意味着主流的大模型推理链路里真正硬依赖CUDA的部分已经很少了。推理这块llama.cpp和Ollama走的是底层优化路线通过ROCm的HIP接口直接调用GPU算力性能和CUDA版的差距已经缩小到了可以接受的范围。微调这块Unsloth和QLoRA也都有ROCm版本虽然安装过程比N卡曲折一点但确实能跑起来。当然A卡方案也有明显的坑。有些第三方工具只看CUDA比如某些依赖FlashAttention CUDA实现的加速库A卡就得绕路或者换方案。还有Windows下的ROCm支持基本是残废状态老老实实装Linux才是正道。这些在后面的章节里都会展开讲先给结论A卡方案的可行性已经今非昔比但需要比N卡多花一点耐心在环境搭建上。2. 硬件选型把钱花在刀刃上2.1 显卡参数对比与取舍选显卡是整个方案的核心我当时把主流A卡拉了一张参数对比表反复看了好几遍显卡型号显存显存带宽功耗(TBP)适合场景RX 7900 XTX24GB960 GB/s355W7B/13B推理、LoRA微调首选RX 7900 XT20GB800 GB/s315W7B推理够用13B微调勉强RX 7900 GRE16GB576 GB/s260W7B量化推理入门RX 7800 XT16GB624 GB/s263W预算更紧时的妥协选择RX 7700 XT12GB432 GB/s245W只建议跑量化后的7B最终选了7900 XTX理由很直接24GB显存刚好卡住13B模型FP16的门槛960 GB/s的带宽在同价位没对手。关于带宽我要多说一句大模型推理对显存带宽的敏感度远高于对算力的敏感度因为解码过程是逐token生成的每一步都要把整个模型权重从显存读一遍带宽直接决定生成速度。7900 XTX的960 GB/s对应13B模型的读取时间大约只有13.5毫秒每层计算配合足够的算力推理速度完全在可接受范围。这里有个经常被忽略的点如果你只跑7B模型7900 XT完全够用多出来的预算可以花在别的硬件上。但如果团队以后想碰13B甚至更大一点的模型24GB是门槛我建议直接一步到位。团队采购最怕的不是买贵了而是买回来没几天发现不够用又要二次采购那才是真浪费。2.2 周边硬件的合理搭配显卡定下来之后周边硬件也要配套否则会被瓶颈卡死。首先是电源7900 XTX的TBP是355W但实际瞬时功耗可能飙到400W以上推荐额定850W以上的金牌电源。如果是双卡方案1000W起步。电源这块不建议省瞬时功耗触发过载保护会导致整机重启大模型推理跑到一半重启那酸爽谁遇谁知道。内存方面有个容易忽视的点CPU内存带宽决定了模型加载速度和数据预处理效率虽然推理主要在显存里跑但容器启动、模型加载、tokenizer处理都需要内存。我推荐直接64GB起步DDR5双通道就行不用特意上高频条稳定优先。主板和CPU主要看PCIe通道数量。单卡方案随便B650配个中端CPU就行。但如果考虑未来上双卡CPU就得留意PCIe通道够不够拆最好是支持x8x8拆分的主板否则第二张卡只能跑x4性能损失明显。散热这块有人觉得显卡自带的散热够用那是打游戏时的逻辑。大模型推理会让GPU长时间满载显存温度会持续高位。我的做法是机箱加装前后各两把12cm风扇形成贯通风道实测能让GPU核心温度降10到15度。长时间跑微调显存温度控制在85度以下比较稳妥太高会影响稳定性。3. 软件环境搭建绕开A卡生态的坑3.1 驱动与ROCm安装细节A卡跑大模型系统首选Linux这是第一条铁律。Windows下AMD官方基本放弃了ROCm支持想折腾也能跑但各种dll冲突和环境变量问题会让人怀疑人生。我们用的是Ubuntu 22.04 LTS也是ROCm支持最成熟的发行版。安装ROCm看起来是个标准流程无非是添加AMD官方源然后apt安装但实际坑不少。我说几个关键点第一ROCm版本必须和显卡架构匹配。RX 7900系列是gfx1100架构早期的ROCm 5.4.2根本不支持直接安上去是看不到GPU的。我们用的ROCm 5.7.1以及之后的6.x版本才完整支持RDNA3。有个环境变量叫HSA_OVERRIDE_GFX_VERSION可以强制让老版本ROCm识别gfx1100但这是应急方案性能和稳定性都会打折没必要省这个事。第二安装之后先跑rocminfo命令确认GPU被识别再跑rocm-smi查看温度和驱动版本。很多人安装完迫不及待就跑模型结果报错找不到设备回头排查一圈发现是驱动根本没加载成功。先验证基础环境这个步骤能省下后面一半的排查时间。第三卡住过不少人的权限问题。ROCm的GPU设备文件默认属于render用户组当前用户不在这个组里程序就报权限错误。解决办法很简单sudo usermod -aG render 你的用户名重新登录一次就生效。驱动签名这个问题在Linux下面反而好解决Ubuntu的apt源里装的驱动都是预签名好的只要关闭Secure Boot或者导入签名密钥就行。如果你装的是AMD官网下载的驱动包记得加上--secure-boot参数或者干脆在BIOS里把Secure Boot关掉否则报错无法验证设备驱动程序的数字签名说白了就是签名没通过。3.2 推理框架配置实测环境装好后选推理框架又是一道选择题。我们实际测试了三条路线各有优劣。Ollama是最省事的方案官方脚本一行安装AMD GPU自动检测模型下载即用。如果团队里有不熟悉命令行的成员Ollama的Open WebUI界面能让他们零门槛使用大模型。实测下来7B模型44 tokens/s左右和同级别N卡差距大约20%到30%日常对话体感几乎没差别。llama.cpp是进阶选项优势是精细控制。比如你可以指定GPU层数把一部分层放到CPU上跑这样显存不够时也能凑合运行大模型。llama.cpp还支持RPC模式这个后面说多机部署时重点展开。缺点是配置全靠命令行上手门槛高一点。vLLM适合做线上推理服务吞吐量极高支持连续批处理有ROCm版本可以安装。但它的门槛是最高的编译周期长依赖重我们是折腾了将近两天才成功跑起来。如果只是内部用不追求高并发吞吐没必要一开始就上vLLM。还有一个框架值得提一下notebook级别的动手党可以关注MLC-LLM它的编译器优化思路很新对AMD显卡的Vulkan后端支持也不错推理速度非常亮眼。但生态比较小众遇到问题不太好搜解决方案我建议作为备选方案而不是主力。我个人的建议是按这个顺序来先Ollama跑通闭环验证硬件没问题再上llama.cpp做精细控制和量化方案测试最后按需考虑vLLM。不要一上来就挑战最高难度A卡方案容错率本来就比N卡低步步为营才不容易劝退。4. 微调实战13B模型LoRA全流程4.1 微调框架选型推理跑通只是第一步团队的真实需求是对内部知识做微调。选型时我试过几条不同的路线说下结论。Unsloth是目前对A卡最友好的微调框架它自带ROCm支持做了大量显存优化而且文档里明确写了AMD GPU的安装方式。它使用HuggingFace的TRL库做监督微调API风格接近transformers有PyTorch基础的同事上手很快。QLoRA是我们最终采用的方案核心思想是把底模量化到4bit然后冻结只训练额外注入的低秩适配器显存占用能砍到原来的一半以上。对于13B模型全参数微调需要60GB以上显存但4bit QLoRA只要16GB到20GB就能跑起来这正是7900 XTX 24GB能承担的工作量。bitsandbytes这个库在AMD平台是个坑它本身是支持ROCm的但很多人会遇到编译失败。我的经验是不要自己从源码编译直接用pip在ROCm版PyTorch环境下安装预编译wheel版本对上了就能用。如果实在装不上退一步用Unsloth内置的Native FFT实现效果差不多。4.2 显存优化与超参数设置微调的显存占用主要来自几个部分模型权重、梯度、优化器状态、激活值。QLoRA把权重压到4bit梯度只针对LoRA参数优化器状态大幅缩减剩下的重点就是控制激活值。激活值大小跟batch size和序列长度直接相关所以调参的核心思路就是在这两个参数上做权衡。我用的这套参数供参考针对7B和13B模型分别设置的参数7B模型13B模型量化精度4bit4bitLoRA rank1616LoRA alpha3232batch size21gradient accumulation48序列长度512512学习率2e-42e-4这套配置下7B模型的峰值显存大约12GB13B大约18GB单卡都能跑。batch size为1时梯度更新频率会大幅提高配合gradient accumulation累积8步后再更新权重等效batch size相当于8训练稳定性是有保证的。我强烈建议开启gradient checkpointing虽然会增加大约30%的计算量但能把激活值显存占用降到原来的三分之一。在7900 XTX上这点速度损失换稳定很值尤其是微调数据量大、训练时间长的场景。实际训练速度方面13B模型在7900 XTX上用QLoRA单卡大约每秒处理2.5个样本效率肯定比不上N卡旗舰但能跑通本身就是胜利。一个5000条的数据集5个epoch大概需要6到8个小时完全在可接受范围内。4.3 训练过程中的几个关键动作训练过程中有几个细节值得提一下。第一混合精度要用bf16而不是fp16ROCm在bf16上的稳定性比fp16好很多数值溢出问题少训练更稳。第二数据加载要做预分词和缓存Tokenizer处理大规模数据集时很占CPU时间不做缓存会拖慢整个训练流程。第三定期保存checkpoint我习惯每250步保存一次LoRA适配器权重这玩意只有几十MB存起来毫无压力但能让你在模型跑飞时及时回滚。训练结束后LoRA适配器要和底模合并才能导出完整的模型文件。Unsloth提供了merge_and_save方法一行代码搞定。合并完成后记得用Ollama或者llama.cpp实测一下效果不要只盯着loss曲线看真实对话才能暴露问题。我们第一次微调出来的模型loss降到0.8以下了但对话时反复输出空行最后发现是数据集里有空行没清洗干净这种问题离线评估根本发现不了。5. 多机多卡的“穷玩法”5.1 显存不够时用RPC模式拼起来团队只有一台24GB的机器后来想试跑34B的模型单卡明显装不下。最初考虑再买一张7900 XTX组双卡但预算流程走完需要时间于是先试了软件层面多机拼显存的路线。llama.cpp支持RPC模式可以让多台机器上的GPU协作运行同一个模型。架构很简单一台主节点加载模型并负责任务调度其他机器各跑一个rpc-server进程通过TCP向主节点提供算力。模型的不同层会被分配到不同机器的显存里前向传播时主节点通过RPC调用远端GPU计算自己的那几层实现张量并行推理。配置RPC模式不复杂在每台需要提供算力的机器上启动llama-rpc-server指定监听端口。然后在主节点上用llama-cli的--rpc参数列出所有节点地址模型就能跨机运行。实际操作中要考虑网络延迟问题局域网内千兆网能跑但带宽是瓶颈万兆环境下面34B模型的速度基本可用。如果跨机部署在办公网里建议单独划一个VLAN给推理集群一是带宽隔离二是避免局域网广播流量干扰RPC通信。这个方案解决了显存容量问题但要明白它的上限。RPC模式本质是把“装不下的模型分装到多个机器”每层的计算还是单GPU负责没有任何多卡并行加速效果。所以它解决的是“能不能跑”的问题而不是“跑得快不快”的问题。34B模型拆分到两台7900 XTX上生成速度大约4到6 tokens/s能满足轻量使用但不适合做高并发服务。5.2 多机部署的踩坑记录RPC模式第一坑是版本一致性。主节点和worker节点的llama.cpp必须编译版本一致RPC协议稍微改个版本就可能不兼容表现出来就是节点连接成功但推理时随机卡死。我们最开始用的是apt源安装的老版本和编译的最新版之间差了十几个commit折腾了整整一晚上。第二坑是内存不足。单台机器如果只靠GPU显存不够llama.cpp会自动把多余层跑到CPU内存里但RPC模式下CPU和GPU的速度差异会在跨机场景中放大某台机器CPU慢会拖累整个链路。解决方法是给每台机器设置好--n-gpu-layers参数明确指定每台机器承接多少层不要让程序自动分配。第三坑是网络不稳定。我们有一台节点用的是WiFi连接看起来信号满格但推理时经常卡住几分钟然后报超时。排查了半天发现是WiFi的丢包率在满负载时飙升换有线之后一切正常。做分布式推理所有节点务必用有线网络。6. 常见问题与排查技巧实录6.1 问题速查表这段时间折腾下来整理了一张问题表基本覆盖了A卡方案最常见的状况现象可能原因解决办法ROCm识别不到显卡驱动版本过老、Secure Boot开启升级ROCm 6.x、关Secure Boot推理程序报device not found用户不在render组sudo usermod -aG render 用户名生成速度极慢(个位数t/s)GPU层数设太少调大--n-gpu-layers参数训练显存溢出OOM激活值占用过高开gradient checkpointing、减小batch size微调loss不降学习率过大或数据有噪声降到1e-4以下、清洗数据集多机RPC偶尔卡死各节点版本不一致统一用最新版重新编译显卡满载温度过高机箱风道不畅加装机箱风扇、适当降功耗墙6.2 两个容易被忽视的坑第一个坑是Ollama和llama.cpp同时使用时可能会占用同一份GPU显存映射导致某个程序启动时显存不足。这不是硬件问题是软件层面的显存管理冲突。Ollama常驻内存后你再开llama.cpp推理后开的那个可能因为拿不到显存而起不来。解决方法是设置OLLAMA_MAX_LOADED_MODELS1限制模型常驻数量或者干脆用完一个退出一个。第二个坑是电源瞬时功耗。有的电源标的额定功率只是平均值遇到GPU瞬时电流冲击会触发OCP保护机器直接断电重启。排查特征很明显平时跑推理没事一跑微调就自动重启大概率就是这个问题。我遇到过两次一次是换了更大功率电源解决另一次是用AMD驱动里的功耗上限工具把显卡功耗墙从400W降到350W解决的性能损失大约5%但换来稳定。还有一个经验ROCm升级前一定先备份能用的环境。ROCm 6.x升级过程中依赖冲突导致整个系统Python坏掉的情况不少见务必备份容器或者记录下pip freeze的列表。我们的做法是把推理环境全部容器化宿主机只装驱动容器里随你怎么折腾坏了重建只要五分钟。7. 成本账与最终建议7.1 这套方案到底花了多少钱列一下我们的配置和花费仅供参考实际价格会有波动项目配置大致成本GPURX 7900 XTX 24GB约8000元CPUR7 7700约1500元内存DDR5 64GB (32GBx2)约1200元主板B650约1200元电源850W金牌约800元存储2TB NVMe SSD约800元机箱散热塔式机箱风道改造约500元合计约14000元如果第二台机器只做RPC worker预算能压缩到8000到9000元性价比确实高。同样24GB显存NVIDIA旗舰被炒到2万元往上A卡方案的1.4万综合成本显然更有吸引力。但也要算上时间成本环境搭建和问题排查比N卡多花的时间是不可忽视的隐性成本第一次折腾的话准备两到三天的调试时间比较合理。7.2 什么场景适合A卡方案说句心里话A卡方案不是万能的它适合的场景和不适用的场景都很清晰。适合预算敏感的团队内部推理、私有化部署、7B到13B模型的LoRA微调、不需要高频次更换框架的实验性项目。这类场景里A卡方案性价比优势明显24GB大显存带来的模型支持能力非常香。不适合要跑高性能在线服务、追求极致吞吐量、依赖FlashAttention等CUDA专属算子的研究项目、需要多卡大规模训练的严肃场景。这类需求说白了还是老老实实走N卡路线A卡的ROCm生态暂时还撑不起这些高端玩法。有一个折中的思考也可以分享如果团队对大模型是真的长期投入可以混合采购。一台N卡作为主力开发机搞定所有生态兼容性问题一台或几台A卡作为批量推理和微调的算力补充。这样既控制预算又保证核心场景不被生态问题卡脖子。我们目前就是这么做的开发调试在N卡日常推理和重复性微调任务全部丢给A卡各司其职。7.3 如果重来一次我会怎么做最后分享一点个人体会。如果让我重新规划这次A卡方案我会先花一周时间做框架验证重点回答三个问题目标模型能不能跑、速度能不能接受、训练降不降得下来。验证通过之后再批量采购避免买回来才发现不匹配需求。买卡渠道也得提醒一句现在很多二手A卡价格诱人但要小心矿卡翻新。到手第一步跑满载压力测试至少半小时观察温度、功耗、频率是否稳定显存有没有ECC报错。这块省下来的钱可能不够后续折腾的医药费。另外一个建议尽量一步到位买24GB版本。我们当初纠结过7900 XT的20GB省那么一千多元换来的是13B模型微调时的处处小心。显存这东西真到用的时候才觉得不够。团队采购的决策逻辑应该是为未来半年的需求买单而不是只盯着当下够用。