Skip to content

perf: optimize qwen3.5 prefill projection and pack on npu.#1907

Merged
maojunx99 merged 3 commits into
xLLM-AI:mainfrom
pjgao:bugfix/qwen35-mtp-accept-rate-20260704
Jul 10, 2026
Merged

perf: optimize qwen3.5 prefill projection and pack on npu.#1907
maojunx99 merged 3 commits into
xLLM-AI:mainfrom
pjgao:bugfix/qwen35-mtp-accept-rate-20260704

Conversation

@pjgao

@pjgao pjgao commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

背景

Qwen3Next 的 projection 权重以 qkvzba 合并形式存储,因此公共路径需要在 projection 后执行 split/reshape。

Qwen3.5 的 checkpoint 已将 projection 权重拆分为独立的 qkv/z/b/a。此前为了复用 Qwen3Next 公共路径,Qwen3.5 会先把独立 projection 结果重新 merge 成 qkvz + ba,随后再通过 fused kernel split 回 qkv/z/b/a,产生了冗余的 merge、split、reshape 和 concat 开销。

此外,单请求且无 padding 的 prefill 输入已经连续,继续执行通用 pack/unpack 会产生不必要的 cat、临时 tensor 和 copy。
image

代码改动

1. 去除 Qwen3.5 prefill projection 的冗余 merge/split

  • 为 Qwen3.5 实现 project_prefill_split_inputs
  • 普通 prefill/chunked prefill 直接分别计算并 reshape qkv/z/b/a,不再先 merge 为 qkvz + ba 后再 split。
  • Qwen3Next 仍保留适配合并权重的原有公共路径。
  • spec verify 当前复用 chunked-prefill forward type,因此显式排除 spec verify,使其继续使用原有 fused projection 路径,避免改变投机校验的 graph 路径、接受率和 decode TPOT。

2. BS=1 时跳过冗余 pack/unpack

batch_size == 1 且有效长度等于 seq_len 时:

  • 直接复用连续的 processed_q/k/v/g/beta,跳过 cat(...).unsqueeze(0)
  • 直接复用 MegaGDN 输出,跳过 zeros_like + narrow + copy_
  • 多 batch 或存在 padding 时仍使用原有通用 pack/unpack 路径。

本 PR 不修改三方依赖。TP4 功能所需的算子修复由独立 PR 处理;下述 TP4 数据来自已包含该修复的验证环境。

验证条件

  • 模型:Qwen3.5-2B,MTP draft,num_speculative_tokens=3
  • 并行配置:TP1、TP2、TP4。
  • 图模式:开启 graph,关闭 graph double buffer。
  • Prefix cache:关闭。
  • 输出长度:固定 max_tokens=25ignore_eos=true
  • Warmup:每个候选和 TP 配置独立启动服务后 warmup 8 条请求。
  • 正式请求:前 20 条请求重复 3 轮,共 60 条。
  • 输入长度:prompt tokens 范围 2708-5853,平均 4483.8,p50 为 4420。
  • 指标口径:E2E/TTFT/TPOT 使用服务端日志;接受率使用正式阶段 /vars counter。
  • Profiling:baseline 和最终 projection + pack 均采集 TP1/TP2/TP4 稳态 msprof。

性能数据

单位:ms。表格只保留与本 PR 两项改动相关的单项和组合实验。

实验 TP1 E2E TP1 TTFT TP1 TPOT TP1 接受率 TP2 E2E TP2 TTFT TP2 TPOT TP2 接受率 TP4 E2E TP4 TTFT TP4 TPOT TP4 接受率
baseline 218.798 125.483 3.887 71.34% 181.197 89.183 3.833 75.03% 163.533 70.650 3.870 70.77%
projection split 203.478 111.250 3.852 71.34% 172.848 81.517 3.803 75.03% 156.718 65.917 3.783 70.77%
skip BS=1 pack/unpack 221.490 124.867 4.033 71.34% 180.582 88.700 3.832 74.75% 156.943 67.500 3.723 70.77%
projection + pack(最终提交) 202.255 110.433 3.833 71.34% 170.277 81.000 3.723 74.70% 147.493 62.000 3.558 70.77%

最终组合相对 baseline:

TP E2E 变化 TTFT 变化 TPOT 变化 接受率
TP1 -16.543 ms -15.050 ms -0.053 ms 71.34%
TP2 -10.920 ms -8.183 ms -0.110 ms 74.70%
TP4 -16.040 ms -8.650 ms -0.312 ms 70.77%

projection split 是主要 TTFT 收益来源;BS=1 pack/unpack 单独运行时收益受执行路径和波动影响,但与 projection split 组合后,TP1/TP2/TP4 的 E2E、TTFT 和 TPOT 均优于 baseline。MTP 接受率未观察到回退。

Profiling

Qwen3.5-2B 共 24 层,其中 18 层为线性 attention。移除每层冗余的 projection merge/split 后,TP1 TTFT 累计降低约 15 ms。

修改前:

projection split before

修改后:

projection split after

本地验证

  • git-clang-format --diff:通过,未修改文件。
  • python setup.py build test:通过。

@pjgao pjgao force-pushed the bugfix/qwen35-mtp-accept-rate-20260704 branch from 3d4e3fb to fb2afd1 Compare July 8, 2026 09:58
@pjgao pjgao changed the title perf: optimize qwen3.5 mtp prefill on npu. [WIP] perf: optimize qwen3.5 mtp prefill on npu. Jul 9, 2026
@wanghuanjun2113

Copy link
Copy Markdown
Contributor

本优化和MTP没有关系,建议将 MTP从标题中移除

@pjgao pjgao changed the title [WIP] perf: optimize qwen3.5 mtp prefill on npu. perf: optimize qwen3.5 prefill projection and pack on npu. Jul 9, 2026
@pjgao

pjgao commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator Author

已按建议从标题中移除 MTP。本次代码优化作用于 Qwen3.5 的 prefill/chunked prefill 路径,MTP 仅为本次性能验证配置。感谢指出。

Comment thread xllm/core/layers/npu_torch/qwen3_gated_delta_net_base.cpp
@pjgao pjgao force-pushed the bugfix/qwen35-mtp-accept-rate-20260704 branch from fb2afd1 to 5c9cba5 Compare July 10, 2026 02:24
@pjgao pjgao requested a review from maojunx99 July 10, 2026 02:48
@maojunx99 maojunx99 merged commit c49ecf4 into xLLM-AI:main Jul 10, 2026
10 of 18 checks passed
@pjgao

pjgao commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator Author

本PR描述中最优tp2 e2e达到170ms,合入过程中pr1823先合入,rebase后性能劣化,e2e179ms。#1823 这里 在mtp增加了同步

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants