Repository navigation
Abyss v1.3.87 — Qwen3.8-Flash-Next の MTP 付きが約 12% 速く(RTX 5090 で約 129 tok/s)
Qwen3.8-Flash-Next を MTP ドラフター付きで使うときの答えが、約 12% 速くなりました。RTX 5090(PCIe Gen4 x4)、ISTA-DASLab GSQ-RCO IQ3_S、文脈 32K で、v1.3.86 と v1.3.87 のビルドを同じセッションで交互に測りました(greedy の 256 トークンの答え 4 本を 2 回ずつ)。
| v1.3.86 | v1.3.87 | |
|---|---|---|
./abyss.sh --bench の答え(3 問、MTP ドラフター on) |
116.1 tok/s | 128.5〜129.5 tok/s |
| 4 本の平均、ドラフター on | 約 116 | 約 130 |
1 トークンずつ(GEN spec=0)、4 本の平均 |
約 106 | 約 107(変わらず) |
| 品質の確認(bench/ref との KL) | 0.0022 | 0.0022 |
v1.3.85 から数えると、--bench の答えは 87.6 → 約 129 tok/s で、約 1.5 倍です。
- MTP の検証窓でも、ハイパー接続の混ぜ合わせを 5 回の起動から 2 回にまとめました。出力はビット単位で同じです(v1.3.86 で 1 トークンずつの経路にしたのと同じ方法です。
hc4_fused_parityで、1〜8 列の窓もバイト単位で比べています)。- 窓の 97 回の混ぜ合わせが、2 列で 2.6 → 1.8 ms、5 列で 5.5 → 2.6 ms になりました。ドラフター on で +7.7% です。
STRATA_Q4X_HC_FUSE=2で、1 トークンずつの経路だけまとめて、窓は 5 回のままにできます(比べる用)。HIP では、これまでどおり既定でオフです。
- MoE の経路を決めるカーネルで、上位のエキスパートを GPU の warp の集約命令で選ぶようにしました(NVIDIA の sm_80 以降)。
- 選ばれるエキスパートと順番は、前と同じです(64〜512 個のエキスパート、1〜16 個の選択、同点、-inf、±0 で確かめました)。どのモデルも、出力は変わりません。
- 1 回が約 45k → 約 36.5k サイクルになり、Qwen3.8 ではドラフター on でも 1 トークンずつでも +2% です。
- このカーネルは、GLM、DeepSeek V4 / V4.1、Ornith、Qwen3.8 のすべてが使います。HIP は、元の選び方のままです。
- Qwen3.8 では、ドラフターが動いている間に、検証窓が使う PLE の表の行を先に読んでおきます。 窓が行を待つ時間が 0.8〜1.1 ms から 0.1〜0.25 ms になり、ドラフター on で +3.1% です。
STRATA_Q4X_PLE_PREFETCH=0でオフにできます。 - ほかのモデルも確かめました(RTX 5090、v1.3.86 のビルドとの比較)。
- GLM-5.3-Flash Maya-S-v2 IQ2_XXS:答え 64.3 / 64.0 tok/s(v1.3.86 は 64.2)、8K のプロンプト 1087 / 1091(1087)。品質も同じです。
- DeepSeek V4.1 UD-IQ2_XXS:答え 22.9 / 20.7 tok/s(21.6)、8K のプロンプト 360 / 319(356)。2 回目は SSD が遅い時間帯に当たりました。KL は 0.0081 / 0.0082(0.0080)です。
- 経路のカーネルが書き込む内容は、全部(リクエストの領域、窓の列の領域、その後ろの見張り用のデータまで)、v1.3.86 とバイト単位で同じでした。
--benchのドラフターの確認は、新旧どちらのビルドでも、ときどき最初のほうで分かれます。エキスパートの置き場所によって動く、ほぼ同点の入れ替わりです。エキスパートの入れ替えを止めた状態で、V4.1 は新旧とも 3 回に 1 回 0 トークン目で、GLM は新で 3 回に 2 回、旧で 4 回に 1 回 7 トークン目で分かれました。
- AI PRO R9700 では確かめていません(今は PC に挿していないため)。HIP は既定では変わりません(コンパイルは確認済み)。
更新方法はいつもどおりで、git pull してから ./setup.sh を実行してください。
Qwen3.8-Flash-Next with its MTP drafter decodes about 12% faster. RTX 5090 (PCIe Gen4 x4) with ISTA-DASLab GSQ-RCO IQ3_S, ctx 32K, the v1.3.86 and v1.3.87 builds alternated in one session (4 greedy answers of 256 tokens, twice):
| v1.3.86 | v1.3.87 | |
|---|---|---|
./abyss.sh --bench decode (3 questions, MTP drafter on) |
116.1 tok/s | 128.5-129.5 tok/s |
| 4 answers, drafter on (mean) | ~116 | ~130 |
token by token (GEN spec=0), the 4 answers' mean |
~106 | ~107 (unchanged) |
| quality check (KL against bench/ref) | 0.0022 | 0.0022 |
From v1.3.85, --bench decode went 87.6 -> ~129 tok/s, about 1.5x.
- The MTP verify windows' hyper-connection mixes run in two launches instead of five, with the same bits, as the token path's since v1.3.86 (
hc4_fused_paritynow also checks windows of 1-8 columns byte for byte). A window's 97 mixes took 2.6 ms at 2 columns and 5.5 ms at 5; now 1.8 and 2.6. Drafter on +7.7%.STRATA_Q4X_HC_FUSE=2keeps the token path fused and the windows on five launches (for A/B); off by default on HIP, as before. - The MoE route kernel picks its top-k with the GPU's warp reductions (NVIDIA, sm_80 and newer). The same experts in the same order as before (checked over 64-512 experts, 1-16 picks, ties, -inf and +-0), so every model's output is unchanged; a route takes ~45k -> ~36.5k GPU cycles. Qwen3.8: drafter on and token by token both +2%. Every model routes through this kernel (GLM, DeepSeek V4 / V4.1, Ornith, Qwen3.8); HIP keeps the old selection.
- Qwen3.8 reads a verify window's PLE table rows while the drafter runs, so the window waits for its rows 0.1-0.25 ms instead of 0.8-1.1 ms. Drafter on +3.1%.
STRATA_Q4X_PLE_PREFETCH=0turns it off. - Other models, on the 5090 against the v1.3.86 build:
- GLM-5.3-Flash Maya-S-v2 IQ2_XXS: decode 64.3 / 64.0 tok/s against 64.2, 8K prompt 1087 / 1091 against 1087, the same quality.
- DeepSeek V4.1 UD-IQ2_XXS: decode 22.9 / 20.7 against 21.6, 8K prompt 360 / 319 against 356 (the second run met a slow SSD spell), KL 0.0081 / 0.0082 against 0.0080.
- The route kernel's whole output (request block, window column blocks, canaries after them) is byte-identical to v1.3.86's.
--bench's drafter check sometimes parts at the first tokens on both builds (a near-tie that moves with where the experts sit): with expert swaps pinned, V4.1 parted at token 0 in 1 of 3 runs on each build, GLM at token 7 in 2 of 3 on this build and 1 of 4 on v1.3.86's.
- Not checked on an AI PRO R9700 (not in the PC). HIP is unchanged by default (it compiles).
Update as usual: git pull, then run ./setup.sh.