官方发布的 InternScience/Agents-A1 checkpoint 是一个 40 层 Qwen3.5-35B-A3B MoE,不包含 MTP(Multi-Token Prediction)层。为了在 llama.cpp 中启用 MTP 加速(长上下文生成提速 10–30%),我们 从 Qwen3.5-35B-A3B 中提取 1 层 MTP,注入到 Agents-A1 的 safetensors 中,再转 GGUF。
步骤 1 — 从 Qwen3.5-35B-A3B 提取 MTP tensor
# 源:J:\Models\Qwen3.5-35B-A3B-MTP(Qwen3.5-35B-A3B + 原生 MTP)
from safetensors import safe_open
import json, os
src = r"J:\Models\Qwen3.5-35B-A3B-MTP"
with open(os.path.join(src, "model.safetensors.index.json")) as f:
idx = json.load(f)
mtp_keys = [k for k in idx["weight_map"] if "mtp" in k.lower()]
print(f"Found {len(mtp_keys)} MTP tensors") # 785
步骤 2 — 作为新分片(N+1)追加
# 把 785 个 MTP tensor 保存为新分片
new_shard = "model.safetensors-15-of-15.safetensors"
save_file({k: get_tensor(k) for k in mtp_keys}, new_shard)
# 更新 model.safetensors.index.json:
# - metadata.total_size += 新分片大小
# - weight_map: 为每个 MTP key 追加新分片路径
# - 不修改原 14 个分片(避免触碰原始数据)
步骤 3 — 用 master llama.cpp 转 BF16 GGUF
F:\llama.cpp\llama.cpp-master\convert_hf_to_gguf.py ^
J:\Models\Agents-A1 ^
--outfile J:\Models\Agents-A1-MTP-GGUF\Agents-A1-MTP-BF16.gguf ^
--outtype f16
# master 版本自动处理 Qwen3.5MoE + MTP:
# - 常规层:blk.0–39
# - MTP 层:blk.40.nextn.* (785 个 tensor)
步骤 4 — 用 APEX 量化(Q4_K_M 默认,MTP 用 Q8_0)
F:\llama.cpp\...\llama-quantize.exe ^
--imatrix J:\Models\Qwen3.5-35B-A3B.imatrix.gguf ^
--tensor-type-file E:\apex-quant\configs\qwen36_35b_mtp_<档位>.txt ^
J:\Models\Agents-A1-MTP-GGUF\Agents-A1-MTP-BF16.gguf ^
J:\Models\Agents-A1-MTP-GGUF\Agents-A1-MTP-APEX-I-<档位>.gguf ^
Q4_K_M
# APEX qwen36_35b_mtp_*.txt 配置已包含 blk.40 override
# (所有档位 MTP 用 Q8_0)—— 无需手动 patch。