This morning’s
Kolibri-1
note was an open serving MoE — weights, hybrid SWA, a named B200 train recipe, and a ~78 GB FP8 footprint a cluster operator can place. Last night’s
Credo Weaver
was near-package memory fanout.
Lightning V2 on Tenstorrent
was on-prem TTS.
Olmo-core 3
answered an open MoE training ticket. Tonight is the complementary kernel infra board under routed experts: on October 3, 2026, Meta uploaded dist-moe v0.1.0 to PyPI — CuTe DSL distributed Mixture-of-Experts kernels for NVIDIA SM100+ (Blackwell).
Primary:
PyPI dist-moe
·
GitHub meta-pytorch/dist_moe
·
docs.
Specs below are Meta’s (README / docs / package metadata) unless noted. There are no published throughput benches in this drop — I am not inventing tok/s, TFLOP/s, or rematch tables.
Spec sheet (named numbers)
Dist-MoE (dist-moe v0.1.0) |
|
|---|---|
| Uploaded | 2026-10-03T02:42:57Z (PyPI sdist) |
| Author / license | Meta Platforms, Inc.; BSD-3-Clause |
| What it is | CuTe DSL distributed MoE kernels for NVIDIA SM100+; fused token dispatch + grouped expert GEMMs + token combine |
| Caller owns | Top-k expert IDs + scores; activations / weights passed into routed_experts |
| Dist-MoE owns | Comm buffers, activation planning, scratch, graph-stable ops via routed_experts |
| BF16 | Standard pipeline — train + infer |
| MXFP8 E4M3 | Staged or Mega — train + infer |
| NVFP4 | Staged or Mega — inference only (Config(inference=True), num_activation_slots=0, prepared weights) |
| Validated stack | Linux ARM64; Blackwell SM100; Python 3.12; PyTorch 2.14.0+cu130; CUDA toolkit 13.0.3.0; NVRTC 13.0.88; CUDA Python 13.4.1; NCCL 2.30.7; Triton 3.8.0; CUTLASS DSL 4.6.1 |
| Runtime contract | No CPU fallback; import does not init CUDA or a process group; tests need ≥2 Blackwell GPUs |
| Context | Collective create; sequentially reusable; not reentrant; fixed num_local_input_tokens physical shape (pad if fewer); unequal token counts across EP ranks → device trap |
| Pipeline | publish rows → route on GPU → W13 → SwiGLU → W2 → combine; FPROP / DGRAD / WGRAD |
| Soft / hard capacity | Soft: activation_slot_capacity_factor (recompute on exhaustion); hard: device_scratch_capacity_factor / VMM total_scratch_capacity_factor |
| Dependencies (PyPI) | torch>=2.14, nvidia-cutlass-dsl, triton, cuda-python, apache-tvm-ffi (+ packaging) |
| Primary author ack | Shikai Li et al.; open-sourced by Sanket Purandare |
That is a different purchase sentence from “another open MoE checkpoint” or “another trainer drop.” This one is: can I fuse dispatch, grouped expert GEMM, and combine on Blackwell with a named precision matrix and a context that owns the EP scratch — and what does Meta document when they ship v0.1.0.
What it is selling
Kolibri answered the weights + serve path question. Olmo-core answered the trainer question. Dist-MoE sits one layer down: the kernels that execute routed experts once you already have IDs and scores.
The execution model is explicit. One call takes four caller-owned inputs (activations, top-k expert IDs, scores, expert weights) and one Dist-MoE-owned context. The hot path is:
caller routing
x_TD + expert IDs + scores
|
v
publish rows -> route on GPU -> W13 -> SwiGLU -> W2 -> combine
| |
+------ context-owned communication --------+
and temporary memory
Forward expert GEMM is FPROP. Backward splits into DGRAD (input grads) and WGRAD (weight grads). BF16 leaves block_scaled=None; activations and weights enter expert GEMMs in BF16 with FP32 accumulate. MXFP8 E4M3 quantizes activations after routing and accepts prepared weights; staged keeps distributed W13 and SwiGLU/W2 separate, Mega fuses both projections into a chunked pipeline. NVFP4 is infer-only and refuses a training context — you must set inference=True, zero activation slots, and prepare weights before the call.
Features Meta documents in this release (without claiming benches): prepared MXFP8/NVFP4 weights; activation slots; plain or clamped SwiGLU; fused post-expert RMSNorm; clip stats; in-place WGRAD accumulation into parameter.grad; VMM host-backed scratch; CUDA graphs + non-strict make_fx. Explicitly not supported: full torch.compile, strict export, NVFP4 training, MXFP8 E5M2, MXFP4, A8W4, expert borrowing, activation rings, communication quantization, interleaved Mega inference weights, TLX / hierarchical execution, synchronous block-scaled backends.
Where it sits next to other boards
| Purchase | Product | What it buys |
|---|---|---|
| Open serving MoE weights (this AM) | Kolibri-1 | 78.1B/3.46B, hybrid SWA, ~78 GB FP8 + vLLM plugin |
| Near-package LPDDR fanout (last night) | Credo Weaver | Claimed HBM4-class edge BW at ~25× capacity |
| On-prem TTS on Blackhole | Lightning V2 × Tenstorrent | Measured L40S TTS cost/concurrency bake-off |
| Open MoE trainer | Ai2 Olmo-core 3 | B300 capacity tax fix; training tok/s |
| Persistent CXL media | Everspin PERSYST | Byte-addressable MRAM on CXL |
| Zero-full-attn SWA/DSA decode | Naive-N0.5-Flash | Native 1M with no full-attention layers |
| Blackwell MoE kernels (this post) | Meta Dist-MoE | SM100+ fused dispatch + grouped GEMM + combine; BF16/MXFP8 train+infer; NVFP4 infer |
Do not collapse this into “another Meta PyTorch release” or an Olmo/Kolibri rematch. Different layer: kernels vs trainer vs weights. Dist-MoE assumes you already routed; it does not replace Megatron-Core schedules or ship a checkpoint.
Caveats
- ARM64 + Blackwell-only validated stack. Meta’s documented runtime is Linux ARM64, SM100-class Blackwell, Python 3.12, PyTorch 2.14.0+cu130, CUDA 13.0.3.0 toolkit, and the NCCL / Triton / CUTLASS DSL pins above. Other hosts are outside the published validation box.
-
Fixed token shape.
Config.num_local_input_tokensis a physical shape, not a soft max. Every rank and every invocation must pass exactly that many rows — pad and zero-score if you have fewer. Unequal physical counts across EP ranks trigger a device-side trap that terminates the iteration and invalidates the CUDA context; it is not a recoverable Python error. - No CPU fallback. Import does not initialize CUDA or a process group, but execution has no CPU path. Tests require at least two supported Blackwell GPUs.
- NVFP4 train unsupported. NVFP4 is inference-only in this release. Training stays on BF16 Standard or MXFP8 E4M3 Staged/Mega.
- Not a Megatron / Olmo-core rematch. Dist-MoE is the fused kernel layer under routed experts. Olmo-core 3 is a trainer stack with B300 systems numbers. Kolibri-1 is open serving weights. Different boards; do not paste Dist-MoE into a tok/s bake-off column Meta did not publish.
-
Context lifetime. Contexts are collective to create, sequentially reusable, and not reentrant. Training-context
torch.no_grad()evaluation is not the same asConfig(inference=True). CUDA-graph topologies differ across those modes and must be captured separately. -
Soft vs hard memory. Activation-slot overflow selects recomputation. Total scratch overflow is fatal — the overflowing rank prints required vs available rows and traps before publishing unsafe routing metadata; peers may time out. Plan with
plan_memorybeforecreate_context.
How I would evaluate
-
Read the
BF16 quickstart
and the precision guides under
docs/before quoting Staged vs Mega or NVFP4 constraints. -
Stand up the validated stack (ARM64 + ≥2 Blackwell GPUs + the pinned PyTorch/CUDA/NCCL/Triton/CUTLASS DSL set) and run
tests/test_dist_moe.py— configuration, kernels, autograd, non-strictmake_fx, CUDA graphs, two-rank execution. -
Call
plan_memory(config, ep_size=...).explain()and watch balanced/device/total rows plus soft activation-slot vs hard scratch limits before you size production EP. -
Exercise BF16 train → MXFP8 train → NVFP4 infer with prepared weights; confirm
inference=True+ zero slots on the NVFP4 path. - Keep this board separate from Kolibri’s serve residency, Olmo-core’s trainer tok/s, Credo’s beachfront math, and Lightning’s TTS CapEx table — this is SM100 MoE kernel infra.
Bottom line
On October 3, 2026, Meta shipped dist-moe v0.1.0: CuTe DSL distributed MoE kernels for NVIDIA SM100+, fused token dispatch + grouped expert GEMMs + token combine, with caller-provided top-k IDs/scores and Dist-MoE-owned comm buffers, activation planning, and scratch via routed_experts. Precision matrix: BF16 Standard and MXFP8 E4M3 Staged/Mega for train+infer; NVFP4 Staged/Mega for inference only. Validated on Linux ARM64 + Blackwell SM100 with Python 3.12 / PyTorch 2.14.0+cu130 / CUDA 13.0.3.0 / NCCL 2.30.7 / Triton 3.8.0 / CUTLASS DSL 4.6.1. No CPU fallback; fixed local token shape; no published throughput benches in this drop. Primary author acknowledgement: Shikai Li et al.; open-sourced by Sanket Purandare. Next to this morning’s open serving MoE board, tonight is the complementary Blackwell kernel ticket under routed experts — not an Olmo-core trainer rematch and not a Kolibri weights rematch.
Create-only. Specs from Meta’s October 3, 2026 dist-moe v0.1.0 PyPI upload and meta-pytorch/dist_moe README/docs. Update when Meta publishes benches, expands the validated host matrix beyond ARM64+SM100, or adds NVFP4 training / full torch.compile support.
Sources: PyPI dist-moe · GitHub meta-pytorch/dist_moe · docs.
Anpoo Sivanadi, Staff Software Engineer