[!IMPORTANT]
基于 Unsloth UD XL 量化版本嫁接 MTP 层
本仓库中的 GGUF 文件是 Qwen3.6-27B 的Unsloth Dynamic 2.0 XL (UD XL) 量化版本,并在其基础上嫁接了多令牌预测 (MTP) 层。
- 基础量化:Unsloth UD XL — 有关基准测试,请参阅 Unsloth Dynamic 2.0 GGUFs。
- MTP 层:取自 Radamanthys11/Qwen3.6-27B-MTP-Q8_0-GGUF,并以Q8_0 精度存储,随后合并到 UD XL GGUF 文件中。
- 为何 MTP 采用 Q8 精度? 草稿头相对于基础模型而言规模较小,因此 Q8_0 精度能在保持近乎无损的同时,避免对整个模型堆栈进行完全重新量化的开销。
convert.py:用于将 MTP 层嫁接到 UD XL GGUF 文件中的脚本。改编自 此 gist。27B_MTP.gguf:作为convert.py输入的原始 Q8_0 MTP 层源文件。要使用 MTP 运行这些文件,您需要 llama.cpp 的自定义构建版本,其中包含来自 PR #22673 的 MTP/推测解码支持。请按照以下步骤操作。
🐳 或使用预构建 Docker 镜像(推荐)
不想从源代码构建?支持 MTP 的即用型 Docker 镜像适用于多种后端:
镜像 后端 havenoammo/llama:cuda13-serverCUDA 13 havenoammo/llama:cuda12-serverCUDA 12 havenoammo/llama:vulkan-serverVulkan havenoammo/llama:intel-serverIntel (CPU/Xe) havenoammo/llama:rocm-serverROCm (AMD) 快速入门 — 通过 Docker 运行此模型:
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 \ --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。
有关更多详细信息和讨论,请参见 Reddit 帖子。
构建支持 MTP 的 llama.cpp — 分步指南
1. 克隆并进入仓库
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp2. 获取最新的远程更改
git fetch origin这会从上游仓库拉取所有新的引用,确保您基于当前的 master 分支尖端进行工作。
3. 将 PR #22673 获取为本地分支
git fetch origin pull/22673/head:pr-22673PR #22673(“llama + spec: MTP Support”)添加了推测解码/MTP 基础设施,使
llama-server能够使用多令牌预测头。我们直接拉取此 PR,无需等待其合并到上游。4. 检出 master 分支并重置到最新远程版本
git checkout master git reset --hard 856c3adac确保在当前上游 master 分支上有一个干净的起点,丢弃任何本地偏差。
5. 将 PR 合并到当前分支(非快进式)
git merge --no-ff pr-22673 -m "Merge [PR #22673](https://github.com/ggml-org/llama.cpp/pull/22673): llama + spec: MTP Support"
--no-ff标志会保留一个合并提交,以便在 PR 正式合并并发生更改时,您可以干净地进行 cherry-pick 或恢复操作。6. 构建
llama-servercmake -B build -DGGML_CUDA=ON cmake --build build --config Release --target llama-server这将生成
build/bin/llama-server。7. 运行启用 MTP 的服务器
./build/bin/llama-server \ -m path/to/qwen3.6-27b-ud-xl-mtp.gguf \ --spec-type mtp \ --spec-draft-n-max 3
--spec-type mtp告诉 llama.cpp 使用 GGUF 中内置的 MTP 头。
--spec-draft-n-max 3设置每步的最大草稿令牌数(与模型的 3 个 MTP 层匹配)。
有关量化基准测试,请参见 Unsloth Dynamic 2.0 GGUFs。
[!Note] 本仓库包含采用 Hugging Face Transformers 格式的后训练模型的权重和配置文件。
这些模型文件与 Hugging Face Transformers、vLLM、SGLang、KTransformers 等工具兼容。
继 2 月份发布 Qwen3.5 系列之后,我们很高兴推出 Qwen3.6 的首个开源权重版本。Qwen3.6 基于社区的直接反馈构建,优先考虑稳定性和实际应用价值,为开发者提供更直观、响应更迅速且真正高效的编码体验。
此版本带来了显著升级,尤其在以下方面:

