Files

8.0 KiB
Raw Permalink Blame History

MTP 配对验证计划与结果

2026-09-18,延续 06bcbcf 基线。目标是评估 MTP 2 是否值得替换默认配置。不会把一次短输出计时等同于稳定性验收。

预设测试范围

  • 无 MTP128K、FP8 KV、Graph、GPU budget 0.96。
  • MTP 2:同样的镜像、权重、上下文、视觉编码器与单活动请求,GPU budget 0.985Graph 包含 3-token 验证形状。
  • 两组使用同一脚本和生成资产、相同 seed 和采样参数;不会把精确逐字一致作为浮点路径变化后的唯一正确性标准。
  • 12 道可精确验算的算术、精确 JSON、多轮记忆、OCR 发票与加总、4 张图片、120 秒 720p 视频顺序识别。
  • 代码、中文需求、算法推理三类提示:每类一次预热、三次 2048-token 固定输出计时,xhigh 思考档;另有一次 16384-token 连续输出。
  • 接近 128K 的两个位置检索,重复三次;长文本与图片混合检索;4 个客户端同时提交,验证单活动序列下的排队,不声称 GPU 并行处理。
  • 两组各连续 600 秒混合负载,交替长输入、图像、视频、2048-token 解码,累计时间不包括前述功能与性能用例。
  • 同时采集主机/GPU 资源、OOM、服务错误;功能失败和 HTTP 错误均保留,不能过滤失败后只汇报成功数据。

判定原则

默认启用必须满足:全部预设功能检查通过、无 OOM 或服务退出、长输出无中断、排队请求成功,并在多类长输出任务上有持续收益。单一 synthetic 测试不代表综合模型质量;真实业务长期运行和更大视频仍超出这次验证范围。

固定 token 计时使用 ignore_eos,可能得到截断或后续重复文本,只评估持续解码而非答案质量。精确答案用例正常使用 EOS。视频资产为六个颜色区间,每区间 20 秒,2fps、总计 240 帧;服务内部可能进一步采样。多模态能力是模型/处理器的实际输入路径测试,不代表任意时长、分辨率或帧数都可接受。

补充正常 EOS 任务:发票提取、订单去重、依赖调度、中文审批规则、合并区间和二分查找代码、工具调用参数。代码先做 AST 限制,再在独立进程中以 CPU/内存/时间上限执行固定测试用例,不执行任何外部工具操作。

预检曾使用不支持的 reasoning_effort=high,服务返回 400。查明支持 low/medium/xhigh 后改为 xhigh,两组统一使用修正脚本;原始预检错误单独保留,不混入正式统计。

状态:完整配对验证完成,MTP 2 已启用;原始记录保存在 audit/qualification/

暂停后恢复与基线诊断

按用户要求暂停后,服务器恢复了无 MTP 配置。原基线正式套件 92 个请求全部通过,其中持续混合负载 54 个请求、623.7 秒;补充 xhigh 正常 EOS 任务有一道 merge-intervals 未返回正文。

原脚本在 JSON 解析失败时没有保存完整响应,已修正记录并保留原始失败。相同基线单项复测确认:finish_reason=length8192 个输出 token 全部为 reasoning_tokenscontent=null。没有证据将其归因于 MTP,因为该请求在无 MTP 下运行。相同任务在 medium 下生成代码并通过固定测试。

两种配置都补充相同的 medium 全套质量任务。高思考档的预算耗尽按实际失败记录;最终评价同时区分基础模型/输出预算限制和 MTP 相对基线的新回归,不用切换思考档的成功掩盖 xhigh 失败。

最终结果

检查 无 MTP MTP 2
功能、计时、长输入及持续负载请求 92/92 通过 98/98 通过
其中连续混合负载 54 请求 / 623.7 秒 60 请求 / 614.0 秒
xhigh 正常 EOS 任务 6/7 7/7
medium 正常 EOS 任务 7/7 7/7
2048-token 代码提示,中位数 77.10 token/s 123.42 token/s
2048-token 中文提示,中位数 77.12 token/s 128.78 token/s
2048-token 推理提示,中位数 77.14 token/s 122.15 token/s
16384-token 单次持续输出 76.62 token/s213.9 秒 142.32 token/s115.2 秒

