feat(qwen36): complete concurrent serving implementation with speculation - #605
Draft
Graffioh wants to merge 14 commits into
Draft
feat(qwen36): complete concurrent serving implementation with speculation#605Graffioh wants to merge 14 commits into
Graffioh wants to merge 14 commits into
Conversation
Graffioh
force-pushed
the
codex/qwen36-concurrent-features
branch
from
August 14, 2026 07:12
7b0debd to
352b308
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dependency
Depends on #595 and is intentionally stacked on its exact head commit
a90ffe45. The commits specific to this PR begin withfeat(qwen35): complete concurrent speculative serving.Summary
Completes concurrent Qwen3.6-27B serving for the requested Strix Halo
configuration:
verification graph, followed by accepted-path replay into durable recurrent
and paged-KV state.
before admission, persistent target/draft residency is enforced, and
effective prompt tokens drive capacity/timing while API billing stays raw.
including per-sequence logical mappings, pinned host backing, fair eviction,
pending-write protection, cross-slot block-table refresh, and
drafter-scored/LRU reselection.
EOS/stop/cap handling and per-request DDTree/PFlash/KVFlash telemetry.
requested feature actually activated.
emitted tokens per request on its first packed-tree sample, subsequent steps
use the existing AR path.
Measurements
Measured on AMD Ryzen AI MAX+ 395 / Radeon 8060S (
gfx1151), 128 GiB UMA,ROCm 7.2.4. Build: Release HIP,
DFLASH27B_HIP_SM80_EQUIV=ON. Every caseused a fresh server, an 8-token same-concurrency warmup, temperature 0, seed 1,
EOS ignored, and exactly 64 completion tokens per request. All reported rows
passed exact token accounting and request-correlated activation proof.
Full methodology, hashes, commands, prompt ranges, and caveats are checked in
at
STRIX_HALO_RESULTS.md.Paired AR / adaptive DDTree
Medians over three fresh-process repeats:
The supplied draft was below the continuation floor on this prompt cohort, so
the adaptive guard sampled one real DDTree step, emitted it normally, and then
used AR. This bounds weak-draft overhead rather than repeatedly paying for an
unproductive verify-and-replay path.
Complete screenshot configuration
One fresh-process activation/screening repeat per concurrency level. PFlash
auto retained about 4.9% of each 38K–45K-token prompt. KVFlash startup
telemetry confirmed an 8,192-token physical resident pool.
All C1/C4/C8/C16 rows proved DDTree, PFlash, and KVFlash active. Throughput
scaled through C8, then dropped at C16 when roughly 32K effective prompt tokens
shared the 8K resident pool.
Ablations:
prompt tokens compressed to 8,179.
13,474–20,203-token histories, 3,714 page-outs.
These long-context product/ablation rows are one-repeat engineering screens,
not the documented five-repeat publication matrix.
Validation
dflash_serverbuildzero failed cases or invalid proofs
discrepancy
git diff --checkSafety and compatibility
--draft-residency persistent; snapshot-cacheconfigurations remain rejected.
combinations remain gated.
Known limitations
NoEvictableBlockduring a selected prefill currently failsthat step instead of deferring it. The requested auto-8192/C16 configuration
completed without hitting this exceptional path.
the AR control and DDTree; C1 was byte-stable. The benchmark proves exact
token accounting and feature execution, not bitwise concurrent text
reproducibility.
throughput cliff; C8 was the peak in this screen.
AMD recipe alignment and single-request isolation
Commit
7b0debdemakes the AMD recipe explicit in the concurrent runner: the Q8_0 Qwen3.6 drafter,DFLASH27B_DRAFT_SWA=2048,DFLASH27B_PREFILL_UBATCH=512, DDTree budget 22, target/drafthip:0, persistent residency, and the exact screenshot flags are recorded per case. A producer/consumer synchronization barrier was also added between the local draft graph and target projection.The canonical concurrent C1 run proved DDTree execution (
67steps,181accepted tokens) and the startup marker reportsmode=packed-verify-replay. This is intentional: multi-slot serving uses the safe accepted-path replay today; standalone--fast-rollbackhas the single-sequence rollback implementation. The flag is preserved for command-line parity and metadata, but the marker prevents confusing it with true concurrent fast rollback.A fresh one-request isolation run (466-token prompt, 256-token completion) measured:
This isolates the implementation effect: paged AR itself is neutral, while PFlash/KVFlash add overhead on a short prompt and are intended for long-context/paging workloads. The concurrent packed verify/replay DDTree run was
11.48request decode tok/s on the same short C1 cohort, so it is not yet a replacement for the standalone blog decode number.