更多详情,请参阅我们的博客文章 Qwen3.6-27B。
为简化集成流程,建议通过 API 使用 Qwen3.6。以下是通过兼容 OpenAI 的 API 使用 Qwen3.6 的指南。
Qwen3.6 可通过主流推理框架以 API 形式部署。 下文展示了启动 Qwen3.6 模型兼容 OpenAI API 服务器的示例命令。
[!Important] 不同框架的推理效率和吞吐量差异显著。 建议使用最新版本的框架,以确保最佳性能和兼容性。 对于生产工作负载或高吞吐量场景,强烈推荐使用专用服务引擎,如 SGLang、KTransformers 或 vLLM。
[!Important] 模型默认上下文长度为 262,144 tokens。 若遇到内存不足(OOM)错误,可考虑减小上下文窗口。 但由于 Qwen3.6 利用扩展上下文处理复杂任务,建议保持至少 128K tokens 的上下文长度,以保留其思维能力。
SGLang 是一个用于大型语言模型和视觉语言模型的快速服务框架。
Qwen3.6 推荐使用 sglang>=0.5.10,可在全新环境中通过以下命令安装:
uv pip install sglang[all]有关更多详细信息,请参见其文档。
以下操作将在 http://localhost:8000/v1 创建 API 端点:
标准版:可使用以下命令创建最大上下文长度为 262,144 tokens 的 API 端点,并在 8 块 GPU 上使用张量并行。
python -m sglang.launch_server --model-path Qwen/Qwen3.6-27B --port 8000 --tp-size 8 --mem-fraction-static 0.8 --context-length 262144 --reasoning-parser qwen3工具调用:要支持工具调用,可使用以下命令。
python -m sglang.launch_server --model-path Qwen/Qwen3.6-27B --port 8000 --tp-size 8 --mem-fraction-static 0.8 --context-length 262144 --reasoning-parser qwen3 --tool-call-parser qwen3_coder多 token 预测(MTP):推荐使用以下命令进行 MTP:
python -m sglang.launch_server --model-path Qwen/Qwen3.6-27B --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有关详细的部署指南,请参见 SGLang Qwen3.5 实践指南。
vLLM 是一个用于大语言模型(LLM)的高通量且内存高效的推理和服务引擎。
Qwen3.6 推荐使用 vllm>=0.19.0,可在全新环境中通过以下命令安装:
uv pip install vllm --torch-backend=auto有关更多详情,请参见其文档。
以下操作将在 http://localhost:8000/v1 创建 API 端点:
标准版本:可使用以下命令创建 API 端点,该端点支持最大上下文长度为 262,144 个 token,并在 8 块 GPU 上使用张量并行。
vllm serve Qwen/Qwen3.6-27B --port 8000 --tensor-parallel-size 8 --max-model-len 262144 --reasoning-parser qwen3 工具调用:要支持工具使用,可使用以下命令。
vllm serve Qwen/Qwen3.6-27B --port 8000 --tensor-parallel-size 8 --max-model-len 262144 --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_coder 多 token 预测(MTP):推荐使用以下命令进行 MTP:
vllm serve Qwen/Qwen3.6-27B --port 8000 --tensor-parallel-size 8 --max-model-len 262144 --reasoning-parser qwen3 --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":2}'纯文本模式:以下命令会跳过视觉编码器和多模态分析,以释放内存用于额外的 KV 缓存:
vllm serve Qwen/Qwen3.6-27B --port 8000 --tensor-parallel-size 8 --max-model-len 262144 --reasoning-parser qwen3 --language-model-only有关详细的部署指南,请参见 vLLM Qwen3.5 指南。
KTransformers 是一个灵活的框架,可通过 CPU-GPU 异构计算体验前沿的 LLM 推理优化。 要使用 KTransformers 运行 Qwen3.6,请参见 KTransformers 部署指南。
Hugging Face Transformers 包含一个轻量级服务器,可用于快速测试和中等负载部署。
运行 Qwen3.6 需要最新版本的 transformers:
pip install "transformers[serving]"有关更多详细信息,请参见其文档。同时,请确保已安装torchvision和pillow。
然后,运行transformers serve以启动服务器,其API端点位于http://localhost:8000/v1;如果有可用的加速器,服务器会将模型部署到加速器上:
transformers serve Qwen/Qwen3.6-27B --port 8000 --continuous-batching聊天补全 API 可通过标准 HTTP 请求或 OpenAI SDK 访问。 此处,我们展示使用 OpenAI Python SDK 的示例。
开始前,请确保已安装该 SDK,并已配置 API 密钥和 API 基础 URL,例如:
pip install -U openai
# Set the following accordingly
export OPENAI_BASE_URL="http://localhost:8000/v1"
export OPENAI_API_KEY="EMPTY"[!Tip] 我们建议使用以下采样参数组合进行生成
- 一般任务的思考模式:
temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0- 精确编码任务(如 WebDev)的思考模式:
temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0- 指令(或非思考)模式:
temperature=0.7, top_p=0.80, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0请注意,不同推理框架对采样参数的支持情况有所不同。
[!Important] Qwen3.6 模型默认以思考模式运行,在生成最终响应前会先产生以
</think>\n...</think>\n\n标记的思考内容。 若要禁用思考内容并获取直接响应,请参考此处的示例。
from openai import OpenAI
# Configured by environment variables
client = OpenAI()
messages = [
{"role": "user", "content": "Type \"I love Qwen3.6\" backwards"},
]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=messages,
max_tokens=81920,
temperature=1.0,
top_p=0.95,
presence_penalty=0.0,
extra_body={
"top_k": 20,
},
)
print("Chat response:", chat_response)from openai import OpenAI
# Configured by environment variables
client = OpenAI()
messages = [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.5/demo/CI_Demo/mathv-1327.jpg"
}
},
{
"type": "text",
"text": "The centres of the four illustrated circles are in the corners of the square. The two big circles touch each other and also the two little circles. With which factor do you have to multiply the radii of the little circles to obtain the radius of the big circles?\nChoices:\n(A) $\\frac{2}{9}$\n(B) $\\sqrt{5}$\n(C) $0.8 \\cdot \\pi$\n(D) 2.5\n(E) $1+\\sqrt{2}$"
}
]
}
]
response = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=messages,
max_tokens=81920,
temperature=1.0,
top_p=0.95,
presence_penalty=0.0,
extra_body={
"top_k": 20,
},
)
print("Chat response:", chat_response)from openai import OpenAI
# Configured by environment variables
client = OpenAI()
messages = [
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": "https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.5/demo/video/N1cdUjctpG8.mp4"
}
},
{
"type": "text",
"text": "How many porcelain jars were discovered in the niches located in the primary chamber of the tomb?"
}
]
}
]
# When vLLM is launched with `--media-io-kwargs '{"video": {"num_frames": -1}}'`,
# video frame sampling can be configured via `extra_body` (e.g., by setting `fps`).
# This feature is currently supported only in vLLM.
#
# By default, `fps=2` and `do_sample_frames=True`.
# With `do_sample_frames=True`, you can customize the `fps` value to set your desired video sampling rate.
response = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=messages,
max_tokens=81920,
temperature=1.0,
top_p=0.95,
presence_penalty=0.0,
extra_body={
"top_k": 20,
"mm_processor_kwargs": {"fps": 2, "do_sample_frames": True},
},
)
print("Chat response:", chat_response)[!Important] Qwen3.6 不正式支持 Qwen3 的软切换,即
/think和/nothink。
Qwen3.6 默认会在响应前进行思考。 您可以通过配置 API 参数让模型直接给出响应,无需思考。 例如,
from openai import OpenAI
# Configured by environment variables
client = OpenAI()
messages = [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://qianwen-res.oss-accelerate.aliyuncs.com/Qwen3.6/demo/RealWorld/RealWorld-04.png"
}
},
{
"type": "text",
"text": "Where is this?"
}
]
}
]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=messages,
max_tokens=32768,
temperature=1.0,
top_p=1.0,
presence_penalty=2.0,
extra_body={
"top_k": 40,
"chat_template_kwargs": {"enable_thinking": False},
},
)
print("Chat response:", chat_response)[!Note] 若您使用的是阿里云 Model Studio 的 API,除了修改
model外,请使用"enable_thinking": False,而非"chat_template_kwargs": {"enable_thinking": False}。
默认情况下,仅保留处理最新用户消息时生成的思考块,形成通常所说的交错思考模式。
Qwen3.6 经过额外训练,能够保留并利用历史消息中的思考痕迹。
您可以通过设置 preserve_thinking 选项来启用此功能:
from openai import OpenAI
# Configured by environment variables
client = OpenAI()
messages = [...]
chat_response = client.chat.completions.create(
model="Qwen/Qwen3.6-27B",
messages=messages,
max_tokens=32768,
temperature=0.6,
top_p=0.95,
presence_penalty=0.0,
extra_body={
"top_k": 20,
"chat_template_kwargs": {"preserve_thinking": True},
},
)
print("Chat response:", chat_response)[!Note] 若您使用的是阿里云模型 Studio 的 API,除修改
model外,请使用"preserve_thinking": True,而非"chat_template_kwargs": {"preserve_thinking": False}。
此功能在智能体场景中尤为实用,通过保留完整推理上下文,可增强决策一致性,且在多数情况下能减少冗余推理,从而降低总体 Token 消耗。此外,该功能还能提升 KV 缓存利用率,在思考模式与非思考模式下均优化推理效率。
Qwen3.6 在工具调用能力方面表现卓越。
我们建议使用 Qwen-Agent,以便结合 Qwen3.6 快速构建智能体应用。
您可以通过 MCP 配置文件定义可用工具,也可使用 Qwen-Agent 的集成工具,或自行集成其他工具。
import os
from qwen_agent.agents import Assistant
# Define LLM
# Using Alibaba Cloud Model Studio
llm_cfg = {
# Use the OpenAI-compatible model service provided by DashScope:
'model': 'Qwen3.6-27B',
'model_type': 'qwenvl_oai',
'model_server': 'https://dashscope.aliyuncs.com/compatible-mode/v1',
'api_key': os.getenv('DASHSCOPE_API_KEY'),
'generate_cfg': {
'use_raw_api': True,
# When using Dash Scope OAI API, pass the parameter of whether to enable thinking mode in this way
'extra_body': {
'enable_thinking': True,
'preserve_thinking': True,
},
},
}
# Using OpenAI-compatible API endpoint.
# functionality of the deployment frameworks and let Qwen-Agent automate the related operations.
#
# llm_cfg = {
# # Use your own model service compatible with OpenAI API by vLLM/SGLang:
# 'model': 'Qwen/Qwen3.6-27B',
# 'model_type': 'qwenvl_oai',
# 'model_server': 'http://localhost:8000/v1', # api_base
# 'api_key': 'EMPTY',
#
# 'generate_cfg': {
# 'use_raw_api': True,
# # When using vLLM/SGLang OAI API, pass the parameter of whether to enable thinking mode in this way
# 'extra_body': {
# 'chat_template_kwargs': {'enable_thinking': True, 'preserve_thinking': True}
# },
# },
# }
# Define Tools
tools = [
{'mcpServers': { # You can specify the MCP configuration file
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/xxxx/Desktop"]
}
}
}
]
# Define Agent
bot = Assistant(llm=llm_cfg, function_list=tools)
# Streaming generation
messages = [{'role': 'user', 'content': 'Help me organize my desktop.'}]
for responses in bot.run(messages=messages):
pass
print(responses)
# Streaming generation
messages = [{'role': 'user', 'content': 'Develop a dog website and save it on the desktop'}]
for responses in bot.run(messages=messages):
pass
print(responses)Qwen Code 是一款面向终端的开源 AI 智能体,专为 Qwen 模型优化。它能帮助你理解大型代码库、自动化繁琐工作,从而加快开发进度。
更多信息,请参考 Qwen Code。
Qwen3.6 原生支持最长 262,144 tokens 的上下文长度。 对于总长度(包括输入和输出)超过此限制的长文本任务,我们建议使用 RoPE 缩放技术(如 YaRN)来有效处理长文本。
目前已有多个推理框架支持 YaRN,例如 transformers、vllm、ktransformers 和 sglang。
通常,在支持的框架中启用 YaRN 有两种方法:
修改模型配置文件:
在 config.json 文件中,将 text_config 里的 rope_parameters 字段修改为:
{
"mrope_interleaved": true,
"mrope_section": [
11,
11,
10
],
"rope_type": "yarn",
"rope_theta": 10000000,
"partial_rotary_factor": 0.25,
"factor": 4.0,
"original_max_position_embeddings": 262144,
}通过命令行参数:
对于 vllm,可以使用
VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve ... --hf-overrides '{"text_config": {"rope_parameters": {"mrope_interleaved": true, "mrope_section": [11, 11, 10], "rope_type": "yarn", "rope_theta": 10000000, "partial_rotary_factor": 0.25, "factor": 4.0, "original_max_position_embeddings": 262144}}}' --max-model-len 1010000 对于 sglang 和 ktransformers,可以使用
SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1 python -m sglang.launch_server ... --json-model-override-args '{"text_config": {"rope_parameters": {"mrope_interleaved": true, "mrope_section": [11, 11, 10], "rope_type": "yarn", "rope_theta": 10000000, "partial_rotary_factor": 0.25, "factor": 4.0, "original_max_position_embeddings": 262144}}}' --context-length 1010000[!NOTE] 所有主流开源框架均实现了静态 YaRN,这意味着缩放因子不随输入长度变化,可能会影响短文本的性能。 我们建议仅在需要处理长上下文时才修改
rope_parameters配置。 同时,建议根据实际需求调整factor。例如,如果你的应用场景中典型上下文长度为 524,288 tokens,将factor设置为 2.0 会更合适。
为实现最佳性能,我们建议采用以下设置:
采样参数:
temperature=1.0,top_p=0.95,top_k=20,min_p=0.0,presence_penalty=0.0,repetition_penalty=1.0temperature=0.6,top_p=0.95,top_k=20,min_p=0.0,presence_penalty=0.0,repetition_penalty=1.0temperature=0.7,top_p=0.80,top_k=20,min_p=0.0,presence_penalty=1.5,repetition_penalty=1.0presence_penalty参数在0到2之间调整,以减少无意义重复。但较高的参数值偶尔可能导致语言混杂,并略微降低模型性能。充足的输出长度:对于大多数查询,建议使用32,768个token的输出长度。在对高度复杂问题(如数学和编程竞赛题目)进行基准测试时,建议将最大输出长度设置为81,920个token。这为模型提供了足够的空间来生成详细且全面的响应,从而提升整体性能。
标准化输出格式:在进行基准测试时,建议使用提示词来标准化模型输出。
answer字段中仅用选项字母展示您的选择,例如:"answer": "C"。”长视频理解:为优化纯文本和图像的推理效率,已发布的video_preprocessor_config.json中的size参数采用了保守配置。建议将视频预处理配置文件中的longest_edge参数设置为469,762,048(对应224k视频token),以支持小时级视频的更高帧率采样,从而获得更优性能。例如:
{"longest_edge": 469762048, "shortest_edge": 4096}如果您觉得我们的工作对您有所帮助,欢迎引用我们的成果。
@misc{Qwen3.6-27B,
title = {{Qwen3.6-27B}: Flagship-Level Coding in a {27B} Dense Model},
author = {{Qwen Team}},
month = {April},
year = {2026},
url = {https://qwen.ai/blog?id=qwen3.6-27b}
}