运行MTP模型的llama.cpp Docker镜像
摘要
提供用于通过 llama.cpp 运行 MTP 模型的 Docker 镜像,包括量化比较和使用说明。
这是对上篇文章的跟进:https://www.reddit.com/r/LocalLLaMA/comments/1t5ageq/
MTP拉取请求和llama.cpp主分支有了许多改进,例如图像支持以及各种错误修复。我最近为本地机器做了新构建,但保持指南更新是个问题,所以我构建了Docker镜像以便更轻松地运行它们。如果你已经在使用llama.cpp的Docker镜像,那么切换到这些镜像会很简单,直到官方版本支持MTP。以下是可选的版本:
```
havenoammo/llama:cuda13-server
havenoammo/llama:cuda12-server
havenoammo/llama:vulkan-server
havenoammo/llama:intel-server
havenoammo/llama:rocm-server
```
我还没能全部测试,因为目前只运行cuda13版本。欢迎测试并看看是否适用于你的硬件。
另外,Unsloth为Qwen 3.6发布了MTP模型,这让我之前嫁接的模型过时了。如果你错过了,可以在这里找到它们:
* https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF
* https://huggingface.co/unsloth/Qwen3.6-35B-A3B-MTP-GGUF
我相信他们对部分MTP层进行了量化。我则保持了Q8量化以提高预测精度。MTP层使用更高的量化可能使它们更精确,从而以更多VRAM消耗为代价带来更高速度。我会暂时保留我的版本,直到完成一些基准测试并确认它们完全过时。
*快速编辑:* 他们确实对MTP层使用了较低的量化级别。以下是对比:
| 张量 | havenoammo (UD XL + Q8_0 MTP) | Unsloth (UD XL) |
|---|---|---|
| `blk.64.attn_k.weight` | **Q8_0** | Q3_K |
| `blk.64.attn_k_norm.weight` | F32 | F32 |
| `blk.64.attn_norm.weight` | F32 | F32 |
| `blk.64.attn_output.weight` | **Q8_0** | Q4_K |
| `blk.64.attn_q.weight` | **Q8_0** | Q3_K |
| `blk.64.attn_q_norm.weight` | F32 | F32 |
| `blk.64.attn_v.weight` | **Q8_0** | Q5_K |
| `blk.64.ffn_down.weight` | **Q8_0** | Q4_K |
| `blk.64.ffn_gate.weight` | **Q8_0** | Q3_K |
| `blk.64.ffn_up.weight` | **Q8_0** | Q3_K |
| `blk.64.nextn.eh_proj.weight` | Q8_0 | Q8_0 |
| `blk.64.nextn.enorm.weight` | F32 | F32 |
| `blk.64.nextn.hnorm.weight` | F32 | F32 |
| `blk.64.nextn.shared_head_norm.weight` | F32 | F32 |
| `blk.64.post_attention_norm.weight` | F32 | F32 |
| MTP层大小 | 430.41 MB | 222.33 MB |
我会做一些基准测试,看看量化是否对多令牌预测的精度/速度有影响。在此之前,如果你有足够的VRAM,可以随意测试我的版本。
* https://huggingface.co/havenoammo/Qwen3.6-35B-A3B-MTP-GGUF
* https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF
最后,以下是我使用它的方式:
```bash
docker run --gpus all --rm \
-p 8080:8080 \
-v ./models:/models \
havenoammo/llama:cuda13-server \
-m /models/Qwen3.6-27B-MTP-UD-Q8_K_XL.gguf \
--port 8080 \
--host 0.0.0.0 \
-n -1 \
--parallel 1 \
--ctx-size 262144 \
--fit-target 844 \
--mmap \
-ngl -1 \
--flash-attn on \
--metrics \
--temp 1.0 \
--min-p 0.0 \
--top-p 0.95 \
--top-k 20 \
--jinja \
--chat-template-kwargs '{"preserve_thinking":true}' \
--ubatch-size 512 \
--batch-size 2048 \
--cache-type-k q8_0 \
--cache-type-v q8_0 \
--spec-type mtp \
--spec-draft-n-max 3
```
请根据需要调整。对MTP来说最重要的参数是`--spec-type mtp`和`--spec-draft-n-max 3`。
相似文章
llama.cpp 就是 LLM 界的 Linux
文章把 llama.cpp 比作 Linux,认为这款开源库已成为运行大语言模型的基础底座。
LLaMA.cpp的多令牌预测(MTP)——Gemma 4速度提升40%
llama.cpp中新的多令牌预测(MTP)实现为Gemma 4模型带来了40%的速度提升,已在MacBook Pro M5Max上测试。文章提供了量化GGUF模型和补丁源代码的链接。
llama.cpp 的 auto fit 远比我想象的好用
llama.cpp 新增的 --fit 标志让超大模型也能在显存不足时高速运行,轻松突破显存限制,速度依旧惊人。
@ggerganov:llama-server -hf ggml-org/Qwen3.6-27B-GGUF --spec-default
Georgi Gerganov 分享了一条一行命令,用 llama-server 以默认投机解码设置启动量化版 27B Qwen3.6 模型。
@mitsuhiko: 如果没有 128GB 内存的 Mac,我还有一个 pi-llamacpp 扩展,仅配置了 4 个版本的 Qwen 3.6。https://...
mitsuhiko 发布了一个 pi-llamacpp 扩展,用于自动化设置和管理基于 llama.cpp 的本地 LLM 推理,特别支持 Qwen 3.6 模型的多种量化版本。