Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2caf376
CollectiveX: make roundtrip mean dispatch->combine in every row
Oseltamivir Aug 3, 2026
807e13b
CollectiveX: mark the roundtrip contract change and correct its docs
Oseltamivir Aug 3, 2026
8dde2ec
CollectiveX: publish the entry-skew bracket beside the headline
Oseltamivir Aug 3, 2026
a7e8884
CollectiveX: size nccl-ep HT combine to its receive count, align MoRI…
Oseltamivir Aug 3, 2026
1c50e47
CollectiveX: state why nccl-ep excludes routing and what MoRI's confi…
Oseltamivir Aug 3, 2026
20960ad
CollectiveX: cache nccl-ep's low-latency gate wrapper per handle
Oseltamivir Aug 3, 2026
f17d37b
CollectiveX: match MoRI's production warps, and surface what makes ro…
Oseltamivir Aug 3, 2026
029c357
CollectiveX: charge the fp8 quantize production pays, as one fused ke…
Oseltamivir Aug 3, 2026
f78330a
CollectiveX: add FP8 dispatch to flashinfer-ep
Oseltamivir Aug 3, 2026
8668338
CollectiveX: fix contradictory methodology claims and three review fi…
Oseltamivir Aug 3, 2026
cf4b1fa
CollectiveX: run MoRI in the buffer mode its pinned warp count belong…
Oseltamivir Aug 3, 2026
ff71649
CollectiveX: put the mode in the artifact filename / CollectiveX:将 mo…
Oseltamivir Aug 3, 2026
7ff4533
CollectiveX: stop the per-case hang guard from killing slow-but-healt…
Oseltamivir Aug 3, 2026
71a8700
CollectiveX: state the BF16 stage shape precisely / CollectiveX:准确表述 …
Oseltamivir Aug 3, 2026
d1165a2
CollectiveX: blank-line spacing after the wheel-version helper / Coll…
Oseltamivir Aug 3, 2026
a8c0411
CollectiveX: say that the FP8 quantize charge is fixed per call, not …
Oseltamivir Aug 3, 2026
c4b034c
CollectiveX: trim my own comments back to the ambient density / Colle…
Oseltamivir Aug 3, 2026
b4f4e39
CollectiveX: record what the warps-and-buffer pairing actually measur…
Oseltamivir Aug 3, 2026
7314f9f
CollectiveX: exclude the B200 node with a thermally-clamped GPU / Col…
Oseltamivir Aug 3, 2026
161c319
CollectiveX: call FP8 staging what it is, and stop rehearsing it in w…
Oseltamivir Aug 3, 2026
151b007
CollectiveX: reject an allocation holding a throttled GPU / Collectiv…
Oseltamivir Aug 3, 2026
bb11716
CollectiveX: record the library version the combine model was chosen …
Oseltamivir Aug 3, 2026
2fd9130
CollectiveX: exclude the h100 node with a thermally clamped GPU / Col…
Oseltamivir Aug 3, 2026
a6328fe
CollectiveX: fix four defects adversarial review found in my own work…
Oseltamivir Aug 3, 2026
cda28f8
CollectiveX: record the temperature spread the gate cannot act on / C…
Oseltamivir Aug 3, 2026
fc07823
CollectiveX: correct eight claims a third review found wrong / Collec…
Oseltamivir Aug 3, 2026
c59956b
CollectiveX: correct the README's FP8 coverage and state the roundtri…
Oseltamivir Aug 4, 2026
a7fc2ef
CollectiveX: keep the sweep at version 1
Oseltamivir Aug 4, 2026
7e8c229
CollectiveX: let low-latency use MNNVL, cover it on GB, and measure s…
Oseltamivir Aug 4, 2026
b368eae
CollectiveX: stop the deepep-v2 LL ladder below its receive cap
Oseltamivir Aug 5, 2026
90b16f7
CollectiveX: record the measured and clamped ladder in the artifact
Oseltamivir Aug 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions experimental/CollectiveX/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ responsibility. The full measurement methodology is in [docs/methodology.md](doc
The workload uses packed placement and one pinned `fixed-profile` resource configuration per
backend/topology; there is no tuning sweep. Combine is always BF16; dispatch precision is a swept
dimension — a BF16 control plus, on every backend whose FP8 dispatch is supported upstream
(DeepEP V2, MoRI, UCCL-EP), an FP8 dispatch, caller-prequantized in `normal` mode (in `low-latency`
the DeepEP and UCCL-EP kernels quantize internally from BF16; MoRI stays caller-prequantized). NCCL
(DeepEP V2, MoRI, UCCL-EP, FlashInfer EP), an FP8 dispatch, caller-prequantized in `normal` mode (in
`low-latency` the DeepEP and UCCL-EP kernels quantize internally from BF16; MoRI stays
caller-prequantized; FlashInfer has no `low-latency` path). That caller-side quantize is charged
inside the measured dispatch, because a production forward pass pays it on the critical path. NCCL
EP is BF16-only this release, so it emits the control alone. Coverage is uniform routing only. Cases
run in one of two modes:

Expand Down Expand Up @@ -50,6 +52,16 @@ every position in the sequence; each iteration takes the cross-rank maximum befo
p50/p90/p95/p99, and roundtrip p99 is the headline latency. A keyed BLAKE2b counter produces
byte-identical routing and gate weights on every runtime.

`roundtrip` means dispatch then combine — the transport — in every row. Expert-output staging sits
outside it and is reported separately as `stage`; under FP8 that component is harness scaffolding
standing in for the expert GEMM, which in production consumes FP8 operands natively rather than
materialising a BF16 copy, so `stage` must not be summed into a total or compared between backends.
That was not always true: rows measured before this change carried the staging copy inside the chain
for MoRI BF16 and FlashInfer BF16, so `roundtrip` meant different things in different rows. The sweep
`version` stays 1 across the change, so `implementation.stage_excluded_from_roundtrip` and whether a
`stage` component is present are the only way to tell the two generations apart.
See [docs/methodology.md](docs/methodology.md) for the full contract.

Correctness is checked against an implementation-independent oracle that reproduces the backend's
two-level reduction — intra-scale-up-domain FP32, then a BF16 cast of each domain's partial for the
scale-out send. The combine gate is a tight max elementwise relative error below `8 * 2^-8`
Expand Down Expand Up @@ -80,7 +92,7 @@ scale-up domain.
| MoRI | `production` — vLLM `--all2all-backend mori_*`, SGLang `--moe-a2a-backend mori` | `normal` mode uses the direct `IntraNode` kernel for scale-up EP8 on every CDNA SKU. EP16 is an unsupported coverage row on all three: the adapter pins `InterNodeV1` over 2x8 XGMI + RDMA, but its combine corrupts at the transport layer (ROCm/mori#475), so the registry ships `mori: [8]` and no EP16 case is dispatched. `low-latency` mode selects the `IntraNodeLL` decode kernel (single-call, pure-intranode, same compact layout and unweighted combine as `IntraNode`), decode/EP8 only. FP8 dispatch is caller-prequantized (per-SKU e4m3fnuz on gfx942, e4m3fn on gfx950); combine stays BF16 (`quant_type=none`) alongside BF16 dispatch |
| UCCL-EP | `candidate` — no engine exposes a UCCL-EP selector | [UCCL](https://github.com/uccl-project/uccl) EP: a drop-in, API-identical DeepEP replacement whose CPU proxies issue GPUDirect RDMA over plain `libibverbs` (no NVSHMEM/IBGDA), with software message ordering, atomics, and flow control; scale-up is single-node `cudaIpc` over NVLink/XGMI (never MNNVL). `normal` mode is the legacy `Buffer` `dispatch`/`combine` (unweighted rank-sum); `low-latency` reuses the legacy `low_latency_dispatch`/`low_latency_combine` decode kernels (weighted combine), decode/EP8 only. FP8 dispatch is caller-prequantized in `normal` mode (blockwise e4m3fn, per-SKU e4m3fnuz on gfx942); in `low-latency` mode the caller sends BF16 and the decode kernel quantizes to e4m3 internally (`use_fp8`). Combine is BF16. Runs on NVIDIA and AMD (H100/H200/B200 + MI300X/MI325X/MI355X), EP8 scale-up. Cross-node EP16 is functional (the internode RDMA path connects and the light case passes correctness) but its CPU-proxy throughput overruns the standardized per-case wall-clock budget on heavy token counts, so EP16 is an unsupported coverage row for now |
| NCCL EP | `candidate` — NVIDIA's own library, but no engine exposes an NCCL-EP selector | [NCCL EP](https://github.com/NVIDIA/nccl/tree/master/contrib/nccl_ep): NVIDIA's native MoE dispatch/combine on the NCCL Device API — LSA (NVLink load/store) intra-node, GIN (GPU-Initiated Networking) inter-node — driven through the `nccl4py` bindings. `normal` mode selects the `HIGH_THROUGHPUT` algorithm (FLAT `[N, hidden]` receive, unweighted rank-sum combine); the `LOW_LATENCY` algorithm carries an EP8 `ll_backends` row on all six NVIDIA SKUs, restored once the single-handle fix removed the NVIDIA/nccl#2303 signal aliasing. BF16 only: `contrib/nccl_ep/RELEASE.md` says "No FP8 support", so no FP8 case is emitted. That note is worth re-testing rather than trusting — the C library at our pinned commit does read `inputs->scales` and switch on e4m3/e5m2, the two documented FP8 exclusions are expert-major layouts we do not use, and `NVIDIA/nccl` has not moved since 2026-06-11 while `NVIDIA/nccl-extensions` has replaced that row outright. NVIDIA-only and CUDA 13 only. EP8 scale-up on H100/H200/B200/B300 plus EP8 and EP16 on GB200/GB300, where EP16 stays inside the MNNVL scale-up domain. x86 EP16 scale-out is an unsupported coverage row: the cross-node GIN path faults inside `nccl_ep.cc` identically on RoCE and IB across four SKUs, a GDAKI limit rather than a fabric-selection one |
| FlashInfer EP | `production` — vLLM `--all2all-backend flashinfer_nvlink_one_sided` | [FlashInfer](https://github.com/flashinfer-ai/flashinfer) `MoeAlltoAll`: TensorRT-LLM's one-sided MNNVL all-to-all, where each rank writes tokens straight into its peers' workspace windows and combine reads them back — no send/recv pairing and no NVSHMEM. `normal` mode only (there is one kernel family; no separate decode path), BF16 only, and GB200/GB300 only, since the transport is MNNVL. EP8 and EP16, both inside the scale-up domain. Unlike every other backend here, its combine accumulates in the PAYLOAD dtype rather than FP32: wheels before 0.6.16 reduce the top-k contributions with a pairwise BF16 tree that rounds at every level, so the oracle models that reduction directly (`combine_reduction = "topk-slot-tree"`) instead of widening the tolerance. 0.6.16 moved the accumulator to FP32, and the adapter switches models on the installed version |
| FlashInfer EP | `production` — vLLM `--all2all-backend flashinfer_nvlink_one_sided` | [FlashInfer](https://github.com/flashinfer-ai/flashinfer) `MoeAlltoAll`: TensorRT-LLM's one-sided MNNVL all-to-all, where each rank writes tokens straight into its peers' workspace windows and combine reads them back — no send/recv pairing and no NVSHMEM. `normal` mode only (there is one kernel family; no separate decode path), and GB200/GB300 only, since the transport is MNNVL. FP8 dispatch is caller-prequantized blockwise e4m3fn, carried as a fourth dispatch payload alongside its per-128-block FP32 scales, with the combine plane forced to BF16 — the C++ `toNvDataType` accepts only fp16/bf16/fp32 for combine, so an FP8 combine buffer would raise rather than corrupt. EP8 and EP16, both inside the scale-up domain. Unlike every other backend here, its combine accumulates in the PAYLOAD dtype rather than FP32: wheels before 0.6.16 reduce the top-k contributions with a pairwise BF16 tree that rounds at every level, so the oracle models that reduction directly (`combine_reduction = "topk-slot-tree"`) instead of widening the tolerance. 0.6.16 moved the accumulator to FP32, and the adapter switches models on the installed version |

DeepEP V2 means the `ElasticBuffer` implementation introduced by
[DeepEP PR #605](https://github.com/deepseek-ai/DeepEP/pull/605), not a newer legacy `Buffer` build.
Expand Down
Loading
Loading