Repository navigation
Conversation
Keep the public API and registered custom operator unchanged; forward the fixed internal call in schema order. Add forwarding, compile-boundary, reference and graph-replay regressions.
🏷️ CI GuideRuns automatically on every PR:
Extended tests (opt-in via labels):
One backend per PR: PR title tags & labels: |
NOT READY FOR HUMAN REVIEWPR Self-ReviewRevision Waiting for the PR author. The readiness report will appear after the self-review answers are complete for this revision. Questions to answer in the PR description
Edit the Missing or invalid answers
Shadow mode reports what would block but keeps the status successful. Set |
Follow-up: profiler-off MiniMax-M3 TP4 ABBAThe complete four-process run is now available. Both arms use the same ATOM snapshot + merged #2761, NCCL_PROTO=Simple, TP4, FP8 KV, EAGLE3, and identical recorded prompt hashes. Only the aiter internal MoE call differs. Performance-only setup: speculative acceptance is forced to 0.5933. Output quality/text is not meaningful in this setup; this is not an accuracy result. This bounded paired workload is not the original 900s aiperf load. Each process has warmups, 20 short (2517-token) requests, 20 requests with a cached 102784-token prefix + 2517 new tokens, and six measured two-request decode rounds (128 output tokens/request). No profiler. Source imports were verified separately for every process.
Descriptive comparison (mean of the two per-process medians in each arm, not a significance test):
Please judge the raw ABBA spread as well as the aggregate: CPU scheduling/drift can be comparable to a small end-to-end change. The independently repeated operator-level saving in the PR is narrower and does not guarantee a model speedup. Latencies here are end-to-end request times, not exact TTFT or GPU kernel time. An earlier model launch used invalid host-absolute symlinks inside the container and fell back to image packages; it failed before producing measurements. It was excluded and archived as Artifacts: |
Summary
Forward the fixed internal
fused_moe -> fused_moe_call in registered-schema order instead of passing all 38 arguments by keyword.The public
fused_moeAPI remains keyword-friendly. The registeredaiter.fused_moe_operator, fake implementation, mutation schema, kernels, numerical operations and dispatch policies are unchanged.The PyTorch dispatcher was repeatedly matching these keyword arguments on every eager MoE invocation. This matters for eager regions within otherwise compiled/captured models.
No eager-body bypass, tensor/pointer cache, compile-key change, or architecture-specific tuning is introduced.
Validation
python3 -m pytest -q op_tests/test_moe_forwarding.pyagainst main89a28cddd4d626212992c0c3cfac1188fb4b10d6+ this patch.torch.compile(fullgraph=True)still containsaiter.fused_moe_.git diff --checkpass.An initial A8W4 test was incorrectly allowed to select the default FP4 activation. An unchanged-source negative control reproduced the same reference failure and bitwise identical outputs. The final test explicitly selects
quant_dtype_ain both arms; no tolerance was relaxed. The initial failure is retained in the experiment logs.Performance: real MoE, not whole-model throughput
gfx1250, MiniMax-M3 TP4 per-rank operator shape
E129, top5, K6144, I768, SwiGLU. Includes real routing, quantization, both expert GEMMs and gather/reduce. Same weights, input and kernels in both arms. This is a single-GPU operator experiment, not a TP4 distributed benchmark.Independent repeat: 15 shuffled-order paired samples × 160 eager calls; synchronized before each sample and after all calls. Table reports median CPU submission time per call; completion time was recorded separately and closely tracks it. Warmup/compilation/reference/profiling are excluded.
AITER_LOG_LEVEL=WARNINGin both arms matches the model launch.Paired median savings: 6.2–7.1 µs/call in this repeat. These are host-limited eager-call improvements, not faster GPU kernels; graph-only replay need not benefit.
The first independent process also improved all A4W4 shapes but had a noisy/regressing A8W4 M256 sample while emitting per-call untuned-config INFO logs. That run is not discarded or used as a uniform speedup claim; the table above is the independent, model-matched WARNING-level repeat. A8W4 uses the same existing fallback GEMM configuration in both arms.
Full-model profiler-off ABBA on the same ATOM snapshot plus merged #2761 is running separately. No full-model throughput, TTFT or accuracy gain is claimed here. Its synthetic speculative acceptance setting is only appropriate for performance comparisons.
Artifacts on f01:
~/bench/m3_moe_dispatch_20261030/(logs/gpu_repeat.json,logs/gpu_bench.json, reference/graph logs, and kernel-identity traces).