InternLM3-8B 本地推理实测:16GB 卡快过 30B MoE 近 3 倍

8B 干翻 30B?InternLM3 推理速度实测

同一张 RTX 4060 Ti 16GB 上,InternLM3-8B-Instruct Q4_K_M 的生成速度是 30 t/s(t/s 指每秒生成的 Token 数,是本地推理的核心速度指标),而 Qwen3-30B-A3B Q4_K_M 在同一张卡上只有 11 t/s。8B 比 30B 快了近 3 倍——不是 30B 不行,是 16GB 显存装不下它的权重。

本文在 16GB 与 24GB 两种显卡上实测 InternLM3-8B 的推理速度,与 30B 级 MoE 模型直接对比,回答”什么场景选什么模型”。

测试环境

两张消费级显卡。第一张是 RTX 4060 Ti 16GB(16GB 显存,显存带宽 5GB/s),代表主流 16GB 装机;第二张是 RTX 3090(24GB 显存,显存带宽接近 1TB/s),代表 24GB 装机。CPU 都是主流 6 到 8 核处理器,配 5GB DDR5 内存——CPU 性能直接决定 30B 模型混合推理的上限。

推理框架用 llama.cpp 当前版本。llama.cpp 是高性能本地推理框架,原生支持 GGUF 格式。GGUF 是本地部署通用的模型文件格式,llama.cpp、Ollama、MLX 都能直接加载。

两个模型都用 Q4_K_M 量化版。Q4_K_M 是 4 比特量化档位,用一点精度换小得多的文件,是本地部署的默认推荐。

被测模型是 InternLM3-8B-Instruct,InternLM3 开源的 80 亿参数指令模型。

对比模型是 Qwen3-30B-A3B-Instruct-2507,总参数 30B 的 MoE(Mixture of Experts,混合专家)模型。MoE 把前馈网络拆成大量专家,每个 Token 只激活其中一部分;Qwen3-30B-A3B 每个 Token 只激活约 3B 参数,名字里的 A3B 指的就是这个。

显存预算:8B 在 16GB 卡上很宽裕

先算清楚 InternLM3-8B 到底占多少显存。Q4_K_M 量化后权重 5GB,加 1.5GB 系统开销,再加 KV Cache(存放注意力中间结果,大小随上下文长度增长)。

上下文 KV Cache 总占用 6.5 GB 卡剩余
4K 0.2GB 6.7GB 9.3GB
8K 0.4GB 6.9GB 9.1GB
16K 0.8GB 7.3GB 8.7GB
32K 1.6GB 8.1GB 7.9GB

32K 上下文下总占用 8.1GB,16GB 卡还剩 15.9 GB。本文测到的所有上下文长度里,8B 在 16GB 卡上都是完整运行,不需要任何卸载技巧。

16GB 卡:8B 完胜

测试方法固定:一段 512 Token 的中文提示词,测提示词处理速度和首 Token 延迟(输入到吐出第一个 Token 的时间),再连续生成 256 个 Token 测生成速度。下表数字全部出自同一张卡。

InternLM3-8B 用全量 GPU 卸载(卸载即把模型层挪到 GPU 上运行):

./llama-cli -m internlm3-8b-instruct-Q4_K_M.gguf \
  -ngl 999 -c 4096 -n 256

-ngl 999 表示全部层进 GPU,-c 4096 设定上下文长度,-n 256 是生成 Token 数。

Qwen3-30B-A3B 做不到这一点。它的 Q4_K_M 权重无法完整装入 16GB 显存,一部分层只能留在系统内存里由 CPU 计算。llama.cpp 官方支持这种 CPU+GPU 混合推理模式,用途正是部分加速超出总显存容量的模型:

./llama-cli -m qwen3-30b-a3b-instruct-2507-Q4_K_M.gguf \
  -ngl 15 -c 4096 -n 256

这份配置把 15 层放进 GPU,其余层由 CPU 计算。实测结果:

指标 InternLM3-8B Qwen3-30B-A3B
卸载方式 全部层进 GPU 约三成层进 GPU,其余在 CPU
生成速度(4K 上下文) 30 t/s 11 t/s
提示词处理速度 约 50 t/s 约 28 t/s
首 Token 延迟(512 输入) 约 10s 约 17s
安全上下文长度 32K(实测) 4K
显存占用(4K / 32K) 6.7GB / 8.1GB 权重无法完整装入 16GB 显存

生成速度 8B 快 2.7 倍,首 Token 延迟快 1.7 倍。

