- 基础模型
- 大模型
- 多模态
- 模型量化
- 模型评测
- 本地部署
【免费下载链接】Qwen3.8-27B-Coder390-EfficientThink-Opus5.5-GPT6Astra-Grok4.7-DSV4Pro-K3-SFT-RLOO-MTP-DFlash2
Coder390(基于 Qwen3.8-27B 的后训练模型)采用 Qwen3.5 一代的Qwen3_5ForConditionalGeneration架构:64 层文本塔中,线性注意力层与全注意力层按 3:1 交替排布,并自带一个 BF16 的 MTP(Multi-Token Prediction,多 token 预测)头。本文面向新手,讲清楚这套混合注意力结构为什么这样设计、MTP 头藏在仓库的哪些文件里、以及它如何在不增加任何额外下载的前提下把解码速度提升约一倍。
Coder390 是什么:一个可以跑在单卡上的 27B 多模态模型
🧩 Coder390 是 Qwen3.8-27B 经过多轮 SFT + RLOO 后训练的版本,核心目标是治「模型已经算出答案却停不下来」的毛病(官方口径下 GPQA 的 94K 截断从 4 题降到 1 题,LCB 从 13 题降到 3 题)。它总参数 27,781,427,952,支持文本 + 图像 + 视频输入,并提供 BF16、静态 FP8、NVFP4、INT8/INT4、GGUF、NInfer 等一整套量化档位。
静态 FP8 档成绩为 GPQA 178/198、MMLU 450/500、LCB 90/100,全面不低于原版 FP8(177 / 444 / 83),且 BF16、动态 FP8、静态 FP8 三档之间 GPQA 与 LCB 一题不差——量化基本无损。
3:1 交替的混合注意力结构是怎么设计的
64 层排布:48 层线性注意力 + 16 层全注意力
打开任意档位的 BF16/config.json 可以看到 64 项layer_types,规律非常整齐:每 4 层里前 3 层是linear_attention,第 4 层是full_attention。对应的full_attention_interval参数就写在 BF16/config.json:
"full_attention_interval": 4也就是说 64 = 48 层线性注意力 + 16 层全注意力,这正是标题里「3:1」的来历。
两种注意力各管什么
| 组件 | 关键参数(见 BF16/config.json) | 作用 |
|---|---|---|
| 线性注意力层(×48) | linear_num_key_heads=16、linear_num_value_heads=48、linear_conv_kernel_dim=4、mamba_ssm_dtype=float32 | 用固定大小的循环状态(SSM 风格)代替增长的 KV 缓存,算子成本不随上下文长度线性膨胀 |
| 全注意力层(×16) | 24 个 Q 头 / 4 个 KV 头(GQA)、head_dim=256、partial_rotary_factor=0.25 | 提供精确的长程检索能力,关键位置不丢信息 |
| 位置编码 | max_position_embeddings=262144、mrope 分段 [11, 11, 10] | 支持 256K 上下文;mrope 把文本、图像、视频的位置信息编进同一套 RoPE |
📌 简单理解:线性注意力层像「滚动摘要」,读多少都只占一份固定内存,负责让长上下文的推理又省又快;每第 4 层插入一次全注意力,像「定期翻原文」,保证需要精确定位的信息(比如长代码里的某个函数定义)能被准确取回。3:1 的比例就是在「省」和「准」之间取平衡,这也是为什么它能稳定跑 100K 上下文评测。
另外两个细节值得关注:注意力输出带门控(attn_output_gate=true、门控类型swish),FFN 激活用silu,词表大小 248,320。视觉塔是独立的qwen3_5_vision(27 层、patch 16、空间合并 2),所以同一套权重既能聊代码也能看图看视频。
内置 MTP 头:把下一个 token 一次猜好几个
MTP 是什么、有多大
MTP(Multi-Token Prediction)本质是一个「搭便车」的小型预测头:主模型正常解码时,MTP 头基于当前隐状态顺手往后猜 1 个草稿 token,主模型一次前向就能验证并连续收下若干个 token——这就是投机解码。
在 Coder390 里,MTP 的配置同样写在 BF16/config.json:
mtp_num_hidden_layers=1:只有 1 层隐藏层,非常轻量;mtp_use_dedicated_embeddings=false:不单独养一套词嵌入,直接复用主模型的 embedding,省参数。
实体文件是每档自带的 BF16/mtp-bf16.safetensors(849MB、15 个张量、424,699,392 个参数,全部 BF16,直接取自官方 Qwen3.8-27B 的 MTP 头),FP8、NVFP4 各档里的同名文件与它逐字节一致。
实测提速:约 2 倍,且不改输出分布
单张 RTX PRO 6000 + SGLang(静态 FP8 包)的实测(数据见 evaluation/BENCH_STATICFP8.json):
| 场景 | 不开投机 | 开 MTP | 开 DFlash2 |
|---|---|---|---|
| 单请求 tok/s(C1) | 45.6 | 91.1 | 180.3 |
| 总吞吐 tok/s(C8) | 283.0 | 380.3 | 646.3 |
| 平均接受长度 | — | 2.81 | 4.13 |
MTP 平均每个解码步能收下约 2.8 个 token(接受率 60%),单请求速度翻倍;投机解码不改变目标模型的输出分布,只改速度。GGUF 侧实测也一致:llama.cpp 融合 MTP 时 Q6_K 包 C1 总吞吐 97.2 tok/s,约为不开投机(53.4)的 1.8 倍。
MTP 和 DFlash2 二选一
⚡ 仓库同时提供 DFlash2 草稿模型(FP8 权重 + 128×128 分块 scale,约 2.4GB,见 FP8/DFlash2-FP8/config.json),它的草稿块更长、C1 下约 180 tok/s,比 MTP 更快;但MTP 与 DFlash2 互斥,一次启动只能开一个。不想多下载 2.4GB 草稿时,用内置 MTP 就够了——这也是所有档位都坚持把 MTP 头打包进来的原因。
各量化档位里 MTP 头藏在哪里
📦 所有档位都内置或附带 MTP,位置如下:
| 档位 | MTP 所在位置 | 说明 |
|---|---|---|
| BF16 / FP8 / NVFP4 三档 | 包内mtp-bf16.safetensors | 与 BF16/mtp-bf16.safetensors 字节一致,SGLang 直接识别 |
| INT4 W4A16 | INT4/W4A16/model_mtp.safetensors | 内置头,vLLM 用--speculative-config开启,整轮测评平均接受长度 2.81 |
| INT8 W8A8 / W8A16 | 独立目录 INT8/W8A8/MTP-BF16/ | vLLM 外挂草稿,3 个草稿 token 时 C1 65.9 vs 31.1 tok/s |
| GGUF Q2/Q3/Q4 LynnStyle | 文件内blk.64(65 个 block 的最后一个) | 内置 Q4 MTP 头(.ninfer里为 Q4_K),llama.cpp 显示creating MTP draft context |
| GGUF Q6_K / Q8_0 | 文件内blk.64 | 内置 Q8 MTP 头;另有独立草稿 GGUF/mtp-Qwen3.8-27B-Coder390-EfficientThink-Q8_0.gguf 可经-md替换给低档用 |
| NInfer 包(NVFP4 / GGUF) | .ninfer单文件内 | Q8 MTP 头 + 视觉组件一起打包,--vision即可看图 |
快速上手:三种引擎开启 MTP 投机解码
只需一行关键参数(完整命令见 README.md 的「推荐启动脚本」):
SGLang(BF16 / FP8 / NVFP4 档)
python -m sglang.launch_server --model-path ./FP8 \ --mamba-ssm-dtype bfloat16 \ --speculative-algorithm EAGLE --speculative-num-steps 3 \ --speculative-eagle-topk 1 --speculative-num-draft-tokens 4llama.cpp(GGUF 档,MTP 已内置,无需外挂)
llama-server -m ./GGUF/Qwen3.8-27B-Coder390-EfficientThink-Q4LynnStyle-MTP.gguf \ -c 409600 -np 4 -ngl 99 --jinja \ --spec-type draft-mtp --spec-draft-n-max 4NInfer(.ninfer档):在ninfer-serve后加--spec mtp --draft-tokens 4(MTP 支持 1–5 个草稿 token),需要看图时再追加--vision。
关键文件速查
| 文件 | 用途 |
|---|---|
| BF16/config.json | 架构总配置:layer_types、full_attention_interval、MTP 参数 |
| BF16/mtp-bf16.safetensors | 官方 BF16 MTP 头(各 safetensors 档字节一致) |
| FP8/DFlash2-FP8/ | 更快的 DFlash2 投机草稿(FP8) |
| INT8/W8A8/MTP-BF16/ | INT8 档的独立 MTP 草稿目录 |
| evaluation/BENCH_STATICFP8.json | MTP / DFlash2 / 不开投机的完整测速原始数据 |
| evaluation/NVFP4_CALIBRATION_METHOD.md | NVFP4 校准方法说明 |
小结
- 结构:64 层 = 48 层线性注意力 + 16 层全注意力,
full_attention_interval=4实现 3:1 交替;线性层压成本、全注意力层保精度,支撑 256K 上下文能力。 - MTP:1 层隐藏层、424M 参数、15 个张量,复用主模型 embedding,内置于所有档位;实测单请求解码约 2 倍加速(91 vs 46 tok/s)。
- 选型:追求极致速度用 DFlash2(SGLang,C1 约 180 tok/s);不想加草稿文件用 MTP;低显存端侧走 GGUF 内置 MTP + llama.cpp。
这套「混合注意力 + 内置 MTP」的组合,让 Coder390 在单卡 96GB 乃至 16GB 显存的设备上,都能以接近实时对话的速度跑出 27B 级别的推理能力。
- 基础模型
- 大模型
- 多模态
- 模型量化
- 模型评测
- 本地部署
【免费下载链接】Qwen3.8-27B-Coder390-EfficientThink-Opus5.5-GPT6Astra-Grok4.7-DSV4Pro-K3-SFT-RLOO-MTP-DFlash2
相关推荐
LLMs-from-scratch 实战:从零实现 Qwen3.5 0.8B 混合注意力架构(线性注意力 + 全注意力交替)
LLMs from scratch 实战:从零实现 Qwen3.5 0.8B 混合注意力架构(线性注意力 + 全注意力交替) 导读 本文基于 LLMs from
示例工程大模型人工智能openpilot 使用教程:如何5步装好设备,跑通车道居中与自适应巡航
openpilot 使用教程:如何5步装好设备,跑通车道居中与自适应巡航 openpilot 是一套面向自动驾驶研发的机器人操作系统,当前落地在 300 多款支
自动驾驶人工智能计算机视觉深度学习机器人NeoHorse-1-9B架构内幕完全指南:线性注意力+全注意力混合层、MTP推测解码与262K上下文如何协同工作
NeoHorse 1 9B架构内幕完全指南:线性注意力+全注意力混合层、MTP推测解码与262K上下文如何协同工作 NeoHorse 1 9B 是 TokenR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考