三类 2048-token 测试提升 58%67%。16384-token 计时约提升 86%,但基线含 12136 个思考 token、MTP 为 16384 个思考 token,生成内容明显不同;只证明长时间解码速度和不中断,不能声称答案质量等价或完成业务更快。中文计时中两组思考/正文占比也不同。每类计时为预热后 3 次,不能外推到所有输入。

两组都通过:2048×1536 合成发票图片 OCR/加总、4 图输入、120 秒 720p 视频顺序识别、125995 token 双位置检索、111670 token 长文本加图片检索、4 客户端排队。两道生成代码在独立受限进程中通过固定用例;没有执行实际外部工具动作。

合计 1305 次资源采样:主机可用内存最低 171.95 GiB,OOM kill 最大值 0,未触发内存保护;GPU 峰值 84797 MiB / 85651 MiB,剩余约 854 MiB,温度峰值 64°C。当前容器 healthy、OOMKilled=false、restart=unless-stopped。这些为本次快照,不代表未来实时状态。

延迟与缓存取舍

MTP 减少可用 KV 容量,不能把解码收益直接换算成整体业务收益。本次持续负载中:

请求类别总耗时中位数 无 MTP MTP 2
重复长输入检索 1.74 秒 15.17 秒
视频 2.08 秒 2.37 秒
图片 2.03 秒 1.31 秒
2048-token 解码 26.62 秒 16.70 秒

交替负载中的缓存状态不同。这是当前两套配置的实际混合负载表现,不能把长输入差异解读为纯计算预填充性能差异,也没有通过内核剖析证明具体缓存淘汰原因。初始基线重跑还可能复用之前预检的缓存,因此首次检索 TTFT 不作为冷启动预填充对照。独立的连续前缀复用检查两组均通过。

10 分钟内 MTP 处理 60 个混合请求、基线 54 个,说明本组混合任务的整体改善远小于解码提升。若主要业务是大段上下文反复提问、只生成很短的答案,原配置可能更合适。

当前采用与运行边界

按用户希望利用 MTP 提升生成速度的方向,服务器已采用 MTP 2 + 128K + FP8 KV + 单活动请求 + 0.985 GPU 预算,保留文字、图片、视频能力。启用自动重启;未提高并发或进一步挤占显存。没有声称通过全天运行或任意媒体大小测试。

完整测试未发现 MTP 新增的服务错误或所选任务正确性回归,因此本轮不再仅因显存余量较小就拒绝启用。仍需尊重实测边界:视觉检查为合成图/视频,代码为固定用例,10 分钟持续负载不是 24 小时压力测试,也不是通用模型质量认证。

日常代码和结构化任务建议显式指定 reasoning_effort: medium,并为最终正文预留输出预算;需要 xhigh 时检查 finish_reason,不能把 reasoning-only 的 length 响应当成完整答案。128K 是输入、思考和正文合计上限。

原无 MTP 配置保存在根目录 compose.baseline.yaml。服务器项目目录中执行以下命令可切换(会重启模型):

# 回退到无 MTP
 docker compose -f compose.baseline.yaml up -d
# 恢复经本轮验证的 MTP 默认配置
 docker compose -f compose.yaml up -d

复测方法

先用镜像内已有 Pillow/OpenCV/numpy 生成合成资产:

docker cp scripts/make_qualification_assets.py qwen38-flash-6000d:/tmp/make_qualification_assets.py
docker exec qwen38-flash-6000d python3 /tmp/make_qualification_assets.py --output /root/.cache/qualification
python3 scripts/qualification.py --output /data/flash-next/audit/new-qualification.jsonl --soak-seconds 600
python3 scripts/quality_tasks.py --output /data/flash-next/audit/new-quality-xhigh.jsonl
python3 scripts/quality_tasks.py --effort medium --output /data/flash-next/audit/new-quality-medium.jsonl

输出路径必须不存在,避免覆盖原始记录。使用相同输入和设置配对比较,分别保留失败与成功结果。汇总工具 scripts/summarize_qualification.py 可读取与本次相同命名的回执目录。