ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

8G显存跑35B大模型:多卡并行与CPU offload实战指南

2026/9/19 3:20:07 拓冰建站 浏览量
8G显存跑35B大模型:多卡并行与CPU offload实战指南 8G显存跑35B大模型这话放在两年前群里说出来是要被群嘲的。35B参数单是权重用FP16存就超过70GB8G显存连零头都不够。不过现在情况不一样了量化技术把单个参数压到0.6字节左右多卡并行把显存压力分散CPU和内存又能兜底。我最近正好用两张8G显存卡、金邦128G内存搭了一台本地AI工作站把Yi-34B这个量级的模型真的跑起来了顺带把多卡部署和CPU offload的坑踩了一遍。这篇文章就聊聊我的实测过程从硬件选型、内存带宽对CPU推理的影响到llama.cpp的具体配置以及那些文档里不会写的血泪经验。适合手头有低显存卡、又不想上云、还想折腾本地大模型的朋友。1. 先理解35B大模型为什么这么吃显存1.1 模型有多“胖”权重与KV Cache的账大模型推理时内存和显存占用主要来自两块模型权重以及KV Cache和中间激活值。权重最容易理解35B参数如果用FP16/BF16存就是35×270GB一张24G卡都装不下。实际部署中我们会换到4bit量化比如Q4_K_M GGUF单参数大概0.6字节整个模型能压到21-23GB。注意这个21-23GB只是权重文件的静态大小。真正启动后CUDA context、计算图、KV Cache都会额外占空间。KV Cache取决于上下文长度上下文设4096时可能占几个GB设32K时能吃掉10GB以上。所以即便量化后权重20多GB8G单卡也远远塞不下。这也是“8G显存跑35B”看起来像伪命题的原因——单卡确实不可能但把多卡、量化、CPU offload组合起来就有操作空间了。1.2 8G显存的“三个突破口”要让8G显存跑35B级别模型主流思路有三条。第一是多卡两张8G加起来16G模型通过张量并行或层并行切分能同时利用多块GPU的显存和算力。第二是CPU offloadGPU装不下的层全部扔到内存由CPU负责计算内存越大越稳。第三是量化用GGUF、GPTQ这类低比特格式把模型体积缩到能塞进有限显存。这三个方案不是互斥的我最终就是“两张8G卡 128G内存 Q4_K_M量化”组合GPU负责一部分层剩下层全部offload到内存。这样既绕开了显存墙又不至于让CPU从头算到尾导致完全不可用。如果你有40系N卡推荐优先考虑这个组合因为40系支持FP8加速推理不过在CPU offload场景下N卡和A卡区别倒没有想象中那么大。1.3 量化等级怎么选Q4、Q5、Q8差多少很多新手第一次下GGUF会被Q4_K_M、Q5_K_S、Q8_0这些命名搞晕。简单说Q后面的数字代表量化位数数字越高精度越高、文件越大、显存占用也越高K_M和K_S代表量化策略M通常比S保真度更高。我这里实际用的时候做了个对比量化格式35B模型文件大小2×8G显存64G内存能跑吗体感效果Q4_K_M约22GB可以需要offload一部分层日常聊天足够偶尔有小瑕疵Q5_K_M约27GB勉强显存压力更大文字质量略好但速度更慢Q8_0约36GB很难内存占用太高接近原版但CPU推理几乎不可用我的建议是低显存场景优先选Q4_K_M它是量化和质量之间最平衡的点。Q3文件更小但输出容易胡言乱语Q5以上对显存和内存要求都更高。先跑通再谈质量这是低显存部署的基本原则。2. 硬件搭配128G内存和多卡是怎么协同的2.1 这台机器的具体配置先交代一下我这次用的机器纯实用主义不是跑分配置CPU是Intel i7-13700K显卡两张RTX 4060 8G第二张卡跑在PCIe x4槽上内存是金邦128G套装4条32G标称DDR4 3600MHz主板是华硕Z690-P电源850W金牌。硬盘用了一块1TB的NVMe SSD专门放模型文件。为什么不直接上24G大卡成本原因。一张二手24G卡五到八千起步而两张8G新卡加128G内存总价还不到一张高端卡。就本地跑35B这个需求来说双卡大内存的组合明显更划算。如果你手里已经有一张8G卡再加一张二手8G卡的成本就更低了。2.2 为什么CPU和内存同样关键内存带宽的计算很多人以为显存够大就能跑其实当模型一部分层被offload到内存后计算主力就从GPU变成了CPU内存。此时推理速度主要取决于内存带宽而不是CPU浮点算力。拿我这套机器举例双通道DDR4 3200MHz理论带宽是64bit×2通道×3200MT/s51.2GB/s实际能用到40GB/s就算不错。作为对比一张RTX 4060的显存带宽约272GB/s差了6倍多。所以模型一旦大量依赖CPU推理速度断崖式下跌是必然的。128G内存的意义不只是“能装下”更是要和通道数、频率搭配好否则带宽不足会成为最大瓶颈。这里有个容易踩的坑很多人买大容量内存时不看频率觉得容量够了就行。结果双通道2133MHz和双通道3200MHz在CPU推理场景下速度能差30%以上。所以装机时至少组双通道预算允许就上4条高频条并且进入BIOS打开XMP或EXPO让内存跑在标称频率上。2.3 装机过程里的几个注意点这次装机遇到几个具体问题值得提一下。第一4条32G内存插满后默认会跑在2133MHz必须去BIOS打开XMP才能上到3600MHz。不过4条双面颗粒同时超频压力很大我最后稳定在3200MHz时序18-22-22-42再激进一些就蓝屏重启。第二两张显卡如果离得太近上方那张卡温度会高8-10度。4060功耗不高还好如果是大火炉级别显卡建议用PCIE转接线把两张卡错开。第三第二张卡如果在x4插槽上多卡张量并行时数据传输会比较慢但对CPU offload场景影响有限大头都在内存和CPU之间来回读权重跨卡通信反而不是主要瓶颈。还有一个很多人忽视的点CPU散热。CPU offload推理时CPU会长时间高负载运行i7-13700K如果只配一个小塔风冷连续推理十几分钟后温度会直逼100度随之降频。我后来换了个双塔风冷温度压在80度左右速度稳定不少。强烈建议跑这种任务前先看CPU散热和机箱风道。3. 部署实操两步实现多卡CPU offload3.1 推理框架选型Ollama、llama.cpp还是vLLM选框架我纠结过一轮。Ollama安装方便一条命令就能跑但多卡和offload参数控制不够细显存不够时它会自动往内存卸载但具体卸载多少、分配在哪张卡上可调节的余地很小。vLLM服务性能和吞吐都很强但对CPU offload支持很弱Windows下配置还麻烦更偏向生产服务器场景。最后我选了llama.cpp原因很直接支持GGUF量化参数控制细——可以指定GPU层数、多卡拆分方式、线程数还能看到详细的运算日志。更重要的是它单文件、无重依赖对只想低成本本地跑模型的人来说非常友好。如果你以后想封装成APIllama.cpp也有自带的server示例一样能跑Ollama风格的接口。3.2 模型下载与量化GGUF关键点解读这次用的是Yi-34B-Chat的GGUF Q4_K_M版本文件大小约22GB。GGUF是llama.cpp社区主推的量化格式优点是把量化、词表、元信息全部打包在一个文件里部署简单不用额外做权重转换。下载方式可以直接用HuggingFace CLI国内用户也可以用ModelScope。命令类似huggingface-cli download unsloth/yi-34b-chat-GGUF yi-34b-chat.Q4_K_M.gguf --local-dir ./models下载完可以用llama-gguf工具查看元信息确认模型的层数、attention头数等参数。不同版本的GGUF层数可能不一样但Yi-34B这类模型一般在64层左右后面调-ngl时需要心里有个数。如果下载速度慢优先选Q4_K_M别一上来就抓Q8低显存场景跑不动。3.3 llama.cpp多卡部署命令与参数详解llama.cpp编译时记得选CUDA版本。Windows下直接用Release包里的llama-cli.exe也行。我最终的启动命令大概是下面这样./llama-cli \ -m ./models/yi-34b-chat.Q4_K_M.gguf \ -ngl 48 \ -c 4096 \ -t 12 \ --split-mode layer \ --main-gpu 0-ngl 48表示把模型的前48层offload到GPU两张卡自动平分每张卡大约24层。为什么是48而不是更多我最初设置成56启动直接CUDA OOM。算一下量化后模型22GB假设64层每层约0.36GB48层约17GB两张卡总共16G显存加上CUDA context和KV Cache还是超了。后来把-c降到2048-ngl才勉强能开到50。所以实际使用中-ngl需要配合上下文长度一起调不能只看模型大小。-c 4096是上下文长度低显存场景建议先从4K开始。-t 12是CPU线程数i7-13700K是8大核8小核跑CPU offload时线程太多会互相抢内存带宽太少又浪费CPU12是我来回测了几轮比较稳的数值。--split-mode layer表示按层切分到多卡这是和单卡部署最大的区别如果想按行切分张量可以用--split-mode row但低显存场景下layer模式更直观。3.4 实测效果速度数据与体感启动完成后两张卡的显存占用分别是7.6GB和7.8GB内存占用大约48GB其中模型offload部分占30GB左右KV Cache和其他开销10多GB。整个进程稳定运行没有频繁的内存交换。我实际做了几轮长问答输出速度在4.5到6.5 token/s之间首token延迟大概10-15秒。这个速度聊天够用但批量处理文档会很急人。如果直接不加-ngl让模型完全跑CPU速度会掉到1 token/s以下基本不可用。所以“8G跑35B”的可行前提一定是“多卡offload”组合。显卡能帮一点是一点CPU和内存兜底剩下的部分。开启--flash-attn能省一些显存实测大概省1-2GB但对CPU offload的提速效果不显著聊胜于无。4. 调优与常见问题排查4.1 显存不够用报CUDA OOM怎么办最常遇到的就是显存不足。启动时报CUDA out of memory优先检查两件事第一-ngl是不是太高了降到40甚至36试试第二显存是不是被其他进程占着。N卡用nvidia-smi看显存Windows任务管理器也能看把浏览器、其他AI程序全关掉再跑。如果两张卡显存不一样比如一张8G一张12G默认平均分配可能浪费小卡容量。新版llama.cpp支持给每张卡单独指定层数具体参数要看版本帮助老版本没有的话就只能手动控制--main-gpu和--tensor-split。我的经验是调-ngl按4层一组往下减直到能稳定启动再回到稳定值往上探一层找到临界点。4.2 速度太慢CPU占用异常怎么办生成速度远低于预期时先看CPU占用率。如果CPU占用一直100%说明线程开多了把-t从12降到8有时候反而更快。如果CPU占用上不去但速度还是慢大概率是内存带宽瓶颈。这时候去BIOS确认内存频率别让XMP没生效、跑在2133MHz那等于白白浪费30%性能。另外Windows的电源计划一定改成高性能模式否则CPU会频繁降频。我踩过这个坑默认平衡模式下速度只有5 token/s切到高性能后稳定在6.2 token/s左右。处理器调度上i7-13700K这类大小核CPU如果有问题可以试试把CPU亲和性绑到大核上或者干脆在BIOS里关闭超线程减少调度抖动但提升有限看个人折腾意愿。4.3 内存容量 vs 速度上下文长度怎么设置128G内存看起来很充裕但不代表上下文可以无限拉长。KV Cache和上下文长度是线性关系-c 8192时KV Cache可能占8-10GB内存-c 32768时会膨胀到几十GB。虽然内存不一定爆炸但推理时每次读写这些缓存都要吃内存带宽速度会进一步下降。我的建议是跑35B量级模型先设4096日常对话够用。如果临时要处理长文档再改到8192但要做好速度下降的心理准备。另外注意llama.cpp启动时会预分配部分内存如果内存占用显示很高先看是不是--mlock或--no-mmap把整个模型锁进内存这会大幅提高启动速度但会占更多物理内存适合内存特别宽裕的场景。4.4 几个容易被忽视的小问题模型文件放在机械硬盘上加载时间会非常长可能启动几分钟都进不去提示符。强烈建议把GGUF文件放NVMe SSD加载时间能从几分钟降到几十秒。用WSL2和原生Linux跑性能差异不大但显存直通偶尔有坑。如果不想折腾LinuxWindows原生版llama.cpp也能用选择带CUDA的Release即可。多卡部署时两张8G和单张16G哪个好我的实际感受是如果模型像35B这样需要offload双卡有明显优势因为能多放一些层进显存速度比单卡16G更快但如果只是跑7B、13B小模型单卡16G更省心双卡并行反而增加数据传输开销。所以到底双卡还是单卡要先看你的目标模型有多大。5. 选型建议这套方案到底适合谁5.1 预算分配显卡、CPU、内存谁优先如果你确定要走低显存多卡offload路线预算分配顺序我个人建议是内存 CPU 显卡。内存容量决定你能不能装得下模型内存带宽决定CPU推理速度的天花板所以最不能省的就是内存。起步64G想跑35B以上直接128G内存频率也不能太低至少3200MHz DDR4或DDR5 5600MHz以上。CPU则要选内存控制器强、核心数多的型号。AMD锐龙和Intel酷睿都能用但要注意主板内存插槽数量最好选支持4条内存的板子。显卡反而是最灵活的你可以先用手头的一张8G卡跑通觉得速度不够再收第二张同型号卡组多卡。两张卡不强制同型号但同型号参数更省心驱动兼容性也更好。5.2 和直接买大显存卡相比有什么取舍直接买一张24G大显存卡比如RTX 4090或RTX 3090部署起来确实简单模型全部进显存速度快不用操心CPU和内存带宽。但成本高而且显存升级空间被封死了。我这套双8G128G内存的方案最大优势是便宜和灵活以后想跑更大模型加内存就能往上顶一顶劣势是速度上限低CPU推理部分不可能快过GPU体感属于“能聊天但别指望秒回”。如果你平时工作流是写代码、跑批量推理那还是多存钱上大显存卡如果只是个人学习折腾喜欢本地离线跑模型那么多卡大内存这套组合绝对值得一试。我个人的体会是硬件方案的魅力不在于堆钱而在于用现有资源榨出最大价值这个过程中你能把显存、内存、CPU带宽的协作关系摸得明明白白。最后再分享一个小技巧把模型加载阶段和推理阶段分开观察启动时看显存和内存占用生成时看CPU占用和内存带宽。哪个先到瓶颈就去补哪块这套思路比盲目升显卡更实用。踩了几次坑之后你会发现8G显存跑35B不是伪命题但“CPU与内存同样重要”这句话才是这个方案真正的精髓。