Repository navigation
Conversation
为单节点 NVFP4 W4A16 设置 P2P-only NVSHMEM 默认值,绕过 proxy 未初始化退出状态;保留显式配置并排除使用其他 A2A 后端的 draft。按要求不增加 behavioral regression tests。
Open
4 of 5 tasks
5 tasks done
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.
Motivation
@HumansAnd
Add opt-in NVFP4 W4A16 to the existing FlashInfer MegaMoE integration. Reuse
SGLANG_FLASHINFER_CUTEDSL_NVFP4_W4A16=1for serialized ModelOpt NVFP4 and--quantization nvfp4_online, keeping expert activations and EP transport in BF16.merged as
a03f2205263d4e691d68e485bff287e37a19b6c3on 2026-09-28 and isnot yet in a release. Use a source build containing that merge; no package
version bump is made here. The adapter API was checked against the merged
source. Historical GPU results below retain their original FlashInfer pins.
opt-in pattern from #35120.
Modifications
Sm100_Bf16_Nvfp4_Bf16_Cutedsl_MegaMoeConfig. Preserve packed weights, blockscales, and separate per-expert FP32 weight scales. Reuse the existing layer
construction and fused runner. Use standard
(weight, block_scale)pairs andstage per-expert FP32 weight scales each forward; FlashInfer owns reference-counted
workspace pooling. Remove SGLang's private workspace assignments/cache.
inputs without activation-scale tensors. Online weight quantization retains
its source-precision/exclusion semantics; the selected runner bypasses
activation quantization.
BF16 combine and DP=TP=EP with DP attention.
SGLANG_FLASHINFER_MEGAMOE_IN_KERNEL_FC2_REDUCE=1now permits BF16 atomicFC2 reduction; tuning may still select external reduction. Default remains
disabled (external FP32 accumulation). Reject non-BF16 W4A16 combine.
Nemotron ReLU-squared experts remain unsupported.
then copy newly prepared weights back into the same buffers. Apply this
W4A16 hook and retain its live MegaMoE instance so captured weight/scale
addresses and the shared workspace remain stable across
/update_weights_from_disk.GlmMoeDsaForCausalLMin the existing MegaMoEarchitecture guard. Preserve full DP token counts and synchronized graph
buckets across ranks for profile selection and for a target using a
standard-communication MTP draft. Expert inputs stay local.
separate from SwiGLU clamps. Admit both K3 architectures; use standard TopK and
local-token EP dispatch/shared-expert handling. Keep DeepGEMM separate.
workspaces. Cover captured/eager decode bounds and adaptive MTP verify width,
plus one DP-adjusted prefill chunk (
max_prefill_tokenswithout chunking).Larger decode shapes use that profile; reject overflow. Prepare before capture.
Reuse FlashInfer's namespaced cache: load/publish once per startup context,
stage once across layers, cache geometry keys and binary-search capacities.
No separate sidecar;
SGLANG_FLASHINFER_AUTOTUNE_EXTENDis unchanged.weight_scale_2to one alongside inversescales, keeping gate/up compatible and ordinary weights random. Checkpoint
loading/updates and quantization interfaces are unchanged.
bound regressions, plus one dummy-scale test covering FC1/FC2 neutral scales
and random ordinary weights. Qwen3 online GSM8K and serialized NVFP4 reload
use external FP32 combine (
SGLANG_FLASHINFER_MEGAMOE_IN_KERNEL_FC2_REDUCE=0);the online-quantized RL reload fixture is excluded.
enable_in_kernel_fc2_reduceand native workspace pooling. No drafter MegaMoEor deterministic-mode special handling. Prior W4A4 GPU coverage is dummy
startup/generation; full-model/native reuse coverage is W4A16. SiTU checks are
CPU-only. Native tuning requires EP=WORLD for the upstream collectives.
Example on four Blackwell GPUs (requires FlashInfer sgl-project#5019):
Rebase onto current main (2026-09-28)
Rebased to
6dad1524901dd070d8720f88b58bccfc5f9579f7at baseline05627ffec57fe5fef1a4a1619115ef0df6f0aa15; head is recorded in the SiTU section.Preserve upstream's explicit
MoE backend selection and separate target/draft DP metadata, while retaining
MegaMoE's synchronized counts for capacity-profile selection. Preserve direct
runner rank fields and the physical-GPU cache suffix. The GPU validation
below pins the rebased head and source-built FlashInfer before SiTU wiring;
historical serving results retain their original tested revisions.
SiTU wiring validation (2026-09-29)
Head
561ad447c74bb757a40677ee9ce038f9ca429d2c: macOS/Python 3.12.12,CPU Torch 2.14.0. Adapter checks cover both precisions, activation constants,
scale storage and W4A16 reload. Serving imports and kernel calls are stubbed.
Eight real FlashInfer config constructions at
90a709ca842996e3431ece0346d97b73693eff94also passed; activation changes produce distinct tuning-cache keys. Scoped
pre-commit/diff checks passed. No full-model E2E was added or run; prior GPU
results below do not validate K3/SiTU.
From the SGLang checkout:
The existing warning is pytest's unknown
asyncio_modeoption.GPU validation before SiTU wiring
9d38e0530a1e35d1756a7fabf044bc39b77209b8and FlashInfer294fe64b5ce9b7902f842f0dd7f31c0285823d3e(source package reports0.7.0).Both checkouts were clean; file hashes matched. FlashInfer includes merged Correct grafana heatmap. sgl-project/sglang#5019.
Image
lmsysorg/sglang:nightly-dev-cu13-20260929-79cafec0, driver 590.48.01,Python 3.12.3, Torch 2.13.0+cu130/CUDA 13.0, Triton 3.7.1, NVSHMEM 3.4.5.
Image digest:
sha256:0f075735a6bf913a7cc1cd7ece4f526ae8af70fc5b88fdc02d9efe92a61cf3ae.Image Torch, CUDA, Triton and
NVSHMEM packages were preserved. Removed the three image FlashInfer packages,
installed CuTe DSL and CUDA-13 libraries 4.7.1 plus
nccl-extensions==0.1.0,and built FlashInfer editable from the pinned source.
with only
weight_utils.pyrestored from05627ffec57fe5fef1a4a1619115ef0df6f0aa15.Restoring the fix gives 56 passed, 29 subtests passed, 15 warnings, with no
failures, errors or skips. The warning classes are an unknown pytest
asyncio_modeoption and PyTorchscript_methoddeprecation. These registeredunit suites mock kernel calls; actual native/model results follow.
Reproduce source installation and registered unit suites
Inside the image above, use independent checkouts at the exact source revisions:
For the expected failing control, keep the final test file and substitute only
the old initializer, then restore the exact fixed file before continuing:
Unit output: failing assertion/result footer and complete fixed-suite output
Expected failing control, exit 1. Repeated traceback output and the warning summary
(identical to the fixed run) are omitted; exact assertion and result follow:
Fixed suites, exit 0:
W4A16 kernels, native tuning, graphs and workspace reuse ran with synthetic
scheduler metadata. Control outputs came from independent fixed-default native
sessions, not a PyTorch oracle. Cold/warm AUTO calls were 5/0 and graph replays
were 12 per rank. No timing or performance comparison is claimed. An initial
hostname-rendezvous attempt stopped before workers; successful runs used
127.0.0.1.Native EP4 commands and all rank results
Harness
setup/smoke_autotune_gpu.pySHA256:88338c2e2ad1d077e7d51a24f2e8a6df2ed0bdfa9501435c38d763bf4087aadc.Complete JSON fields shared by every rank report:
{"passed":true,"capacities":[1,2,4,8,16],"bootstrap_capacity":4,"decode_num_tokens":16,"prefill_num_tokens":8,"startup_contexts":2,"checked_counts":[[0,1,1,2],[0,1,2,7],[8,8,8,8],[0,4,9,16]],"graph_replays":12,"bit_exact":true,"pool_refcounts":[2,1,0]}Remaining fields, one row per original report:
Archive SHA256:
a8df993571728eba3178b21e82a4c933c93600f7087e6d467af41b03e8f994a3.Actual model checks, using the source/image pins above and TP=DP=EP=4:
online GSM8K passed 190/200 (0.950) with BF16 KV; serialized NVFP4 reload
also passed with FP8 E4M3 KV. Both use W4A16 with BF16 expert activations/EP transport.
Online dense/excluded paths retain their FP8 source semantics.
Online: 200 examples, 128 threads, completion API, 512-token cap,
score > 0.90, original 4over6 recipe. All four schedulers received theNVSHMEM defaults from an unset parent environment.
These are correctness runs; concurrent jobs occupied disjoint GPUs, so the emitted
latency/throughput are not controlled performance results.
Raw online metrics and result footer:
Reload passed both
flush_cache=True/Falseupdates and memory release/resume;text/token IDs remained identical and logprobs satisfied the original
1e-4tolerance.After source installation, run the original classes; only pinned snapshot
paths and URL/ports change:
Dummy loader: W4A16 and W4A4 both passed (exit 0) on GPUs 0–3 with two randomly
initialized layers, one request per DP rank, eight output tokens/request and
finite output logprobs. Both native kernels tuned and captured decode graphs on
all four ranks; every scheduler received the production NVSHMEM defaults.
This checks startup/generation, not accuracy or performance.
{"w4a16":"1","passed":true,"requests":4,"completion_tokens":32,"all_output_logprobs_finite":true,"layers":2} {"w4a16":"0","passed":true,"requests":4,"completion_tokens":32,"all_output_logprobs_finite":true,"layers":2}Dummy launch function (
1: W4A16;0: W4A4):After stopping that server, run
launch_dummy 0 31030for W4A4.No new serving-throughput comparison is reported. All historical benchmark pins
and raw results below remain unchanged.
Concurrent-engine autotune cache isolation
028ae083d2gives target MegaMoE each physical GPU its own rank-cache filename. Colocated engines on disjoint GPU allocations can tune concurrently without overwriting one another's namespaced records; logical-device remapping preserves the physical identity, and restarts on the same GPUs reuse their files. This follows SGLang's existing device-scoped P2P cache pattern throughcurrent_platform.get_device_uuid.08084aad0emerges main35eb7cf8d6without rewriting PR history. It honors #40343 by using the runner's direct rank fields and preserves #39678's target/draft cache load/save lifecycle. Main still uses rank-only filenames, so the separate physical-GPU suffix remains necessary for concurrent engines.SGLANG_CACHE_DIRvalues.08084aad0e, the actual production module passed the existing autotune CPU checks plus four local isolation checks, including four overlapping process writers and a fresh-process warm restart. Serving/GPU imports were stubbed; native Gloo/filesystem/process operations were real. Existing adapter checks and scoped pre-commit passed. No new test file or documentation change is included; the small same-second regression extends the existing autotune suite. Concurrent GPU serving engines remain untested; the latest native checks cover cold/warm reuse and two contexts per process. Historical GPU results below retain their tested revisions.Single-node NVSHMEM startup workaround
Change: supply the following defaults before NVSHMEM initialization for all supported single-node FlashInfer MegaMoE quantization formats, with either no speculative decoding or draft A2A
none. This extends the earlier W4A16-only workaround; existing explicit environment values are preserved withsetdefault.Reason: the source comment links the upstream initialization fix NVIDIA/nvshmem#110. NVSHMEM 3.4.5 allocates its proxy global-exit request/code with
cudaMallocHostwithout initializing the integers. Our four-rank trace observed request2before publication and the proxy taking the global-exit path; matched source builds reproduced the startup failure without initialization and completed real GLM-5.2 C8 startup with the two initializations. The supported P2P-only configuration above instead skips proxy creation before those allocations, retaining the installed NVSHMEM wheel. Proxy selection, allocation and early return.Limits: all EP GPUs must support direct peer memory access. Device-side NVSHMEM global exit and proxy-based timeout polling are disabled; remote IB/UCX transport is unavailable. This does not change NCCL or UID bootstrap networking. Multi-node jobs and drafts using other A2A backends receive no automatic defaults. Explicit overrides may re-enable the affected proxy path. NVSHMEM option semantics.
Validation: actual NVFP4 W4A16 and W4A4 dummy-model startup, native tuning, CUDA graphs and generation passed with these defaults; registered online W4A16 GSM8K also passed. No dedicated NVSHMEM behavior tests were added. Multi-node operation, draft A2A and other quantization formats were not tested; historical benchmark numbers retain their original revisions.
Accuracy Tests
GPU-tested source:
6d8a58f177a1488e10e8567a3fa4b4fccd0a26e2; FlashInfer source:ad0a5e5e78e57070ec7c582efe733cb55cd8839f(FlashInfer sgl-project#5019). Kernel code is unchanged.The earlier GPU-tested revision was rebased onto upstream
2fa6b94e3440d28dab7460246f0b34426a4e4b80. Preserve upstream's manual genericcache load/save and model-owned prefill tuning; the Mega namespace publishes
before the shared cache is saved. FlashInfer is unchanged;
model_runner.pyand its unit test have no PR diff. Whole-PR pre-commit and GitHub lint passed.
GitHub GPU CI is blocked by the PR's draft status; GPU results below are from C2.
hu-pdx-54, B300 SM103, four GPUs per run (TP4/DP4/EP4).Image
lmsysorg/sglang:nightly-dev-cu13-20260918-20518d85, digestsha256:d46a59f4b98658f728a1e006c003ad5ee0628e999fd8b2bef71ac1bb61b814da.Driver 590.48.01; Python 3.12.3; image Torch 2.13.0+cu130/CUDA13.0 retained;
CuTe DSL 4.7.1/compiler CUDA 13.3; NVSHMEM 3.4.5/Python 0.3.1;
apache-tvm-ffi 0.1.11.
Removed incompatible image FlashInfer cubin/JIT-cache packages; imported
the pinned FlashInfer 0.7.0 source and this SGLang checkout.
Model tests ran concurrently on disjoint four-GPU groups; their timings are
accuracy-test output, not controlled performance measurements.
SGLANG_FLASHINFER_AUTOTUNE_EXTEND=0andSGLANG_FLASHINFER_MEGAMOE_IN_KERNEL_FC2_REDUCE=0throughout. Model startupprepared the 4096-token profile before capture; no generic extra EXTEND pass.
Online-model capacities are powers of two through 2048, then 3839 and 4096;
serialized-model capacities are powers of two through 4096. Separate cold/warm
native runs exercise actual tuning and cache reuse; all native candidates remain enabled.
score > 0.90unchanged; one test passedNative integration uses two layers with the same geometry in separate startup
contexts. It checks empty/uneven ranks, bit-exact outputs against independent
fixed-default sessions, graph replay with runtime scale updates, and pooled
reference counts 2→1→0. Target adaptive/eager sizing has a unit regression:
graph batch 128/eager batch 256 at maximum width 6 requires 1536 tuned rows.
The Qwen model tests are non-MTP; no new full-model MTP performance claim is made.
Reproduce the registered tests
Use the pinned image and independent SGLang/FlashInfer checkouts at the commits
above. Preserve image Torch; install FlashInfer from source without its optional
C++ EP backends, and select the checkouts through
PYTHONPATH:The model wrapper only selects the registered class, an unused localhost port
and the exact cached snapshot below; launch flags, workloads and assertions stay
in the registered test. Run sequentially on the same four visible GPUs:
Complete final test summaries and native rank results
Native emitted fields (all 16 reports): bootstrap capacity4, prefill8 and
two startup contexts for every row. Decode2 uses token-count vectors
[0,1,1,2],[0,1,2,7],[8,8,8,8]; decode16 also checks[0,4,9,16].[1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 8][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0][1, 2, 4, 8, 16][2, 1, 0]Native/unit archive SHA256:
6ff9acf41a44e6b48ef3a15bf118cc7187cb3a346bc31e6c808cde78eb215bc7.GSM8K archive:
b527f4abe8f98504d67fd4f151fb5b748cd93f4616dd1fb6ac09a06211791630.Reload archive:
314622e034c8109d222196dfeee51fcb704f01cb2699d1e52963060784fb57b0.All source hashes were unchanged and all owned processes exited.
Scope: no sanitizer or controlled before/after performance rerun in this update.
The older performance measurements below predate native MegaMoE startup tuning.
Historical end-to-end performance, complete raw metrics and reproduction commands
Speed Tests and Profiling
Historical timings: these measurements predate the startup MegaMoE
autotuning added here. They retain their original source pins and external FC2
reduction. They do not establish the current head's end-to-end speedup.
No clear end-to-end speedup over split CuTe DSL with FlashInfer A2A in these runs. Mega averaged 28.095 s / 9634.06 output tok/s, versus 27.985 s / 9671.92 tok/s for that split path (0.996×). Against split CuTe DSL with standard communication (
none), Mega showed a modest 1.043× speedup (29.316 s / 9232.68 tok/s for split).hu-pdx-83, same 4× B300 SXM6 AC GPUs (0–3, SM103), sequential servers. Imagelmsysorg/sglang:nightly-dev-cu13-20260913-fa663e72, digestsha256:91da70aa3c078b09af1e7501d7fee0827ff2683d0b4707e3c9f7663e2f824f5a. Driver 590.48.01; Python 3.12.3; PyTorch 2.13.0+cu130 / CUDA 13.0; Triton 3.7.1; Transformers 5.12.1; sglang-kernel 0.4.6.post1; CuTe DSL/libraries 4.7.1 (native compiler CUDA 13.3); FlashInfer Python/cubin/JIT-cache 0.6.18 / 0.6.18 / 0.6.18+cu130. Image PyTorch/native SGLang extension retained.ac2bfe25067a27e59f42a6fbce5145fcfa585455; FlashInfer083a9fd39e7ddda43a8b912ef50f7a13390287f9; Qwen model/revision shown below. All routed experts use online NVFP4/BF16; dense layers retain FP8. No test-only quantization overrides or expert exclusions; the existing online loader applies its standard weight-quantization recipe.trtllm_mha; dense FP8 backendauto; KVauto→ BF16; memory fraction 0.87; chunked prefill 4096/rank;max_prefill_tokens=16384; full decode graphs through batch 512. Prefill graphs explicitly disabled in all arms to match Mega's supported configuration.noneretains EP4, gathering before routing and reduce-scattering afterward. Split retains default fused finalize (True); Mega uses external top-k reduction. Reduction grouping differs; matched precision does not imply bitwise parity.randomrequests, seed 42; default range ratio 0.0 independently samples input/output lengths from 1–8192 / 1–2048, using repeated/truncated ShareGPT text (anon8231489123/ShareGPT_Vicuna_unfiltered, snapshot192ab2185289094fc556ec8ce5ce1e8e587154ca). These are upper bounds, not fixed lengths. Defaults: unlimited arrival/concurrency, streaming, temperature 0, ignore EOS. 1,089,460 benchmark-reported input / 270,665 output tokens per measured run. Input totals are sampled lengths; decoded text can retokenize differently at the server. Observed request lengths are 35–8155 input and 2–2043 output tokens.--flush-cacheclears warmup prefixes before timing; within-run prefix caching remains enabled. Two samples each, order Mega → split FlashInfer → split standard → split standard → split FlashInfer → Mega (ABCCBA).Reproduction commands
Use Bash in the pinned image with sources installed/checkpoint cached. Run setup in both shells; choose one server below, then stop it fully before the next sample.
Mega server:
python -m sglang.launch_server "${SERVER_ARGS[@]}" \ --moe-runner-backend flashinfer_megamoe --moe-a2a-backend flashinfer_megamoeSplit FlashInfer server:
SGLANG_FLASHINFER_NUM_MAX_DISPATCH_TOKENS_PER_RANK=4096 \ python -m sglang.launch_server "${SERVER_ARGS[@]}" \ --moe-runner-backend flashinfer_cutedsl --moe-a2a-backend flashinfer \ --flashinfer-a2a-dispatch-type bf16Split standard server:
python -m sglang.launch_server "${SERVER_ARGS[@]}" \ --moe-runner-backend flashinfer_cutedsl --moe-a2a-backend noneAfter server readiness, set
RUN_TAGfor this sample and run both client commands:All six measured samples completed 256/256 requests with zero errors and identical per-request input/output lengths. Warmup results are excluded below.
Mega's pooled output throughput was 0.39% lower than split FlashInfer and 4.35% higher than split standard. Mega's 28.074–28.116 s duration range overlaps split FlashInfer's 27.853–28.116 s range; the two implementations performed similarly in this workload. The mean TTFT/ITL values were 4792.40/14.80 ms for Mega, 5030.20/15.01 ms for split FlashInfer, and 5163.11/15.19 ms for split standard. TTFT includes queueing and prefill; these client metrics do not isolate kernel speed.
Complete raw Qwen metrics (all six summaries transposed)
sglangsglangsglangsglangsglangsglanginfinfinfinfinfinfnot setnot setnot setnot setnot setnot set25625625625625625628.0727.8529.0829.5528.1228.121089460108946010894601089460108946010894601089460108946010894601089460108946010894602706652706652706652706652706652706652706502706522706412706412706532706509.129.198.808.669.119.1138807.2739114.6637468.1036862.1638748.4038749.379641.269717.639308.569158.029626.649626.8820324.0023047.0021891.0019908.0021478.0021801.0025625625625625625648448.5348832.2946776.6646020.1848375.0448376.25187.29190.41184.34186.09191.67184.9720538.8720716.9620937.5421483.4821050.6520314.4722163.7022495.3322392.3723068.7522670.9221867.3127190.8626830.7827933.7428387.5627692.9726938.4527503.3227319.4128512.8228974.8627922.8327545.2227848.8127620.1328851.1529330.3828007.8627900.614939.484906.115113.085213.155154.294645.334442.614640.234568.564668.294643.734389.127939.448418.788392.028560.188418.457975.878478.848905.148890.079056.538906.338439.659022.509527.009498.269666.679516.299016.2064.2170.5167.9169.4368.0367.3215.1115.2315.1115.6515.3414.9730.8234.3533.0134.0033.2631.8349.2151.1351.2952.4751.7048.97344.27366.99368.86374.38367.03346.9214.7714.9714.9815.4015.0514.8311.1410.309.9211.889.469.6425.3025.7727.8723.9728.2227.3629.7531.9732.4726.8932.5932.8536.2787.8038.0333.5438.2837.926423.878255.067038.537198.037017.007719.65GLM-5.2 NVFP4 W4A16 with bundled BF16 MTP
One retained Mega sample versus the requested image-version FlashInfer Split control, on the same 4×B300: MegaMoE delivered 1,887.80 output tok/s versus 1,356.73 for Split CuTe DSL / standard communication (
none): +39.14% throughput / -28.13% duration, or 1.3914× Split/Mega duration. This is a mixed-FlashInfer comparison, not an isolated kernel speedup. The new release-FI Split is primary regardless of direction; all earlier Split samples remain retained, without pooling or fastest-sample selection.The Split regression remains: release Split is only +0.3419% versus the preceding ad0 Split (1,352.107685 tok/s), -0.7669% versus the earlier ad0 Split (1,367.215440), and -19.1324% versus the old PR's two-Split pool (1,677.718482). Restoring the image's three FI package versions did not recover that historical throughput or remove the mixed MTP acceptance pattern below; this does not establish the cause or a numerical correctness defect.
6d8a58f177a1488e10e8567a3fa4b4fccd0a26e2. Mega uses FI #5019ad0a5e5e78e57070ec7c582efe733cb55cd8839f, version 0.7.0; Split importsflashinfer-python==0.6.18,flashinfer-cubin==0.6.18,flashinfer-jit-cache==0.6.18+cu130from an isolated overlay, with no ad0 source override. Imagelmsysorg/sglang:nightly-dev-cu13-20260918-20518d85, amd64sha256:b518f4f8cd15664cf0f733e9bf4fd2105c9c994882a369b247364394db99f596; hosthu-pdx-146, four of eight B300 GPUs used.e1d5db5fbbb5563af0120260b72f845885a8567fabd0c2a8069852d72d12c334, indexab782ea1432ef96fa4f8931b5732f835e7a74f08e499800ae99c77aa00a13f89; no full-weight payload rehash.FLASHINFER_TOPK_ALGO=default), draftsgl-kernel; FP8 E4M3 KV / page 64, target/draft scales 1.0; prefill graphs off, decode graphs on, stream interval 32. EAGLE steps/top-k/draft-tokens = 3/1/4, explicitly unquantized bundled draft with Triton/none. Split uses nonfused finalization, Mega external FC2 reduction. No FlashInfer-A2A Split arm.35f0e213ce091ed9b9af2a1f0755e9d39f9ccec34ab281cd4ca60d70f6479ba4. All saved full-phase ordered input/output length arrays match across the retained Mega and three Split samples: input 35–8155, output 2–2043; each measured sample has 1,089,460 input / 270,665 output tokens and 256 successes, zero errors.*The client scalar is
internal_states[0]in its own/server_inforesponse, whose states arrive in response order. It is not a fixed DP rank or a global weighted mean. Separately saved after-measurement response-order values are Mega [3.924492, 3.931288, 3.935730, 3.991198] and release Split [2.234555, 3.787245, 2.314098, 2.302491]. These are four response values, not rank labels; the three-low/one-high Split pattern persists. Semantic output accuracy is not established by this throughput run.b594bc02c03011288dee9c1ed99f256ea3e4f763, FI083a9fd39e7ddda43a8b912ef50f7a13390287f9, imagenightly-dev-cu13-20260913-fa663e72and another physical node/cache history. One new versus two old samples does not isolate autotuning or establish significance; the larger refreshed pair gap accompanies both the faster Mega and slower Split samples.[1,2,3,4,5,6,7,8,10,12,14,16], target/draft-decode/draft-extend widths 4/1/4. Mega recorded capacities[1,2,4,8,16,32,64,4096]. Release Split started with an empty run cache and saved nine W4A16 profiles[1,2,4,8,16,32,64,128,256]in each of two four-rank namespaces; draft-namespace copies do not prove draft W4A16 execution. The three FI providers changed throughpip --target; the base package freeze remained unchanged. All 537 transferred evidence files (including prior runs and preparation), exits, import origins, settings and ordered lengths were rehashed/checked. Earlier orchestration failures and successful ad0 Split samples are retained. No dedicated large-prefill tuning or best-tuned-backend claim.Full raw arrays, logs, source/bootstrap/preflight/import receipts, manifests and prior-run lineage are retained locally and in persistent campaign storage; no public raw-payload link is claimed.
Complete raw measured client summaries
Retained MegaMoE / MegaMoE — FI ad0
Primary Split CuTe DSL / none — FI 0.6.18
Reproduction: pinned setup, provider selection and identical workload
Inside the image above, retain its Torch installation. Use the existing checkpoint and ShareGPT file whose hashes are given above. The base setup used the following package versions and independently pinned source trees (the actual install used predownloaded wheels with
--no-index):For the release Split control only, install the image's three FI versions into an independent overlay, leaving the base freeze unchanged. Verify the exact wheel hashes before installation:
Select one arm at a time; use a separate cache directory for each. The reported release control used a new empty cache, without copied ad0 tactics. The original Mega sample is retained, not rerun. Shared exports and exact server/client arguments follow.
These exact arguments resolve chunked prefill4096/max prefill16384 in the pinned source. For each healthy server, run the following once with
PHASE=warmup-full, then once withPHASE=measured; the client’s extra short warmup remains enabled. Do not pool full warmup with measured results.Metric code: final acceptance fetch and benchmark duration; response arrival-order collection. This reported pair is one retained ad0 Mega and one image-version FI Split sample. The two earlier ad0 Split samples remain separate diagnostic evidence; this is not ABBA or a fastest-result pool.
Checklist
Review and Merge Process
/tag-and-rerun-ci,/tag-run-ci-label,/rerun-failed-ciCI States
Latest PR Test (Base): ❌ Run #36545802564
Latest PR Test (Extra): ❌ Run #36545801990
Latest PR Test (AMD ROCm 10): ❌ Run #36545802424