Repository navigation
Conversation
Port the original slot-isolation fix onto the rewritten upstream main, reconcile verifier fusion guards, and scope batch-MTP graph recordings. Validate vision records and retain shared draft-head format metadata. Original-author-commit: 10114f8 Superseded-PR: Niko1221#994 Talos-validation: CUDA build, focused regressions and 13 model checks passed
|
Tested on a 4-stage split. Rig: 4× RTX 5080 16 GB (PCIe Gen3), i9-10920X, Qwen3.8-Flash-Next IQ3_S, 262K, int8 KV,
So it works and stays exact, but on 4 stages batch MTP gives no gain over serial batching, and pipelining the stages is worth far more (~1.9× at 8 clients). This matches your own table (batch MTP 54.7 vs plain serial 55.6 vs pipeline 61.0). A pipelined variant (groups > 1) would be the interesting next step for splits. |
…o fix/pr1253-staggered
…o fix/pr1253-staggered
…o fix/pr1253-staggered
…o fix/pr1253-staggered
|
@ilumn I have been running the same design on 2x RTX 3080 20 GB (UD-Q4_K_XL, two slots) and opened #1636 for it, based on current main. It conflicts with this PR in |
|
Thanks. Your own table and blange48's four-stage run both show that batch MTP over a serial split is no faster than the pipelined groups, which are the default on a split, and we already carry a batch-MTP path for two stages from #1636. So we are not taking it. A pipelined batch-MTP variant with a measured gain would be welcome. |
|
Thanks for the pull request. We're resetting the tracker for 0.2.0-beta. There are more than 1,300 open issues and pull requests, too many for us to review properly, so we're closing everything that isn't being worked on right now. Closed here does not mean rejected. To reopen it takes about two minutes:
The rules are in CONTRIBUTING.md. |
This enables per-slot multi-token prediction (MTP) when the target model is split across CUDA GPUs. Previously,
--layer-split 24 --batch 4 --batch-mtpdisabled batch MTP and used ordinary batching. The enabled path verifies one proposal per slot through the stages serially, with--batch-groups 1, and commits the same accepted prefix on every stage.A slot drafter needs the target model's final residual and output head, which reside on the last GPU in a layer split. Slot drafters now bind that GPU's weights and head, retain their residual buffers and draft-KV copies there, and use the first stage's PLE history. Each target stage supports eight-row verification windows with bounded graph caching. Allocations, idle waits and cleanup select the GPU that owns the corresponding buffers. Shared draft-vocabulary metadata supports the top-two diagnostic.
This depends on #1242, which isolates concurrent slots' image positions and corrects shared draft-head metadata. That dependency is included in this main-based PR. The serial multi-GPU feature commit is
0de9365f18a2ddcc7e428cc70a639ffcdfcc3b55(7 files, 210 additions, 25 deletions), based on dependency commit8fc9490e9cb62e4d3c3ab5f09c1ca8d42f4a8623; validation used main82f46a8c8f475f001ad76d92f58f4a4f8ffb0253.Validation on Talos
CUDA 13 / GNU 13.3 Release build, 2× RTX 5090 32 GiB, Swift IQ3_XXS, native Q5_K head, 106299-token draft subset, 8K allocated context, split 24, visible device order 1 then 0, 3 GiB reserve per GPU. Exactness controls:
STRATA_IQ_MT_MIN=1 --pcie-frac 0 --adapt-every 1000000 --no-prefill-borrow. Requests generated up to 64 tokens; long prompt 1210 tokens. Independent review covered this serial implementation and its validation evidence.--mtp-q4 head,STRATA_MTP_TOP2=1Speculative runs were checked for grouped-row captures and no disabled-option warning; lifecycle logs prove cache and turn-checkpoint restore paths ran.
Performance and limits
Four fixed prompts, 64 tokens each, same binary/settings, 3 repetitions per batch mode/profile. Rates below are median tokens/s. Normal MTP solo controls ran in each invocation; its rates separate decode from prompt reading. Batch overall includes admissions; the second batch rate starts at the first batch token and still includes overlapping admissions.
Batch MTP was slower than ordinary pipelined batching in both measured profiles. It adds opt-in compatibility for split models; the default is unchanged. These 64-token measurements do not establish long-context or sustained server-load performance.
Explicit fallbacks remain for
--batch-groups > 1, same-device split stages, helper caches, remote expert optimization and peer devices.--pipeline-windowsremains off with batch slots. Validated scope is two CUDA GPUs and the existing model/runtime above. HIP, more than two GPUs, more than five slots, worst-case context/memory pressure, other model formats and speculative pipeline groups are unrun. The existing idle split BYIELD path is outside this validation; the new harness checks supported staggered admission. Penalty sampling and coupled draft sampling were not validated.With a compatible two-GPU model config, the included tools reproduce rotating batches and lifecycle checks:
Mixed-image/performance harnesses, exact local command records and logs are retained separately in the validation bundle.
Longer-run exactness investigation
A separate experimental implementation overlaps speculative slot groups across the GPU stages. Its 32-request workload at concurrency 4 and 512 generated tokens per request produced intermittent exact-token mismatches, including with overlap disabled while retaining the experiment's private verifier/drafter structure. Its benchmark matrix is paused. The cause and whether the published serial implementation is affected remain unresolved; the scoped results above do not establish long-run exactness for that experiment.
The existing QFUSE activation-quantization issue (#1139) was investigated as a possible explanation: batched GDN can consume stale quantized activations when
STRATA_QFUSE=1. The QFUSE correction in the concurrent-generation PR (#1209) addresses that path, with runtime validation reported on gfx1151. The Talos CUDA diagnostic configurations leave QFUSE disabled, so this specific mechanism is inactive there. Other underlying causes remain under investigation.