先说个现象。这几天我的私信里挤满了同一个问题:这台电脑能本地跑大模型吗?更具体一点,是"32GB内存的Mac mini能跑多大的模型""CPU跑大模型是不是纯属折磨""MoE架构是不是显存小也能跑"。这些问题背后的共同焦虑是:AI发展太快,手里的机器好像一夜之间就过时了。
但说实话,大部分人的瓶颈不在机器,而在对本地大模型硬件这件事的理解方式上。我见过有人拿64GB内存的PC用CPU硬扛32B模型,卡到怀疑人生;也见过8GB显存的笔记本跑7B模型跑得风生水起。差别不在钱包厚度,而在有没有搞明白模型的显存占用逻辑、推理路径的瓶颈在哪、以及该用什么框架去榨干硬件性能。
这篇不打算写成参数堆砌的评测,而是基于我实际折腾过的一批机器,包括那台讨论度最高的32GB Mac mini,把三件事一次说清楚:MoE架构下的显存计算误区、CPU/GPU/NPU三条推理路径的真实差距、以及小团队部署时从个人玩具到200人服务的扩展思路。无论你是想花最少的钱入坑,还是已经在坑里想调优,都值得看完。
1. MoE架构的显存骗局:为什么"参数越少越省显存"是个伪命题
1.1 稀疏激活到底省了什么、没省什么
先破除一个流传最广的误解。很多人一看到"MoE(混合专家)"四个字,就觉得这个架构省显存,理由是"推理时只激活一部分专家,没用的专家不用加载"。这个说法前半句对,后半句错得离谱。
MoE在推理时确实只会把token路由到少数几个专家网络上,计算量因此大幅下降,这是它比同尺寸Dense模型快的原因。但模型的权重文件是整体加载进内存的,门控网络、共享注意力层、全部专家网络,一个都少不了一份。你想让"专家们随时待命",就得给每一个专家都安排"工位"——哪怕这个专家这次没被叫到,他的"简历"也得老老实实躺在内存里。
用个生活化的类比:MoE就像一个大公司里的专家会诊系统。每次来一个token,门控网络负责把问题分派给几个最对口的专家。公司养着100个专家,但每次只让3个人干活。你觉得公司省钱了?不,工资还得照发100份,办公位也得预留100个。MoE省的是"干活时的算力消耗",不是"存放专家的人力成本"。
所以,MoE模型的显存占用依然取决于总参数量,而不是激活参数量。你可以在计算量上享受稀疏激活的红利,但在显存账本上,MMoE几乎没有给你打折的空间。
1.2 给MoE模型算一笔真实的显存账
举两个最典型的例子。Mixtral 8x7B,光看名字有56B参数对吧?实际上它共享了注意力层,总参数量约46.7B。如果以FP16精度加载,需要46.7×2=93.4GB显存,3090都得两张SLI。但要是量化到Q4,权重缩到约24GB,一张4090就装下了,这才有了"8x7B也能单卡跑"的说法。
另一个例子是国产的Qwen1.5-MoE-A2.7B,总参数14.3B,激活参数只有2.7B。很多文章吹它"媲美7B模型,只需2.7B的算力",这话也不算错,但你要是想在本地跑它,内存需求还是按14.3B算的——Q4量化后大约8GB出头,不是2.7B对应的1.5GB。
这里给出一个可复用的显存估算公式,拿笔记一下:
- FP16精度:显存需求(GB)≈ 参数量(B)× 2
- Q8量化:显存需求(GB)≈ 参数量(B)× 1
- Q4量化:显存需求(GB)≈ 参数量(B)× 0.5~0.6
再补一刀:很多人在搜索"MoE负载均衡代码",以为部署MoE模型还需要自己写负载均衡逻辑。那是训练阶段的事,目的是让各专家使用率均匀,防止路由坍塌。部署推理时框架已经内置了路由策略,轮不到你写代码。这个搜索词背后反映的,其实正是大家把训练和推理的显存模型搞混了。
2. CPU、GPU、NPU三条路:算力之外的隐形成本
2.1 CPU跑模型:内存带宽就是你的天花板
先说结论:CPU不是不能跑大模型,而是它的瓶颈从来不在算力,在内存带宽。大模型推理是典型的带宽密集型任务——模型权重要从内存搬到计算单元,每生成一个token,就要把全部权重读一遍。
目前消费级DDR4双通道内存的理论带宽约51.2GB/s,DDR5双通道约102.4GB/s。一个7B模型Q4量化后约4.5GB,那么在DDR5平台上,理论峰值token生成速度就是102.4除以4.5,约22 token/s。听着还行对吧?但注意这是理论值,实际打个六折,约13-15 token/s,基本属于"能等但不能忍"的水平。
如果你只有DDR4,哪怕是7B模型也是10 token/s左右,纯粹折磨。相比之下,GPU的显存带宽动辄几百GB/s往上,这才是大模型推理的主场。所以CPU跑本地模型的唯一合理场景,是3B以下的小模型——比如Qwen2.5-3B-Q4大约2GB权重,DDR5能跑出40-50 token/s,日常问答完全够用。
一句话总结:CPU路径的价值在于"零额外成本",但天花板极低,适合尝鲜不适合干活。
2.2 GPU:显存是硬约束,生态是软实力
GPU是当前本地大模型的主流路径,但选GPU的原则和玩游戏完全不同。游戏看CUDA核心数和频率,大模型只看显存——显存不够,性能再强也白搭。
NVIDIA是绝对的主流,原因很简单:CUDA生态。llama.cpp、Ollama、vLLM这些推理框架,对CUDA的优化都是第一优先级。24GB显存的RTX 4090能跑32B模型的Q4量化(约18GB),或者14B模型的Q8量化(约14GB),属于甜品级选择。二手市场两千多的RTX 3090 24GB性价比极高,是预算党的最优解。
AMD这边,ROCm的兼容性是个老大难。RNPU理论上很强,但很多卡跑llama.cpp要手动设HSA_OVERRIDE_GFX_VERSION之类的环境变量,新手直接劝退。Intel Arc显卡倒是稳扎稳打地在完善sycl支持,但和CUDA的成熟度还有差距。除非你预算确实卡死,否则我都推荐NVIDIA。
另外提醒一个容易忽略的坑:GPU跑大模型功耗极高。我实测4090连续推理时功耗能到300W+,笔记本的散热根本压不住,跑十分钟就降频。想长期当服务用的,老老实实上台式机或者外接显卡坞。
2.3 NPU:低功耗的诱惑与生态的现实
新一代处理器(Intel Core Ultra、AMD Ryzen AI、骁龙X Elite)都集成了NPU,标称算力看起来不少——动不动就是几十TOPS。但我要泼一盆冷水:NPU目前的软件生态,还配不上它的硬件参数。
现阶段NPU主要靠ONNX Runtime和DirectML跑一些特定模型,支持列表极其有限。我自己在Core Ultra上试过跑1-3B的小模型,速度确实比CPU快,功耗也很低,但一到7B以上就各种报错或者速度骤降。更别说llama.cpp对NPU的支持还停留在实验阶段。想拿NPU当主力跑本地大模型,劝你至少再等一年。
总结下来,三条路径的真实定位是这样的:
| 路径 | 核心瓶颈 | 适合规模 | 典型速度(7B Q4) | 折腾成本 | 适用场景 |
|---|---|---|---|---|---|
| CPU | 内存带宽 | 3B以下 | 10-20 token/s | 极低 | 尝鲜、老机器再利用 |
| GPU | 显存容量 | 7B-32B | 40-80 token/s | 中 | 个人主力、小团队服务 |
| NPU | 软件生态 | 1B-3B | 待观察 | 高 | 嵌入式、端侧推理 |
3. 32GB Mac mini实战调优:统一内存架构下的极限榨取
3.1 为什么Mac mini值得讨论:内存就是显存
Mac mini最近讨论度爆炸的原因,在于Apple Silicon的统一内存架构。CPU和GPU共享同一块内存,这意味着没有"显存"和"内存"的区分——32GB内存,就是32GB"显存"。
这在本地大模型场景是个巨大的结构性优势。同价位的PC,16GB显存的显卡可能要花五六千,而一台32GB Mac mini(M4 Pro芯片)内存带宽约273GB/s,能直接把14B模型Q4量化(约9GB)塞进"显存"里跑,还能剩20多GB给系统。关键是功耗极低、体积安静,当一台常驻的本地AI服务器非常合适。
但也要把丑话说在前面:32GB跑14B Q4很舒服,跑32B Q4(约18GB)就有点勉强了,生成速度会明显下滑,一旦系统内存压力过大,macOS会开始疯狂用swap,速度直接崩盘。所以我个人的结论是:32GB Mac mini的甜点区间是14B以下模型,想稳定跑32B,要么等M4 Max的64GB版本,要么就老老实实上PC多卡。
3.2 工具链选型:Ollama、LM Studio、MLX和llama.cpp怎么选
Mac平台的主流工具链有四条,各有侧重:
- Ollama:最省事的命令行方案。一行
ollama run qwen2.5:14b-instruct-q4_K_M就能跑起来,内置OpenAI兼容API,适合新手和快速验证。 - LM Studio:带GUI的桌面应用,本质还是调用llama.cpp后端,好处是能可视化调节参数、查看加载进度。很多人搜"lmstudio本地大模型接入claude",其实就是在LM Studio里起一个本地API服务,再让Claude Desktop指向它——这个用法确实好用。
- MLX:Apple官方生态的原生框架,基于Metal优化,对Apple Silicon的利用效率最高。追求极致速度的话首选,但自定义程度高意味着学习曲线陡。
- llama.cpp:底层王者,所有工具最终都在用它。直接在终端跑可执行文件,对每一条参数都有绝对控制权。
我的建议是:新手从Ollama入门,跑通了再研究MLX和llama.cpp差异。工具只是前端,底层推理引擎才是速度的关键。
3.3 调优实测:一条命令榨干M4 Pro的带宽
我这台是M4 Pro芯片、32GB内存的Mac mini,跑Qwen2.5-14B-Instruct的Q4_K_M量化版。刚上手时直接用默认参数,生成速度大概18-20 token/s,经过几轮调优后能稳定在25-30 token/s,具体做了这几件事:
第一,控制上下文长度。默认情况很多工具会把上下文拉到32K甚至更高,这会让KV Cache占掉大量内存,拖慢生成。日常对话我建议按需设置,比如8K就够用。在llama.cpp里就是--ctx-size 8192,Ollama则用环境变量OLLAMA_CONTEXT_LENGTH=8192控制。
第二,打开Flash Attention。M系列芯片支持,能显著降低KV Cache的显存占用并提升速度。llama.cpp加-fa参数即可,Ollama新版本默认已开启。
第三,量化级别别贪。Q4_K_M是目前公认的性价比之王,比Q8慢不了多少但体积减半。Q2能塞更大模型但生成质量肉眼可见地下降,多轮对话尤其明显。
一个典型的Ollama启动命令是这样的:
OLLAMA_CONTEXT_LENGTH=8192 ollama run qwen2.5:14b-instruct-q4_K_M如果需要更高自由度,可以直接用llama.cpp:
./llama-cli -m qwen2.5-14b-instruct-q4_K_M.gguf \ --ctx-size 8192 \ -fa \ -t 8 \ -n -1-t 8指CPU线程数,在Apple Silicon上通常设为性能核数量最优。-n -1是无限生成直到手动停止。实测中,同样的模型,MLX框架能跑到35 token/s左右,比llama.cpp快了约15%——Apple芯片上用官方框架确实是有点优势的。
3.4 KV Cache的显存账:为什么"模型明明只有9GB却卡"
很多Mac mini用户会碰到一个诡异现象:模型加载完明明只占了9GB内存,但一聊长对话就开始卡顿。这里面的隐形杀手是KV Cache。
KV Cache是推理时为每个token缓存的键值向量,它随上下文长度线性增长。计算公式大致是:KV Cache大小 = 2 × 层数 × KV头数 × 头维度 × 序列长度 × 字节数。以Qwen2.5-14B为例,在8K上下文中,KV Cache约占2-4GB内存,如果拉到32K,这个数字直接翻四倍。
算一笔账就清楚了:模型权重9GB + 8K上下文KV Cache约3GB + 系统本身占用约8GB = 20GB,运行中还有各类临时buffer,32GB内存其实已经被压得很紧。这就是为什么很多人跑14B模型一开长上下文就内存飘红,然后用M系列芯片的机型会自动开启swap,速度直接从30 token/s跌到个位数。
建议定期用sudo memory_pressure或活动监视器看内存压力。如果经常处于黄色以上,就该考虑缩上下文、换更狠的量化级别、或者干脆换更大内存的机器。
4. 从"自己玩"到"200人用":本地大模型规模的性价比临界点
4.1 个人与团队的真实需求差异
个人玩本地模型,追求的是单用户低延迟——一次就一个请求,50 token/s和20 token/s的区别只是"爽"和"有点急"的区别。但一旦到了团队场景,评判标准就变成吞吐量:同一时刻50个人发起请求,如果每人的20 token/s共享同一个后端,实际每个人分到的速度可能连2 token/s都不到,体验直接崩塌。
所以部署前要先算一笔吞吐账。最简单的估算公式:并发用户数 × 每个用户满意的生成速度 = 后端需要的总吞吐。200人的团队,假设峰值并发20人,每人要求20 token/s,后端就需要400 token/s才能扛住。指标定下来,硬件需求就清楚多了。
4.2 一张卡还是多张卡:从单机到集群的路径
一张RTX 4090跑13B模型Q4,vLLM下大约能输出60-80 token/s,只够支撑三五个人同时使用。200人规模的团队,如果你只想用一张卡,结论很简单:不可能。
可行方案大概是这样的:
- 预算有限但想跑14B模型:两张二手RTX 3090 24GB走NVIDIA多卡,vLLM的Tensor Parallelism之下能到200-300 token/s,勉强支撑30-50人的轻量并发。
- 200人认真用:四张RTX 4090(或者两张RTX 6000 Ada 48GB)加一台双路服务器,走vLLM + 分布式推理,总吞吐做到800-1000 token/s量级,成本约5-8万。这个配置能覆盖大部分内部工具的查询需求,但与商业API仍有差距。
- 省钱且能用的中间路线:本地部署Qwen2.5-7B或Llama-3.1-8B,这两个模型在四卡方案下吞吐容易做高,200人内部使用完全够。
用vLLM启动服务的典型命令:
python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-14B-Instruct \ --tensor-parallel-size 4 \ --max-num-seqs 64 \ --gpu-memory-utilization 0.92--max-num-seqs控制并发序列数,这是吞吐的关键参数。--gpu-memory-utilization允许vLLM占满显存,做连续批处理。
4.3 综合成本与架构建议
按经验,200人团队的合理预算分三档:
| 方案 | 硬件 | 预估成本 | 支撑人数 | 典型模型 |
|---|---|---|---|---|
| 尝鲜级 | 32GB Mac mini | 约1万 | 1-5人 | 14B Q4 |
| 性价比级 | 双卡3090 + 二手服务器 | 约2-3万 | 30-50人 | 14B Q8 |
| 团队主力 | 四卡4090/双卡A6000 | 约5-8万 | 200人内 | 14B-32B |
前两条路我都实际走过。双卡3090方案最值得推荐,二手卡量大管饱,24GB显存跑14B模型Q8或者32B模型Q4都有余量,vLLM开起来之后收益非常明显。别忘了加一张便宜的系统盘和128GB以上内存,多卡推理时CPU内存也是参与数据分发的。
还有一点容易被忽略:200人使用场景里,模型本身的选型比硬件更关键。如果是写代码辅助,Qwen2.5-Coder系列或者DeepSeek-Coder的本地量化版会远胜同一尺寸的通用模型;如果是做客服知识库,嵌入模型和向量数据库的成本也要算进总预算里。部署之前先把任务类型想清楚,大概率能省一半的钱。
最后分享一个实践小技巧:无论你最终选了哪条路径,量化级别和上下文长度都要先跑一轮基准测试再定。我习惯用lm-evaluation-harness或者干脆写一组固定prompt,测出不同参数组合下的吞吐与质量,权衡之后再上生产。本地大模型的"真相",说到底就是让每一块显存和内存都花在刀刃上——能跑和跑得好,中间隔着的全是这些细节。