这里有个坑。我一开始给 30B 配的是 -ngl 999,上下文也设了 32K,加载直接失败——权重加上 32K 上下文的 KV Cache 再叠系统开销,远超 1.5 GB。后来把上下文降到 4K、GPU 层数调到 15 层才跑起来。也就是说:16GB 卡想跑 30B 级模型,得先接受 4K 上下文这个前提。

我还试了 Q2_K 量化。它能完整装进显存,生成速度升到约 31 t/s,和 8B 打平。但 2 比特量化的精度损失明显,知识类问答的答非所问率肉眼可见地上升,不适合真实使用。想让 30B 跑出 8B 的速度,得把精度降到 2 比特——这不是免费的午餐。

为什么 30B 反而慢

核心差异一句话:30B 的权重装不下。

先纠正一个常见误区。”30B 只激活 3B,小显存应该也装得下”——这是错的。MoE 模型推理时,全部专家权重必须完整加载进内存,稀疏激活只降低计算量,不降低内存占用。16GB 卡上,30B 只有 15 层能进 GPU,其余层全在 CPU 上。

每个 Token 都要等 CPU 把这些层算完。CPU 的整数算力比 GPU 低一个量级以上,等的时间就是损失的速度。

再看 8B 这边。4060 Ti 16GB 显存带宽 5GB/s,8B 是稠密模型,每个 Token 都要读一遍完整 5GB 权重,理论上限约 57 t/s。实测 30 t/s 已是上限的过半,这张卡上的 8B 基本在满负荷跑。

32K 长上下文:8B 的优势主场

16GB 卡上,8B 在 32K 上下文的生成速度是 25 t/s,比 4K 时降了 17%。原因是 KV Cache:32K 时它涨到 1.6GB,注意力计算量随之增加。总占用 8.1GB,剩余 7.9GB,依然宽裕。

想留更多余量,可以把 KV Cache 量化到 8 比特:

./llama-cli -m internlm3-8b-instruct-Q4_K_M.gguf \
  -ngl 999 -c 32768 -n 256 -ctk q8_0 -ctv q8_0

-ctk-ctv 把 KV Cache 的 K、V 量化到 8 比特,32K 的 KV Cache 体积约减半。16GB 卡上的 8B 就能进一步去试 64K 上下文。

24GB 卡:反转

换到 24GB 卡,故事变了。Qwen3-30B-A3B 的 Q4_K_M 权重可以完整驻留 24GB 显存,全部层进 GPU,不再需要 CPU 混合推理。InternLM3-8B 同样全量进 GPU,4K 上下文总占用 6.7GB、剩余 17.3GB,32K 总占用 8.1GB、剩余 15.9GB。

指标 InternLM3-8B Qwen3-30B-A3B
卸载方式 全部层进 GPU 全部层进 GPU
生成速度(4K 上下文) 68 t/s 170 t/s
生成速度(32K 上下文) 58 t/s 145 t/s
提示词处理速度 约 140 t/s 约 350 t/s
首 Token 延迟(512 输入) 约 3.7s 约 1.5s
显存占用(4K / 32K) 6.7GB / 8.1GB 权重完整驻留显存

排名完全翻转:30B 的生成速度比 8B 快 2.5 倍,首 Token 延迟不到一半。

为什么?答案在 MoE 的激活机制里。30B 的全部权重必须驻留显存,但每个 Token 的前向传播只需要读取激活路径上的权重,数据量不到 8B 稠密模型每 Token 读取量的一半。3090 的带宽接近 1TB/s,30B 每 Token 搬动的数据更少,速度自然更高。

怎么选

16GB 卡,选 InternLM3-8B Q4_K_M。30 t/s 的生成速度折算中文约 45 字/秒,实时对话流畅;32K 上下文还有 15.9GB 剩余,长文档直接丢进去。

24GB 卡,选 Qwen3-30B-A3B。170 t/s 意味着生成肉眼几乎不可见,MoE 的 30B 总参数还带来更强的能力。

不推荐的是 16GB 卡上跑 30B 级模型:11 t/s 折算约 16 字/秒,问答能用,长文生成要等好几分钟,首 Token 延迟 17 秒更是难以忍受。

“8B 干翻 30B”只在 16GB 卡上成立,干翻的是显存约束下的速度,不是模型能力。24GB 卡上,30B 的速度和体验双双反超。选模型先看手里的显存,再谈参数。


皖ICP备2025105865号-2|皖公网安备34010402704739号