模型选型:参数量、架构与量化精度对成本的影响
模型选型这事儿,说白了就是「用多大的枪打多大的鸟」。我见过不少团队,上来就上 70B,结果 GPU 集群烧钱烧得心疼,最后发现 7B 微调一下完全够用。反过来也有,用 7B 硬扛复杂推理任务,效果差到被业务方投诉。
这一章,咱们就掰开揉碎聊聊:不同参数量到底差多少钱?MoE 是不是真的省钱?量化精度怎么选才不翻车?
参数量级:7B、13B、70B 的真实成本差异
先看一组我实际跑过的数据。假设你用 A100-80G,FP16 精度,单次推理的 batch size = 1:
| 模型规模 | 显存占用(FP16) | 单次推理延迟 | 单卡吞吐(req/s) | 单次推理成本(估算) |
|---|---|---|---|---|
| 7B | ~14 GB | ~30 ms | ~30 | 极低 |
| 13B | ~26 GB | ~60 ms | ~15 | 中等 |
| 70B | ~140 GB | ~300 ms | ~3 | 高 |
注意,70B 单卡根本放不下,必须用张量并行。我习惯用 8 卡 A100 跑 70B,这时候通信开销会吃掉不少性能。实际吞吐不是 3 req/s,而是 2 左右。
核心结论:70B 的单次推理成本大约是 7B 的 20-30 倍。不是 10 倍,是 20-30 倍。因为显存不够、并行开销、卡间通信,这些都会放大成本。
那什么时候该用大模型?我个人经验是:
- 7B:文本分类、简单问答、代码补全、摘要生成。效果够用,成本可控。
- 13B:中等复杂度的对话、翻译、逻辑推理。性价比最高的区间。
- 70B:复杂推理、数学证明、长文本理解、代码生成。只有业务价值足够高时才上。
我的建议:先拿 7B 跑通流程,用 13B 做 A/B 测试,确认 70B 带来的提升值得多花 20 倍成本,再上大模型。别一上来就「全都要」。
稠密模型 vs MoE:省钱还是烧钱?
MoE(Mixture of Experts)这两年特别火。说白了,就是把一个大模型拆成多个「专家」,每次推理只激活其中一部分。听起来很省对吧?
嗯,这里要注意:MoE 的参数量看着大,但实际计算量确实小。比如 Mixtral 8x7B,总参数量 46B,但每次推理只激活两个专家,实际计算量相当于 12B 左右。
但成本不是这么简单算的。我踩过一个坑:
我曾经在部署 Mixtral 8x7B 时,以为它只需要 12B 的显存。结果发现——所有专家的参数都得加载到显存里!46B 的参数,FP16 下要 92 GB,4 张 A100 才勉强放下。虽然计算量小了,但显存成本没省多少。
来看对比:
| 模型 | 总参数量 | 激活参数量 | FP16 显存 | 推理延迟 | 适用场景 |
|---|---|---|---|---|---|
| Llama 2 13B(稠密) | 13B | 13B | ~26 GB | ~60 ms | 通用任务 |
| Mixtral 8x7B(MoE) | 46B | ~12B | ~92 GB | ~70 ms | 高吞吐、多任务 |
| Llama 2 70B(稠密) | 70B | 70B | ~140 GB | ~300 ms | 复杂推理 |
你看,MoE 的延迟确实接近 13B,但显存成本接近 70B。所以:
- 如果你追求低延迟,MoE 很香。计算量小,响应快。
- 如果你追求低显存,MoE 不香。参数全加载,卡数少不了。
- 如果你做批量推理,MoE 的吞吐优势会放大。因为计算量小,单卡能塞更多请求。
我的经验:MoE 适合高并发、低延迟的场景,比如在线对话系统。稠密模型适合离线批量处理或对显存敏感的场景。选型时别只看参数量,要看「激活参数量 + 总参数量」两个指标。
量化精度:FP16、INT8、INT4 的成本博弈
量化,说白了就是给模型「减肥」。FP16 是 16 位浮点,INT8 是 8 位整数,INT4 是 4 位整数。位数越少,模型越小,推理越快,但精度可能下降。
我直接给结论:
| 精度 | 显存节省 | 推理加速 | 精度损失 | 我的推荐 |
|---|---|---|---|---|
| FP16 | 基准 | 基准 | 无 | 开发调试、精度敏感场景 |
| INT8 | ~50% | ~1.5x - 2x | 几乎无感 | 生产环境首选 |
| INT4 | ~75% | ~2x - 3x | 部分任务有感知 | 显存极度紧张时使用 |
为什么会这样?因为 INT8 量化技术已经很成熟了。我用过 GPTQ、AWQ、GGUF 这些方案,INT8 下 7B 模型从 14 GB 降到 7 GB,单卡就能跑,延迟从 30 ms 降到 18 ms 左右。
我个人习惯:生产环境一律先用 INT8。如果业务方反馈效果有问题,再切回 FP16 做对比。90% 的情况下,INT8 的效果和 FP16 没区别。
INT4 呢?嗯,这里要小心。我踩过坑:
我曾经在代码生成任务上用 INT4 量化后的 13B 模型,结果生成的代码逻辑错误率从 5% 飙升到 15%。INT4 对数值精度敏感的任务(数学、代码、逻辑推理)影响较大,但对文本生成、对话类任务影响较小。
所以我的建议是:
- FP16:基准线,用于对比和调试。
- INT8:默认选择,性价比最高。
- INT4:仅当显存不够或需要极致吞吐时使用,且必须做效果验证。
一张图看懂选型逻辑
下面这张图总结了我做模型选型时的决策路径:
这张图的逻辑很简单:先看精度要求,再看延迟要求,最后组合出最优方案。你想想看,如果业务场景是智能客服,精度要求不高但延迟要快,那 INT8 + MoE + 7B 就是最佳组合。如果是代码生成,精度敏感,那就 FP16 + 稠密 + 13B 起步。
核心原则:没有最好的模型,只有最适合你场景和预算的模型。选型时把「精度 - 延迟 - 成本」三角画出来,找到你的平衡点。