记一次失败的本地部署 LLM MTP 模型的过程

文章目录

(一)结论

先说结论:如果显卡没有24GB+的显存,确实没必要折腾。

显存容量决定体验上限,MTP不是"免费加速",而是用更多显存换 decode 加速。

(二)前言

最开始是偶然看到DFlash技术(Block Diffusion for Flash Speculative Decoding)。

感觉速度提升巨大,但是不太成熟,也不支持llama.cpp部署,Windows下还没有到能玩的阶段

然后就转向了它对比的对象MTP技术(Multi-token Prediction)。

在抱脸上看了一圈,发现有作者放出的支持最小模型是gemma-4-26B-A4B-it-UD-IQ4_XS

然后完全忘记了之前在本机测试过,这个模型不加Vision视觉部分,已经到了16GB显存的上限位置。

开始了一轮折腾。

(三)步骤

如果你有24GB或更多的VRAM,那么可以试一试。

(3.1)软件

原版的llama.cpp截至此刻还不支持Gemma4的MTP。

所以需要它的一个fork:🔗 ik_llama

该仓库是llama.cpp分支,拥有更优的CPU和混合GPU/CPU性能、新的SOTA量化类型、一流的Bitnet支持、通过MLA、FlashMLA、融合MoE操作和用于混合GPU/CPU推断的张量覆盖、行交错量化打包等。

代码:

bash 复制代码
> git clone https://github.com/ikawrakow/ik_llama.cpp.git

编译:

bash 复制代码
> cmake -B build -DGGML_NATIVE=ON -DGGML_CUDA=ON		#因为我是N卡,4060TI16GB
> cmake --build build --config Release --parallel		#并行编译,否则慢到怀疑人生

结果:

如果没报错,可执行文件就会出现在 XXX\ik_llama.cpp\build\bin\Release\ 目录里面。

💡:这里不讨论编译环境,简单说就是要编译器和CUDA环境,可参考llama.cpp的官方文档。

(3.2)模型

首先从抱脸或者魔搭下载原版的gemma-4-26B-A4B-it-UD-IQ4_XS.gguf模型。

然后从 🔗这里 找到gemma-4-26B-A4B-it-assistant-IQ4_XS.gguf模型。

(3.3)运行

我们运行这个ik_llama的服务:

bash 复制代码
llama-server ^
    --model gemma-4-26B-A4B-it-UD-IQ4_XS.gguf ^
    --model-draft gemma-4-26B-A4B-it-assistant-IQ4_XS.gguf ^
    --spec-type mtp ^
    --draft-max 3 ^
    --draft-p-min 0.0 ^
    -ngld 99 ^
    --n-gpu-layers 99 ^
    --ctx-size 32768 ^
    -ctk q8_0 -ctv q8_0 ^
    -b 1024 -ub 1024 ^
    --jinja ^
    --host 127.0.0.1 --port 8999

(四)测试

作者用Q8_0模型的测试结果是:

Run Throughput Acceptance
Baseline (no MTP) ~21 t/s ---
MTP --draft-max 1 ~35 t/s ~89%
MTP --draft-max 2 ~44 t/s ~83%
MTP --draft-max 3 ~49 t/s ~74%
MTP --draft-max 4 ~49 t/s ~64%

所以他推荐预测3个token的参数,因为速度最快,再高接受率就低了。

从这个结果看,生成token的速度是原版的2倍以上。

刚才的运行参数运行起来后。

当我看到共享显存都用掉8GB后,就知道这个测试没什么意义了。

(4.1)作者默认参数

总耗时:🐢3m44s,共享显存使用8GB,TTFT:<2m39s>。

(4.2)降低参数

bash 复制代码
--ctx-size 12800 ^ -ctk q4_0 -ctv q4_0 ^ -b 256 -ub 256 ^

总耗时:🐢3m25s,共享显存使用2.5GB,TTFT<2m37s>。

(4.3)继续降低参数

bash 复制代码
--ctx-size 5120 ^ -ctk q4_0 -ctv q4_0 ^ -b 128 -ub 128 ^

共享显存使用1.3GB......

随后报错了,server程序在好像要输出token的时候,退出了。

(4.4)原版

用原版llama.cpp跑gemma-4-26B-A4B-it-UD-IQ4_XS.gguf模型,显存占用15GB+

总耗时:🐢1m34s

用原版llama.cpp跑gemma-4-26B-A4B-it-UD-IQ2_M.gguf模型,显存占用13GB左右。

总耗时:🐢1m03s

(五)再次结论

从上面自己的测试可以看出,对我完全没有用。

慢的原因是显卡自己的显存用完了。用了所谓共享显存(就是系统内存走PCIE总线的速度)。

这种情况下,测试什么都没有意义了,俗称显存爆了。

  1. 如果显卡没有24GB+的显存,确实没必要折腾。
  2. 显存还需要计算其它开销,例子里没有开vision部分,无法图像识别描述。
  3. 推测MTP技术对于RAG场景提升很小,因为RAG是大输入(召回信息+提示词),小输出(回答)。
  4. 谁能赠我一张24GB+显存的显卡?
相关推荐
cv魔法师1 小时前
Linux构建编译llama.cpp
llama
冬奇Lab3 小时前
Agent 系列(15):Agent 记忆系统进阶——短期、长期、压缩,三层记忆架构
人工智能·llm·agent
Esaka_Forever4 小时前
Agent = LLM + Tools + Knowledge + Memory
llm
星马梦缘4 小时前
MCP 模型上下文协议、Agent Skills 智能体技能、Harness操作系统 课程内容
人工智能·大模型·llm·agent·智能体·mcp·skills
lhxcc_fly14 小时前
6.3.1RAG--存储(嵌入向量)
langchain·llm·embedding
心之伊始14 小时前
Java 后端接入大模型:从 Token、并发到推理成本的完整估算方法
java·spring boot·性能优化·大模型·llm
装不满的克莱因瓶15 小时前
学习 Agent 基础概念及不同 Agent 的适用场景
人工智能·ai·大模型·llm·智能体
谢白羽21 小时前
SimpleMem:长期记忆不是存得更多,而是让每个 token 更有信息密度
大模型·llm·agent·agent memory
冬奇Lab1 天前
Agent 系列(14):Agent 可观测性——追踪每一步决策,让黑盒变透明
人工智能·llm·agent
JouYY1 天前
如何为基于 WebSocket 的 AI Agent 构建自动化测评系统
llm·agent·ai编程