Files
qwen38-flash-next-rtx6000d/docs/mtp-test.md
T

3.7 KiB
Raw Blame History

MTP 实机测试

日期:2026-09-18。初始对照:main 7e53821128K + FP8 KV + FULL CUDA Graph,无 MTP。

方案

  1. 保持模型 revision、镜像 digest、128K、视觉编码器、单活动请求及 GPU 预算不变。
  2. 首先添加 --speculative-config '{"method":"mtp","num_speculative_tokens":2}'。Graph 捕获尺寸增加验证所需的 3 token 形状。
  3. 等待健康检查,依次验证中文、数学、工具调用、图片、视频、127988 token 实际输入检索及重复前缀。
  4. 使用原 256 token 计时任务:一次预热、三次测量,记录 TTFT、总时间、解码速度与实际生成文本。采集投机接受率及显存/KV预算。
  5. 如加载失败、OOM、功能回归或无实际收益,恢复原基线。通过后才选择是否部署,并保留测试配置和回执。

状态:MTP 2 两轮测试完成;结论及限制见下文。

第一轮:MTP 2 / GPU 预算 0.96

启动失败,明确原因是 KV 缓存不足。模型加载占用 76.36 GiB(无 MTP 约 73.77 GiB);可供分配的 KV 缓存约 0.66 GiB,而 131072 token 检查需要 2.47 GiB。没有进入请求测试,不能报告 MTP 速度。

补充试验:仅把 GPU 预算提高到 0.985,保留 128K 和视觉能力,测试期间关闭自动重启以避免失败后循环加载。这是余量较小的探索设置,不自动替换稳定基线。

第二轮:MTP 2 / GPU 预算 0.985

通过中文、数学、工具调用、图片、视频和 127988 token 输入检索。没有主机 OOM 或触发监测保护。模型显存 76.36 GiB,KV 预算 2.78 GiB,日志容量 146622 token;无 MTP 基线容量 218453 token。最终 Graph 捕获约 0.13 GiB。

项目 无 MTP 基线 MTP 2
固定 256 token 解码中位数 77.115 token/s 148.545 token/s
计时任务首 token 中位数 0.070 秒 0.086 秒
思考 token 数 212 247
128K 首次首 token 14.141 秒 14.754 秒
128K 前缀复用首 token 0.454 秒 0.627 秒
GPU memory utilization 0.96 0.985

同提示、temperature 0、seed 6000、固定输出长度、一次预热加三次测量。MTP 解码计时为 1.926 倍,但生成的正文/思考与无 MTP 不同,不能视为逐字相同的性能对照,也不能据此判断质量提升或退化。固定长度吞吐包括思考 token,不等于完成同一业务任务的提速比例。

运行日志中两个统计窗口的草稿接受率为 86.4% 和 84.1%,平均接受长度约 2.73 和 2.68(含 bonus token);不是整个请求集的统一平均值。原始累计指标见 audit/runtime/metrics-mtp2.txt

运行器提示 draft 模型不接收外部多模态 embedding,使用 text-only draft 输入;目标模型仍保留多模态,合成图片和短视频测试通过。后端自动把 FULL 调整为 FULL_DECODE_ONLY,并对多步 draft 重建注意力元数据。

决定

默认仍保留无 MTP 的 128K 多模态基线。 MTP 2 有明显短输出吞吐收益,但需要 98.5% 显存预算,且多模态测试只覆盖小图片和短视频,没有长视频、较长输出、多任务真实质量或长期压力测试。现有证据不足以把它称为更稳定的默认配置。

实验配置保存在 audit/runtime/compose-mtp2-0985.yaml,关闭了自动重启。根目录 Compose 不修改;结束测试后恢复原基线。没有测试 MTP 1、3 或更多预测步,当前结果不代表参数最优。

恢复验收完成:原配置重新启动后中文、数学和工具调用通过;容器 healthy、OOMKilled=false、restart=unless-stopped。回执为 audit/runtime/acceptance-after-mtp.jsonl。日志导出时已遮蔽 API key,并规范化行尾空白。