最近 Qwen3.6 和 Unsloth 的组合很值得折腾。原因不复杂Qwen3.6 官方模型卡里已经写明MTP: trained with multi-steps也就是模型训练阶段就带了 Multi-Token Prediction 能力。Unsloth 又进一步放出了保留 MTP head 的 GGUF 量化版本。于是本地推理不再只是“量化后勉强跑起来”而是可以尝试用 MTP 做 speculative decoding让模型一次先猜多个 token再由主模型验证。如果命中率高解码就会明显快起来。这篇文章不只讲概念而是把今天能落地的路线完整拆一遍• 怎么选 Qwen3.6 的 MTP-GGUF 模型• 怎么用 llama.cpp 的 MTP 实验分支跑起来• 怎么判断 MTP 是否真的生效• 怎么做一套自己的蒸馏数据• 怎么用 Unsloth / QLoRA 微调• 最后怎么导出到 GGUF 或 vLLM。先说边界llama.cpp 的 MTP 支持目前仍在 PR/实验分支阶段不是主线稳定功能命令参数可能随分支更新。本文会给可执行路线也会把坑写清楚。MTP 到底快在哪里MTP 工作机制普通自回归模型生成文本时是一个 token 一个 token 往前走第 1 步预测 token_1第 2 步预测 token_2第 3 步预测 token_3...MTP 的想法是不要每一步只看一个 token。模型内部的 MTP head 可以先给出几个未来 token 的草稿比如一次猜 2–3 个然后主模型验证这些草稿是否成立。如果草稿被接受就相当于少走了几轮串行 decode。可以把它理解成MTP head我猜后面是 A、B、C主模型A、B 可以C 不行结果一次前进 2 个 token再从 C 的位置重新正常生成这也是为什么 MTP 更适合“输出很长”的场景比如• 写代码• 写长文• 多轮聊天• 本地单用户助手• prompt 不太长但生成很多 token 的任务。但它不是万能加速器。如果你的任务主要慢在超长上下文 prefill比如 RAG 一次塞几十万 token再只生成几百 tokenMTP 的收益就会下降。先选模型27B 还是 35B-A3B这次重点看两个模型unsloth/Qwen3.6-27B-MTP-GGUFunsloth/Qwen3.6-35B-A3B-MTP-GGUFQwen3.6-27B这是 27B dense 模型结构更直接。Unsloth 模型卡里列出的常见量化体积大致是量化体积UD-IQ2_XXS9.57 GBQ3_K_M13.8 GBQ4_016.1 GBQ4_K_M17.1 GBUD-Q4_K_XL17.9 GBQ5_K_M19.8 GBQ6_K22.9 GBQ8_029 GB如果你是第一次尝试建议从UD-Q4_K_XL或Q4_K_M开始。太低比特能省空间但质量和速度都要自己测。Qwen3.6-35B-A3B这是 35B total / 3B activated 的 MoE 模型。官方模型卡显示它有 256 个 experts每次激活 8 routed 1 shared experts上下文原生 262K tokens。Unsloth MTP-GGUF 的常见体积量化体积UD-IQ1_M11.4 GBUD-IQ2_M11.9 GBUD-Q2_K_XL12.6 GBUD-IQ3_S14.1 GBUD-Q3_K_M17.1 GBUD-IQ4_XS18.2 GBUD-Q4_K_M22.7 GBUD-Q4_K_XL22.9 GBUD-Q5_K_M27.1 GBUD-Q6_K30 GBQ8_037.8 GB如果你想在消费级机器上尽量体验高能力模型35B-A3B 的低/中比特 GGUF 会很有吸引力。但要注意GGUF 推理能跑不代表本地微调也轻松。Qwen3.6 35B-A3B BenchmarkQwen3.6 27B Benchmark路线图不要一上来就微调部署蒸馏微调路线我建议按这个顺序来先用 MTP-GGUF 跑通本地推理。用同一个 prompt 对比 MTP 开/关确认真的加速。准备你自己的任务数据做蒸馏/清洗。用 QLoRA 做 SFT 微调。导出 LoRA、merged 16bit、GGUF 或 vLLM 服务。很多人一开始就想“我要微调 35B”。实际更好的做法是先证明你的任务值得微调再投入训练成本。本地部署llama.cpp MTP 实验分支目前 llama.cpp 的 MTP 支持来自 PR• PRhttps://github.com/ggml-org/llama.cpp/pull/22673• 分支https://github.com/am17an/llama.cpp/tree/mtp-clean这个 PR 还在 Open 状态所以本文命令按当前模型卡和 PR 讨论整理。后续如果参数改名以 PR 最新说明为准。4.1 Linux NVIDIA 编译apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -ygit clone -b mtp-clean https://github.com/am17an/llama.cpp.gitcmake llama.cpp -B llama.cpp/build \ -DBUILD_SHARED_LIBSOFF \ -DGGML_CUDAONcmake --build llama.cpp/build \ --config Release \ -j \ --clean-first \ --target llama-cli llama-servercp llama.cpp/build/bin/llama-* llama.cpp如果你是 macOS / CPU / Metal 路线Unsloth 模型卡提示把-DGGML_CUDAON改成-DGGML_CUDAOFF。不过 Metal 构建细节可能随 llama.cpp 版本变化最好同时看当前分支的 build 文档。4.2 跑 Qwen3.6-27B-MTP-GGUFexport LLAMA_CACHEunsloth/Qwen3.6-27B-MTP-GGUF./llama.cpp/llama-server \ -hf unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL \ -ngl 99 \ -c 8192 \ -fa on \ -np 1 \ --spec-type mtp \ --spec-draft-n-max 2启动后服务默认提供 OpenAI-compatible API。你可以用浏览器访问 WebUI或者用 OpenAI SDK 调用。4.3 跑 Qwen3.6-35B-A3B-MTP-GGUFexport LLAMA_CACHEunsloth/Qwen3.6-35B-A3B-MTP-GGUF./llama.cpp/llama-server \ -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL \ -ngl 99 \ -c 8192 \ -fa on \ -np 1 \ --spec-type mtp \ --spec-draft-n-max 24.4 如果mtp参数报错PR 讨论里已经出现过参数变化有用户遇到unknown speculative type: mtp随后提示改成--spec-type draft-mtp所以如果你当前分支报错可以试./llama.cpp/llama-server \ -hf unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL \ -ngl 99 \ -c 8192 \ -fa on \ -np 1 \ --spec-type draft-mtp \ --spec-draft-n-max 2这个现象本身也说明MTP 支持仍在快速迭代不要把当前命令当成长期稳定接口。怎么判断 MTP 真的生效不要只看“感觉变快”。至少看三件事。5.1 看启动参数确认 server 命令里有--spec-type mtp# 或者新分支里的--spec-type draft-mtp以及--spec-draft-n-max 2--spec-draft-n-max控制一次最多草稿几个 token。不是越大越好draft 越长接受率可能越低额外开销也可能上升。模型卡示例常用 2PR 讨论里很多用户测 2、3、4、7最佳点跟硬件和任务有关。5.2 看日志里的 acceptance rate正常情况下你应该能在日志里看到类似字段draft acceptance rate 0.79728statistics mtp: #calls..., #gen drafts..., #acc drafts...acceptance rate 越高MTP 越有机会加速。但它不是唯一指标最终还是看 decode tok/s 和 total time。5.3 同 prompt 对比开关用同一个 prompt跑两次• 第一次开启 MTP• 第二次去掉--spec-type ...• 采样参数保持一致• 记录 prompt eval tok/s、decode tok/s、总耗时。可以直接用本项目里的模板assets/benchmark_template.csv公众号参考文章和 PR 里有一个 RTX 5090 的片段Qwen3.6-27B Q4_0同一个 “create a flappy bird clone” promptMTP 开启后 decode 从 63.72 tok/s 到 105.47 tok/sdraft acceptance rate 约 79.7%。这个数字很漂亮但不要直接照搬成你的机器结果。不同显卡、后端、量化、上下文长度、prompt 类型都会影响最终速度。OpenAI-compatible API 调用启动 llama-server 后可以用 OpenAI SDK 测pip install -U openaiexport OPENAI_BASE_URLhttp://localhost:8080/v1export OPENAI_API_KEYEMPTYPython 示例from openai import OpenAIclient OpenAI()response client.chat.completions.create( modelQwen3.6-MTP-GGUF, messages[ {role: user, content: 写一个最小可运行的贪吃蛇 HTML 游戏。}, ], temperature0.6, top_p0.95, max_tokens4096,)print(response.choices[0].message.content)如果你用的是 Qwen 官方推荐参数可以参考• thinking generaltemperature1.0, top_p0.95, top_k20, presence_penalty1.5• precise codingtemperature0.6, top_p0.95, top_k20, presence_penalty0.0• non-thinking generaltemperature0.7, top_p0.8, top_k20, presence_penalty1.5Qwen3.6 默认会 thinking。官方模型卡也提示Qwen3.6 不再使用 Qwen3 那种/think、/nothink软开关而是通过 API 参数控制。vLLM / SGLang更适合多卡服务如果你不是本地单机 GGUF而是多卡服务器部署Qwen 官方模型卡给了 vLLM 和 SGLang 的 MTP 命令。7.1 vLLM MTPuv pip install vllm --torch-backendautovllm serve Qwen/Qwen3.6-35B-A3B \ --port 8000 \ --tensor-parallel-size 8 \ --max-model-len 262144 \ --reasoning-parser qwen3 \ --speculative-config {method:qwen3_next_mtp,num_speculative_tokens:2}如果你只做文本想省掉 vision encoder 和多模态 profiling可以加--language-model-only7.2 SGLang MTPuv pip install sglang[all]python -m sglang.launch_server \ --model-path Qwen/Qwen3.6-35B-A3B \ --port 8000 \ --tp-size 8 \ --mem-fraction-static 0.8 \ --context-length 262144 \ --reasoning-parser qwen3 \ --speculative-algo NEXTN \ --speculative-num-steps 3 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 4这条路线适合生产服务和多用户吞吐本地消费级显卡用户还是先从 GGUF llama.cpp 开始更现实。Unsloth Studio如果你想少折腾环境Qwen3.6 in Unsloth StudioUnsloth 官方已经写明 Qwen3.6 可以在 Unsloth Studio 中运行和微调。Studio 的价值是• 本地 Web UI• 可以跑模型• 可以准备数据• 可以训练• 更适合先验证工作流。macOS / Linux / WSL 安装curl -fsSL https://unsloth.ai/install.sh | shWindows PowerShellirm https://unsloth.ai/install.ps1 | iex启动unsloth studio -H 0.0.0.0 -p 8888Dockerdocker run -d \ -e JUPYTER_PASSWORDmypassword \ -p 8888:8888 \ -p 8000:8000 \ -p 2222:22 \ -v $(pwd)/work:/workspace/work \ --gpus all \ unsloth/unsloth如果你不想从第一天就处理 CUDA、PyTorch、FlashAttention、依赖版本Studio 会更友好。蒸馏先把数据做对再谈训练这里的“蒸馏”不要理解成复制某个闭源模型的能力。更实用的定义是用一个更强或更稳定的 teacher为你有权使用的任务数据生成更规范、更一致的答案再经过清洗和抽检变成 Qwen3.6 的 SFT 数据。举个例子你想把 Qwen3.6 微调成“本地部署助手”。那就准备这些任务• llama.cpp 报错排查• vLLM 启动参数解释• GGUF 量化选择• GPU 显存估算• benchmark 日志解读• ChatML 数据格式转换• LoRA 微调排错。9.1 数据格式用 ChatML JSONL每一行一个样本{messages:[{role:system,content:你是一个严谨的本地大模型部署助手。},{role:user,content:如何判断 Qwen3.6 MTP 是否真的开启},{role:assistant,content:检查启动参数是否包含 --spec-type mtp 或 draft-mtp并观察日志中是否出现 draft acceptance rate、statistics mtp 等字段。然后用同一 prompt 对比 MTP 开关下的 decode tok/s 和总耗时。}]}9.2 Teacher 生成时加约束可以用这个 system prompt你是一个严谨的 AI 工程资料整理助手。请根据给定问题生成可用于监督微调的高质量答案。要求1. 不编造不存在的命令或参数。2. 如果某功能仍是实验分支必须明确标注。3. 命令需要说明适用环境。4. 答案要可操作不要空泛。5. 输出中文。9.3 清洗规则生成后至少做这些过滤• 删除空答案• 删除明显拒答• 删除和问题无关的样本• 删除命令不闭合、JSON 不合法的样本• 删除重复样本• 每个任务类型抽样人工检查。9.4 一个最小蒸馏脚本思路下面是伪代码级流程你可以接本地 llama-server、vLLM 或云端 OpenAI-compatible APIimport jsonfrom openai import OpenAIclient OpenAI( base_urlhttp://localhost:8080/v1, api_keyEMPTY,)questions [ 如何选择 Qwen3.6-27B-MTP-GGUF 的量化版本, llama.cpp MTP 的 --spec-draft-n-max 应该设置多少, 为什么 MTP 对 RAG 长上下文不一定加速,]system 你是一个严谨的本地大模型部署助手。答案必须可操作不要编造。with open(distill_qwen36_mtp.jsonl, w, encodingutf-8) as f: for question in questions: response client.chat.completions.create( modelteacher-model, messages[ {role: system, content: system}, {role: user, content: question}, ], temperature0.3, top_p0.9, ) answer response.choices[0].message.content row { messages: [ {role: system, content: system}, {role: user, content: question}, {role: assistant, content: answer}, ] } f.write(json.dumps(row, ensure_asciiFalse) \n)真正训练前不要直接把 teacher 输出喂进去。先抽检尤其是命令和版本号。微调优先 QLoRA不要上来全量Unsloth 文档里很明确入门优先 LoRA/QLoRA。对 Qwen3.6 这类大模型来说full fine-tuning 成本非常高本地消费级机器更现实的是• 本地 GGUF 跑推理• 云端或高显存机器做 QLoRA• 训练后导出 LoRA 或 GGUF• 再回本地部署。10.1 推荐超参起点参数建议r16 或 32lora_alpha16/32/64通常等于 r 或 2rlora_dropout0 起步怀疑过拟合时 0.05–0.1learning_rate2e-4 快速试正式可降到 1e-4 / 5e-5num_train_epochs1–3per_device_train_batch_size1–2gradient_accumulation_steps8–16max_seq_length2048/4096 起步长文档再加Unsloth 文档推荐 target modules 覆盖 attention MLPtarget_modules [ q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj,]10.2 训练代码骨架下面是 SFT 骨架。实际显存需求取决于模型、量化、上下文和 batch如果 27B/35B-A3B 在本地放不下就用云端 A100/H100 或先换更小 Qwen 模型验证数据。from datasets import load_datasetfrom trl import SFTTrainer, SFTConfigfrom unsloth import FastLanguageModelfrom unsloth.chat_templates import get_chat_template, train_on_responses_onlymax_seq_length 4096model, tokenizer FastLanguageModel.from_pretrained( model_nameunsloth/Qwen3.6-27B, max_seq_lengthmax_seq_length, load_in_4bitTrue,)tokenizer get_chat_template( tokenizer, chat_templateqwen3,)model FastLanguageModel.get_peft_model( model, r16, target_modules[ q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj, ], lora_alpha32, lora_dropout0, biasnone, use_gradient_checkpointingunsloth, random_state3407,)dataset load_dataset(json, data_filesdistill_qwen36_mtp.jsonl, splittrain)def formatting_prompts_func(examples): texts [ tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptFalse) for messages in examples[messages] ] return {text: texts}dataset dataset.map(formatting_prompts_func, batchedTrue)trainer SFTTrainer( modelmodel, tokenizertokenizer, train_datasetdataset, dataset_text_fieldtext, max_seq_lengthmax_seq_length, argsSFTConfig( per_device_train_batch_size1, gradient_accumulation_steps16, warmup_steps10, max_steps300, learning_rate1e-4, logging_steps10, optimadamw_8bit, weight_decay0.01, lr_scheduler_typelinear, seed3407, output_diroutputs_qwen36_mtp_sft, ),)trainer train_on_responses_only( trainer, instruction_part|im_start|user\n, response_part|im_start|assistant\n,)trainer.train()这里有两个关键点训练前必须确认 chat template 和模型匹配建议只训练 assistant response不要让模型学习用户输入本身。如果chat_templateqwen3在当前 Unsloth 版本中不可用就先打印支持列表from unsloth.chat_templates import CHAT_TEMPLATESprint(CHAT_TEMPLATES.keys())然后选择最接近 Qwen ChatML 的模板或使用 tokenizer 自带apply_chat_template。保存、导出、部署训练后先保存 LoRA adaptermodel.save_pretrained(qwen36_mtp_lora)tokenizer.save_pretrained(qwen36_mtp_lora)如果你要用 vLLM 部署保存 merged 16bitmodel.save_pretrained_merged( qwen36_mtp_merged_16bit, tokenizer, save_methodmerged_16bit,)然后vllm serve ./qwen36_mtp_merged_16bit如果你要回到 llama.cpp / Ollama / LM Studio导出 GGUFmodel.save_pretrained_gguf( qwen36_mtp_finetuned_gguf, tokenizer, quantization_methodq4_k_m,)或者推到 Hugging Facemodel.push_to_hub_gguf( 你的用户名/qwen36-mtp-finetuned-gguf, tokenizer, quantization_methodq4_k_m,)导出后效果变差怎么办Unsloth 文档里反复强调最常见原因是 chat template 不一致。排查顺序训练时用的 template推理时用的 templateeos token是否多加了 BOS token是否 assistant/user 标记不一致是否把用户输入也训练进 loss 里。如果导出 GGUF 后出现乱码、无限重复、停不下来优先查这些。什么时候考虑 GRPOSFT 能解决“格式、风格、领域问答、流程化输出”。如果你的任务有明确可验证答案比如• 数学题最终答案• 代码题单元测试• JSON schema 是否通过• 命令是否符合规则• SQL 是否能执行再考虑 GRPO/RLVR。Unsloth 的 GRPO 文档建议reward/verifier 要认真设计数据量太小会不稳定通常至少准备几百行。学习率也要比 SFT 小RL 类任务可从5e-6起步。我的建议是先 SFT让模型学会你的任务格式再 GRPO让模型在可验证任务上学会更优策略。不要第一天就上 RL。已知坑点汇总坑 1MTP 支持还在实验分支llama.cpp PR #22673 仍是 Open。你今天看到的是--spec-type mtp明天可能变成draft-mtp。遇到参数报错先看 PR 最新讨论。坑 2-np 1暂时不适合Unsloth 模型卡和 PR 讨论都提到当前 MTP 路线需要单 parallel。启动报错时显式加-np 1# 或--parallel 1坑 3多模态先别和 MTP 混用当前说明里--mmproj与 MTP 暂不支持。想跑图像/视频理解先用 vLLM/SGLang 或普通路线想跑 MTP就先做纯文本。坑 4长上下文不一定更快MTP 主要加速 decode。如果你的任务是 200K prompt 200 token 输出prefill 才是大头。PR 讨论里也有用户观察到 MTP 路径 prefill 变慢。坑 5微调比推理吃资源得多GGUF 量化推理能在消费级显卡上跑不代表 27B/35B-A3B QLoRA 微调也能轻松跑。微调前先用小数据、小步数、短上下文验证流程。我的推荐实操配置如果你今天就想开始我建议入门体验• 模型unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL• 后端llama.cpp MTP 分支• context8192 或 16384• MTP--spec-draft-n-max 2• 任务代码生成、长文生成高性价比能力体验• 模型unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL• 后端llama.cpp MTP 分支• context8192 起步• 如果 OOM降到 3-bit/IQ 量化或减小 context数据蒸馏• 格式ChatML JSONL• 样本数100 条起步验证1000 更稳• teacher本地强模型或云端 API• 必做规则过滤 人工抽检微调• 方法QLoRA• rank16 起步• lr1e-4或2e-4快速验证• max_steps先 60再 300• 保存先 LoRA再 merged再 GGUF结尾这次真正值得关注的不是“快”而是链路完整了Qwen3.6 MTP 的意义不只是某张显卡上多跑了几十 tok/s。更重要的是现在这条链路开始完整Qwen3.6 官方 MTP 训练 ↓Unsloth 保留 MTP head 的 GGUF ↓llama.cpp MTP speculative decoding ↓本地 OpenAI-compatible API ↓蒸馏数据 ↓QLoRA 微调 ↓GGUF / vLLM / Studio 再部署如果你只是想尝鲜今天就跑 MTP-GGUF。如果你想做自己的本地助手先别急着微调。先收集 100 条高质量任务蒸馏成 ChatML跑一个小步数 QLoRA看看模型是不是朝你想要的方向变了。跑通这条闭环比单次 benchmark 更重要。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
给 Qwen3.6 装上 MTP:本地部署、蒸馏、微调一条龙保姆教程
发布时间:2026/6/7 7:43:19
最近 Qwen3.6 和 Unsloth 的组合很值得折腾。原因不复杂Qwen3.6 官方模型卡里已经写明MTP: trained with multi-steps也就是模型训练阶段就带了 Multi-Token Prediction 能力。Unsloth 又进一步放出了保留 MTP head 的 GGUF 量化版本。于是本地推理不再只是“量化后勉强跑起来”而是可以尝试用 MTP 做 speculative decoding让模型一次先猜多个 token再由主模型验证。如果命中率高解码就会明显快起来。这篇文章不只讲概念而是把今天能落地的路线完整拆一遍• 怎么选 Qwen3.6 的 MTP-GGUF 模型• 怎么用 llama.cpp 的 MTP 实验分支跑起来• 怎么判断 MTP 是否真的生效• 怎么做一套自己的蒸馏数据• 怎么用 Unsloth / QLoRA 微调• 最后怎么导出到 GGUF 或 vLLM。先说边界llama.cpp 的 MTP 支持目前仍在 PR/实验分支阶段不是主线稳定功能命令参数可能随分支更新。本文会给可执行路线也会把坑写清楚。MTP 到底快在哪里MTP 工作机制普通自回归模型生成文本时是一个 token 一个 token 往前走第 1 步预测 token_1第 2 步预测 token_2第 3 步预测 token_3...MTP 的想法是不要每一步只看一个 token。模型内部的 MTP head 可以先给出几个未来 token 的草稿比如一次猜 2–3 个然后主模型验证这些草稿是否成立。如果草稿被接受就相当于少走了几轮串行 decode。可以把它理解成MTP head我猜后面是 A、B、C主模型A、B 可以C 不行结果一次前进 2 个 token再从 C 的位置重新正常生成这也是为什么 MTP 更适合“输出很长”的场景比如• 写代码• 写长文• 多轮聊天• 本地单用户助手• prompt 不太长但生成很多 token 的任务。但它不是万能加速器。如果你的任务主要慢在超长上下文 prefill比如 RAG 一次塞几十万 token再只生成几百 tokenMTP 的收益就会下降。先选模型27B 还是 35B-A3B这次重点看两个模型unsloth/Qwen3.6-27B-MTP-GGUFunsloth/Qwen3.6-35B-A3B-MTP-GGUFQwen3.6-27B这是 27B dense 模型结构更直接。Unsloth 模型卡里列出的常见量化体积大致是量化体积UD-IQ2_XXS9.57 GBQ3_K_M13.8 GBQ4_016.1 GBQ4_K_M17.1 GBUD-Q4_K_XL17.9 GBQ5_K_M19.8 GBQ6_K22.9 GBQ8_029 GB如果你是第一次尝试建议从UD-Q4_K_XL或Q4_K_M开始。太低比特能省空间但质量和速度都要自己测。Qwen3.6-35B-A3B这是 35B total / 3B activated 的 MoE 模型。官方模型卡显示它有 256 个 experts每次激活 8 routed 1 shared experts上下文原生 262K tokens。Unsloth MTP-GGUF 的常见体积量化体积UD-IQ1_M11.4 GBUD-IQ2_M11.9 GBUD-Q2_K_XL12.6 GBUD-IQ3_S14.1 GBUD-Q3_K_M17.1 GBUD-IQ4_XS18.2 GBUD-Q4_K_M22.7 GBUD-Q4_K_XL22.9 GBUD-Q5_K_M27.1 GBUD-Q6_K30 GBQ8_037.8 GB如果你想在消费级机器上尽量体验高能力模型35B-A3B 的低/中比特 GGUF 会很有吸引力。但要注意GGUF 推理能跑不代表本地微调也轻松。Qwen3.6 35B-A3B BenchmarkQwen3.6 27B Benchmark路线图不要一上来就微调部署蒸馏微调路线我建议按这个顺序来先用 MTP-GGUF 跑通本地推理。用同一个 prompt 对比 MTP 开/关确认真的加速。准备你自己的任务数据做蒸馏/清洗。用 QLoRA 做 SFT 微调。导出 LoRA、merged 16bit、GGUF 或 vLLM 服务。很多人一开始就想“我要微调 35B”。实际更好的做法是先证明你的任务值得微调再投入训练成本。本地部署llama.cpp MTP 实验分支目前 llama.cpp 的 MTP 支持来自 PR• PRhttps://github.com/ggml-org/llama.cpp/pull/22673• 分支https://github.com/am17an/llama.cpp/tree/mtp-clean这个 PR 还在 Open 状态所以本文命令按当前模型卡和 PR 讨论整理。后续如果参数改名以 PR 最新说明为准。4.1 Linux NVIDIA 编译apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -ygit clone -b mtp-clean https://github.com/am17an/llama.cpp.gitcmake llama.cpp -B llama.cpp/build \ -DBUILD_SHARED_LIBSOFF \ -DGGML_CUDAONcmake --build llama.cpp/build \ --config Release \ -j \ --clean-first \ --target llama-cli llama-servercp llama.cpp/build/bin/llama-* llama.cpp如果你是 macOS / CPU / Metal 路线Unsloth 模型卡提示把-DGGML_CUDAON改成-DGGML_CUDAOFF。不过 Metal 构建细节可能随 llama.cpp 版本变化最好同时看当前分支的 build 文档。4.2 跑 Qwen3.6-27B-MTP-GGUFexport LLAMA_CACHEunsloth/Qwen3.6-27B-MTP-GGUF./llama.cpp/llama-server \ -hf unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL \ -ngl 99 \ -c 8192 \ -fa on \ -np 1 \ --spec-type mtp \ --spec-draft-n-max 2启动后服务默认提供 OpenAI-compatible API。你可以用浏览器访问 WebUI或者用 OpenAI SDK 调用。4.3 跑 Qwen3.6-35B-A3B-MTP-GGUFexport LLAMA_CACHEunsloth/Qwen3.6-35B-A3B-MTP-GGUF./llama.cpp/llama-server \ -hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL \ -ngl 99 \ -c 8192 \ -fa on \ -np 1 \ --spec-type mtp \ --spec-draft-n-max 24.4 如果mtp参数报错PR 讨论里已经出现过参数变化有用户遇到unknown speculative type: mtp随后提示改成--spec-type draft-mtp所以如果你当前分支报错可以试./llama.cpp/llama-server \ -hf unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL \ -ngl 99 \ -c 8192 \ -fa on \ -np 1 \ --spec-type draft-mtp \ --spec-draft-n-max 2这个现象本身也说明MTP 支持仍在快速迭代不要把当前命令当成长期稳定接口。怎么判断 MTP 真的生效不要只看“感觉变快”。至少看三件事。5.1 看启动参数确认 server 命令里有--spec-type mtp# 或者新分支里的--spec-type draft-mtp以及--spec-draft-n-max 2--spec-draft-n-max控制一次最多草稿几个 token。不是越大越好draft 越长接受率可能越低额外开销也可能上升。模型卡示例常用 2PR 讨论里很多用户测 2、3、4、7最佳点跟硬件和任务有关。5.2 看日志里的 acceptance rate正常情况下你应该能在日志里看到类似字段draft acceptance rate 0.79728statistics mtp: #calls..., #gen drafts..., #acc drafts...acceptance rate 越高MTP 越有机会加速。但它不是唯一指标最终还是看 decode tok/s 和 total time。5.3 同 prompt 对比开关用同一个 prompt跑两次• 第一次开启 MTP• 第二次去掉--spec-type ...• 采样参数保持一致• 记录 prompt eval tok/s、decode tok/s、总耗时。可以直接用本项目里的模板assets/benchmark_template.csv公众号参考文章和 PR 里有一个 RTX 5090 的片段Qwen3.6-27B Q4_0同一个 “create a flappy bird clone” promptMTP 开启后 decode 从 63.72 tok/s 到 105.47 tok/sdraft acceptance rate 约 79.7%。这个数字很漂亮但不要直接照搬成你的机器结果。不同显卡、后端、量化、上下文长度、prompt 类型都会影响最终速度。OpenAI-compatible API 调用启动 llama-server 后可以用 OpenAI SDK 测pip install -U openaiexport OPENAI_BASE_URLhttp://localhost:8080/v1export OPENAI_API_KEYEMPTYPython 示例from openai import OpenAIclient OpenAI()response client.chat.completions.create( modelQwen3.6-MTP-GGUF, messages[ {role: user, content: 写一个最小可运行的贪吃蛇 HTML 游戏。}, ], temperature0.6, top_p0.95, max_tokens4096,)print(response.choices[0].message.content)如果你用的是 Qwen 官方推荐参数可以参考• thinking generaltemperature1.0, top_p0.95, top_k20, presence_penalty1.5• precise codingtemperature0.6, top_p0.95, top_k20, presence_penalty0.0• non-thinking generaltemperature0.7, top_p0.8, top_k20, presence_penalty1.5Qwen3.6 默认会 thinking。官方模型卡也提示Qwen3.6 不再使用 Qwen3 那种/think、/nothink软开关而是通过 API 参数控制。vLLM / SGLang更适合多卡服务如果你不是本地单机 GGUF而是多卡服务器部署Qwen 官方模型卡给了 vLLM 和 SGLang 的 MTP 命令。7.1 vLLM MTPuv pip install vllm --torch-backendautovllm serve Qwen/Qwen3.6-35B-A3B \ --port 8000 \ --tensor-parallel-size 8 \ --max-model-len 262144 \ --reasoning-parser qwen3 \ --speculative-config {method:qwen3_next_mtp,num_speculative_tokens:2}如果你只做文本想省掉 vision encoder 和多模态 profiling可以加--language-model-only7.2 SGLang MTPuv pip install sglang[all]python -m sglang.launch_server \ --model-path Qwen/Qwen3.6-35B-A3B \ --port 8000 \ --tp-size 8 \ --mem-fraction-static 0.8 \ --context-length 262144 \ --reasoning-parser qwen3 \ --speculative-algo NEXTN \ --speculative-num-steps 3 \ --speculative-eagle-topk 1 \ --speculative-num-draft-tokens 4这条路线适合生产服务和多用户吞吐本地消费级显卡用户还是先从 GGUF llama.cpp 开始更现实。Unsloth Studio如果你想少折腾环境Qwen3.6 in Unsloth StudioUnsloth 官方已经写明 Qwen3.6 可以在 Unsloth Studio 中运行和微调。Studio 的价值是• 本地 Web UI• 可以跑模型• 可以准备数据• 可以训练• 更适合先验证工作流。macOS / Linux / WSL 安装curl -fsSL https://unsloth.ai/install.sh | shWindows PowerShellirm https://unsloth.ai/install.ps1 | iex启动unsloth studio -H 0.0.0.0 -p 8888Dockerdocker run -d \ -e JUPYTER_PASSWORDmypassword \ -p 8888:8888 \ -p 8000:8000 \ -p 2222:22 \ -v $(pwd)/work:/workspace/work \ --gpus all \ unsloth/unsloth如果你不想从第一天就处理 CUDA、PyTorch、FlashAttention、依赖版本Studio 会更友好。蒸馏先把数据做对再谈训练这里的“蒸馏”不要理解成复制某个闭源模型的能力。更实用的定义是用一个更强或更稳定的 teacher为你有权使用的任务数据生成更规范、更一致的答案再经过清洗和抽检变成 Qwen3.6 的 SFT 数据。举个例子你想把 Qwen3.6 微调成“本地部署助手”。那就准备这些任务• llama.cpp 报错排查• vLLM 启动参数解释• GGUF 量化选择• GPU 显存估算• benchmark 日志解读• ChatML 数据格式转换• LoRA 微调排错。9.1 数据格式用 ChatML JSONL每一行一个样本{messages:[{role:system,content:你是一个严谨的本地大模型部署助手。},{role:user,content:如何判断 Qwen3.6 MTP 是否真的开启},{role:assistant,content:检查启动参数是否包含 --spec-type mtp 或 draft-mtp并观察日志中是否出现 draft acceptance rate、statistics mtp 等字段。然后用同一 prompt 对比 MTP 开关下的 decode tok/s 和总耗时。}]}9.2 Teacher 生成时加约束可以用这个 system prompt你是一个严谨的 AI 工程资料整理助手。请根据给定问题生成可用于监督微调的高质量答案。要求1. 不编造不存在的命令或参数。2. 如果某功能仍是实验分支必须明确标注。3. 命令需要说明适用环境。4. 答案要可操作不要空泛。5. 输出中文。9.3 清洗规则生成后至少做这些过滤• 删除空答案• 删除明显拒答• 删除和问题无关的样本• 删除命令不闭合、JSON 不合法的样本• 删除重复样本• 每个任务类型抽样人工检查。9.4 一个最小蒸馏脚本思路下面是伪代码级流程你可以接本地 llama-server、vLLM 或云端 OpenAI-compatible APIimport jsonfrom openai import OpenAIclient OpenAI( base_urlhttp://localhost:8080/v1, api_keyEMPTY,)questions [ 如何选择 Qwen3.6-27B-MTP-GGUF 的量化版本, llama.cpp MTP 的 --spec-draft-n-max 应该设置多少, 为什么 MTP 对 RAG 长上下文不一定加速,]system 你是一个严谨的本地大模型部署助手。答案必须可操作不要编造。with open(distill_qwen36_mtp.jsonl, w, encodingutf-8) as f: for question in questions: response client.chat.completions.create( modelteacher-model, messages[ {role: system, content: system}, {role: user, content: question}, ], temperature0.3, top_p0.9, ) answer response.choices[0].message.content row { messages: [ {role: system, content: system}, {role: user, content: question}, {role: assistant, content: answer}, ] } f.write(json.dumps(row, ensure_asciiFalse) \n)真正训练前不要直接把 teacher 输出喂进去。先抽检尤其是命令和版本号。微调优先 QLoRA不要上来全量Unsloth 文档里很明确入门优先 LoRA/QLoRA。对 Qwen3.6 这类大模型来说full fine-tuning 成本非常高本地消费级机器更现实的是• 本地 GGUF 跑推理• 云端或高显存机器做 QLoRA• 训练后导出 LoRA 或 GGUF• 再回本地部署。10.1 推荐超参起点参数建议r16 或 32lora_alpha16/32/64通常等于 r 或 2rlora_dropout0 起步怀疑过拟合时 0.05–0.1learning_rate2e-4 快速试正式可降到 1e-4 / 5e-5num_train_epochs1–3per_device_train_batch_size1–2gradient_accumulation_steps8–16max_seq_length2048/4096 起步长文档再加Unsloth 文档推荐 target modules 覆盖 attention MLPtarget_modules [ q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj,]10.2 训练代码骨架下面是 SFT 骨架。实际显存需求取决于模型、量化、上下文和 batch如果 27B/35B-A3B 在本地放不下就用云端 A100/H100 或先换更小 Qwen 模型验证数据。from datasets import load_datasetfrom trl import SFTTrainer, SFTConfigfrom unsloth import FastLanguageModelfrom unsloth.chat_templates import get_chat_template, train_on_responses_onlymax_seq_length 4096model, tokenizer FastLanguageModel.from_pretrained( model_nameunsloth/Qwen3.6-27B, max_seq_lengthmax_seq_length, load_in_4bitTrue,)tokenizer get_chat_template( tokenizer, chat_templateqwen3,)model FastLanguageModel.get_peft_model( model, r16, target_modules[ q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj, ], lora_alpha32, lora_dropout0, biasnone, use_gradient_checkpointingunsloth, random_state3407,)dataset load_dataset(json, data_filesdistill_qwen36_mtp.jsonl, splittrain)def formatting_prompts_func(examples): texts [ tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptFalse) for messages in examples[messages] ] return {text: texts}dataset dataset.map(formatting_prompts_func, batchedTrue)trainer SFTTrainer( modelmodel, tokenizertokenizer, train_datasetdataset, dataset_text_fieldtext, max_seq_lengthmax_seq_length, argsSFTConfig( per_device_train_batch_size1, gradient_accumulation_steps16, warmup_steps10, max_steps300, learning_rate1e-4, logging_steps10, optimadamw_8bit, weight_decay0.01, lr_scheduler_typelinear, seed3407, output_diroutputs_qwen36_mtp_sft, ),)trainer train_on_responses_only( trainer, instruction_part|im_start|user\n, response_part|im_start|assistant\n,)trainer.train()这里有两个关键点训练前必须确认 chat template 和模型匹配建议只训练 assistant response不要让模型学习用户输入本身。如果chat_templateqwen3在当前 Unsloth 版本中不可用就先打印支持列表from unsloth.chat_templates import CHAT_TEMPLATESprint(CHAT_TEMPLATES.keys())然后选择最接近 Qwen ChatML 的模板或使用 tokenizer 自带apply_chat_template。保存、导出、部署训练后先保存 LoRA adaptermodel.save_pretrained(qwen36_mtp_lora)tokenizer.save_pretrained(qwen36_mtp_lora)如果你要用 vLLM 部署保存 merged 16bitmodel.save_pretrained_merged( qwen36_mtp_merged_16bit, tokenizer, save_methodmerged_16bit,)然后vllm serve ./qwen36_mtp_merged_16bit如果你要回到 llama.cpp / Ollama / LM Studio导出 GGUFmodel.save_pretrained_gguf( qwen36_mtp_finetuned_gguf, tokenizer, quantization_methodq4_k_m,)或者推到 Hugging Facemodel.push_to_hub_gguf( 你的用户名/qwen36-mtp-finetuned-gguf, tokenizer, quantization_methodq4_k_m,)导出后效果变差怎么办Unsloth 文档里反复强调最常见原因是 chat template 不一致。排查顺序训练时用的 template推理时用的 templateeos token是否多加了 BOS token是否 assistant/user 标记不一致是否把用户输入也训练进 loss 里。如果导出 GGUF 后出现乱码、无限重复、停不下来优先查这些。什么时候考虑 GRPOSFT 能解决“格式、风格、领域问答、流程化输出”。如果你的任务有明确可验证答案比如• 数学题最终答案• 代码题单元测试• JSON schema 是否通过• 命令是否符合规则• SQL 是否能执行再考虑 GRPO/RLVR。Unsloth 的 GRPO 文档建议reward/verifier 要认真设计数据量太小会不稳定通常至少准备几百行。学习率也要比 SFT 小RL 类任务可从5e-6起步。我的建议是先 SFT让模型学会你的任务格式再 GRPO让模型在可验证任务上学会更优策略。不要第一天就上 RL。已知坑点汇总坑 1MTP 支持还在实验分支llama.cpp PR #22673 仍是 Open。你今天看到的是--spec-type mtp明天可能变成draft-mtp。遇到参数报错先看 PR 最新讨论。坑 2-np 1暂时不适合Unsloth 模型卡和 PR 讨论都提到当前 MTP 路线需要单 parallel。启动报错时显式加-np 1# 或--parallel 1坑 3多模态先别和 MTP 混用当前说明里--mmproj与 MTP 暂不支持。想跑图像/视频理解先用 vLLM/SGLang 或普通路线想跑 MTP就先做纯文本。坑 4长上下文不一定更快MTP 主要加速 decode。如果你的任务是 200K prompt 200 token 输出prefill 才是大头。PR 讨论里也有用户观察到 MTP 路径 prefill 变慢。坑 5微调比推理吃资源得多GGUF 量化推理能在消费级显卡上跑不代表 27B/35B-A3B QLoRA 微调也能轻松跑。微调前先用小数据、小步数、短上下文验证流程。我的推荐实操配置如果你今天就想开始我建议入门体验• 模型unsloth/Qwen3.6-27B-MTP-GGUF:UD-Q4_K_XL• 后端llama.cpp MTP 分支• context8192 或 16384• MTP--spec-draft-n-max 2• 任务代码生成、长文生成高性价比能力体验• 模型unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-Q4_K_XL• 后端llama.cpp MTP 分支• context8192 起步• 如果 OOM降到 3-bit/IQ 量化或减小 context数据蒸馏• 格式ChatML JSONL• 样本数100 条起步验证1000 更稳• teacher本地强模型或云端 API• 必做规则过滤 人工抽检微调• 方法QLoRA• rank16 起步• lr1e-4或2e-4快速验证• max_steps先 60再 300• 保存先 LoRA再 merged再 GGUF结尾这次真正值得关注的不是“快”而是链路完整了Qwen3.6 MTP 的意义不只是某张显卡上多跑了几十 tok/s。更重要的是现在这条链路开始完整Qwen3.6 官方 MTP 训练 ↓Unsloth 保留 MTP head 的 GGUF ↓llama.cpp MTP speculative decoding ↓本地 OpenAI-compatible API ↓蒸馏数据 ↓QLoRA 微调 ↓GGUF / vLLM / Studio 再部署如果你只是想尝鲜今天就跑 MTP-GGUF。如果你想做自己的本地助手先别急着微调。先收集 100 条高质量任务蒸馏成 ChatML跑一个小步数 QLoRA看看模型是不是朝你想要的方向变了。跑通这条闭环比单次 benchmark 更重要。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】