在上篇《P2000 5G 老显卡跑 35B 大模型:从“鸡肋”到“真香”》里,我分享了怎么用 MoE 模型让这张仅 5GB 显存的 Quadro P2000 起死回生。当时最高跑到 11.88 t/s,我已经觉得很魔幻了。
但用过几天后,总感觉还有余地。我们在P104上又提升了50%,那现在就该拿着同样的方法,回到 P2000 上,实打实地把隐藏的性能一口一口啃出来。
这篇文章没有高深理论,只有一连串的 llama-bench 命令、跳动的数字,以及数字背后那个越来越清晰的“显存天花板”。
一、调优三板斧,快速热一下身
经过不断的学习,我们已经知道 MoE 模型每一层都有轻巧的“共享注意力”和臃肿的“MoE 专家”两个模块。调优的核心就是:把每层必跑的注意力塞进 GPU,把占地方的专家选择性挪到 CPU 内存。
落实到参数,就三个关键旋钮:
- -ngl:控制多少层整体进 GPU。越大越快,但显存也越紧张。
- --n-cpu-moe:精准卸载前 N 层的 MoE 专家,只挪专家,不挪注意力。这就是“体内手术刀”。
- -ctk / -ctv:KV 缓存量化。我已经固定在 q8_0,省一半缓存,质量几乎无损。
好,工具明白了,开干。
二、第一轮——基线扫描,红线在哪?
先把 -ngl 设在 6、8、12 三档,配合 --n-cpu-moe 从 25 到 36,用 llama-bench 各跑一遍。主要看两个指标:pp512(处理 512 token 提示的速度)和 tg128(生成 128 token 的速度,体感流畅度的命门)。
第一批数据里,有一组让我后背一凉:
ngl=12, n-cpu-moe=25, t=8: pp512 = 21.16 t/s ngl=12, n-cpu-moe=30, t=8: pp512 = 180–200 t/s(正常)25 那组,提示处理速度从正常的 200 左右断崖式跌到 21。没有 OOM 报错,没有崩溃,就是数字直接跪了。这就是 P2000 的“血压计”——当显存被塞满,GPU 开始用系统内存做交换,性能血崩。
第一条红线划出来了:--n-cpu-moe绝对不能小于 30。在 30 到 36 这个区间,tg128 也找到了小惊喜:ngl=12, n-cpu-moe=34, t=8 能跑到 12.78 t/s,比上篇的最好成绩又翘了一点尾巴。
三、第二至四轮——逐级压榨,撞上天花板
既然 12 层稳住了,那就往上加。第二轮把 -ngl 提到 16,重点测试 n-cpu-moe 在 30–36 之间。
惊喜来得很快:
ngl=16, n-cpu-moe=30, t=8: pp512=200.73, tg128=14.52 t/s14.52 t/s,相比第一轮的最佳 12.78 又跳升 13%。可一旦尝试 n-cpu-moe=24,pp512 立刻跌到 18.31,红线再次应验。此时显存已经极度饱和,只是因为测试序列短才勉强没崩。
第三轮,胆子再大一点,直接 -ngl 999(能塞进 GPU 的层全进)。但必须配合足够大的 --n-cpu-moe,否则专家会把 5GB 挤爆。
测试结果很干脆:
ngl=999, n-cpu-moe=36, t=8: pp512=189.95, tg128=18.28 t/s ngl=999, n-cpu-moe=32, t=8: pp512=200.29, tg128=18.06 t/s ngl=999, n-cpu-moe=30, t=8: pp512=19.78, tg128=10.63(血崩)18.28 t/s,这个数字让 P2000 彻底翻身。但 n-cpu-moe=30 那组恐怖的滑坡再次告诉我们——5GB 显存连 30 层专家都兜不住,必须卸够 36 层。这也解释了为何 n-cpu-moe=32 性能与 36 持平:多留在 GPU 的那 4 层专家,通道已被内存交换卡死,加量不加价。
第四轮,我试探性地把 n-cpu-moe 降到更低的 24……程序直接退出。不是 OOM,是连报错的机会都没有就闪退了。P2000 的绝对底线,就这么硬邦邦地立在 36 上。
四、从探险中捡到的三个“锦囊”
折腾完这几轮,有些经验已经刻进肌肉记忆里,以后调任何老卡都能直接用。
1. pp512 暴跌是 OOM 的“烟警报”
别等红色错误。一旦 pp512 从几百突然掉到几十甚至更低,就是显存在做内存交换。这个信号比崩溃早一步,足够你及时止损。
2. 二分法找 --n-cpu-moe 甜点最高效
先找一个肯定能跑的保守值(比如 36),再找一个必崩的激进值(比如 24),在中间来回二分,两三轮就能锁定最优解。千万别从头开始线性扫描。
3. 线程数不是越多越好,CPU 内存带宽是隐形瓶颈
所有测试中,-t 8 始终优于 -t 12。原因很简单:MoE 卸载模式下,CPU 要频繁把专家权重从内存往 GPU 喂,内存带宽是固定的,太多线程反而堵车。记住,老平台从 8 线程开始试。
五、P2000 的最终答案
在这张 5GB 的 Quadro P2000 上,跑 Qwen3.6-35B-A3B 以及略小一点的Qwen3.6-28B-A3B 的终极配置是:
-ngl 999 --n-cpu-moe 36 -t 8 -ctk q8_0 -ctv q8_0 -c 65536性能分别稳定在18.52 tps和18.28 pps,提示处理分别是近180t/s和190 t/s。从最初的 12 到如今的 18,每一步都有数据可查,每一次调参都是向物理定律的一次试探。