Skip to content

[AMD] Fuse shared-expert append + DeepEP remap into one Triton kernel - #28450

Merged
HaiShaw merged 12 commits into
sgl-project:mainfrom
rbrugaro-amd:rbrugaro/fused-append-remap-deepep
Jun 25, 2026
Merged

HaiShaw merged 12 commits into
sgl-project:mainfrom
rbrugaro-amd:rbrugaro/fused-append-remap-deepep

Conversation

@rbrugaro-amd

@rbrugaro-amd rbrugaro-amd commented Jun 16, 2026 •

Copy link
Copy Markdown
Contributor

Motivation

On the AMD aiter / DeepEP-class MoE path, every layer runs the shared-expert
append (fused_append_shared_experts) immediately followed by the eager DeepEP
interleaved remap (_remap_topk_for_deepep). The remap is a sequence of small,
launch-latency-bound elementwise ops (floor-div, add, arange, fill, copy) that
each cost a kernel launch. With one shared-expert append + remap per MoE layer
across many layers, this launch overhead is pure dispatch cost on top of work the
append kernel is already doing.

This PR fuses the append and the remap into the single Triton kernel that
already iterates over the topk rows, so the remap math runs on the rows already
resident in registers instead of as extra eager launches. It also fuses the HIP
padded-token masking into one Triton kernel.

The change is numerics-preserving by construction: the fused kernel produces
bit-identical topk_ids / topk_weights to the eager append+remap pair it
replaces (proven by the unit test below).

Modifications

python/sglang/srt/layers/moe/moe_runner/triton_utils/fused_moe_triton_kernels.py

  • Add _fused_append_remap_shared_experts_deepep_kernel and the
    fused_append_remap_shared_experts_deepep wrapper. In one pass it:
    • appends the shared experts,
    • applies the DeepEP interleaved routed-id remap (e -> e + e // num_local_routed),
    • assigns the per-rank shared-expert ids (shared_id_base + s),
    • writes the shared-expert weight as a host-computed scalar.
      Host code computes the scalar remap params so the kernel stays branch-free.

python/sglang/srt/layers/moe/topk.py

  • Wire the fused path into _post_process_topk_ids: when shared experts are
    fused and the backend is DeepEP-class on aiter, call the new fused kernel
    instead of fused_append_shared_experts() + _remap_topk_for_deepep(). The
    aiter-only / deepep-only branches are preserved unchanged.
  • The shared-expert weight on this fused branch is 1.0: on aiter,
    aiter_biased_grouped_topk folds routed_scaling_factor into the routed
    weights and forward_deepep skips the post-MoE multiply, so the always-on
    shared expert must contribute 1.0x. (This matches the aiter behavior of
    _remap_topk_for_deepep addressed in [AMD] fix(moe): correct fused shared-expert scaling on aiter/DeepEP path (mori all-to-all) #28237.)
  • Add _fill_padded_rows / _fill_padded_rows_kernel: a single Triton launch
    that zeroes/fills the CUDA/HIP-graph padded rows (row >= num_token_non_padded,
    read from device memory), replacing the eager arange + (>=) + index_put_
    sequence. Used by _mask_topk_ids_padded_region and
    _zero_topk_weights_padded_region with an eager fallback for non-2D /
    non-contiguous tensors.
  • Remove the redundant first HIP weight-zeroing pass (the final pass already
    re-zeros after the shared-expert append/remap; zeroing is idempotent).
  • Add the SGLANG_MORI_NO_PAD_MASK env gate (default off) to optionally skip
    the HIP padded-mask pass entirely. This is numerics-affecting and must be
    validated with an accuracy run before being enabled, hence off by default.

test/registered/moe/test_fused_append_remap_deepep.py (new, registered for
both CUDA and AMD CI)

  • test_matches_golden_reference — kernel output vs a pure-torch reference of the
    documented remap/append math, across shapes and EP ranks.
  • test_equivalence_with_eager_append_then_remap — bit-identical to
    fused_append_shared_experts() + _remap_topk_for_deepep().
  • test_shared_weight_is_one_on_aiter_path.
  • test_no_shared_experts_is_noop.

Note on overlap: the padded-token masking fusion (_fill_padded_rows,
SGLANG_MORI_NO_PAD_MASK, redundant-pass removal) overlaps with #28084. It is
kept here for now; if #28084 merges first this branch will be rebased to drop
the duplicated portion.

Accuracy Tests

End-to-end (gsm8k): standard sglang gsm8k eval against a MoRI-EP DeepSeek-R1
server with this change, including the SGLANG_MORI_NO_PAD_MASK=1 mask-skip path
active (8xMI355X, fp8 MoRI dispatch/combine, mem_fraction_static 0.96):

Test set Accuracy Invalid
gsm8k full (1319 q) 0.950 0.000
gsm8k (200 q) 0.965 0.000
# --- 1. Server (MoRI-EP DeepSeek-R1) ---
# env (selected; SGLANG_USE_AITER + moe_a2a_backend=mori activate the fused path,
# SGLANG_MORI_NO_PAD_MASK=1 enables the mask-skip path under validation)
export SGLANG_USE_AITER=1 SGLANG_AITER_MOE=1 AITER_FUSE_STAGE1_QUANT=1 \
       SGLANG_AITER_AR=1 SGLANG_AITER_MLA_PERSIST=1 SGLANG_ROCM_FUSED_DECODE_MLA=1 \
       SGLANG_USE_ROCM700A=1 TORCH_BLAS_PREFER_HIPBLASLT=1 TORCH_NCCL_BLOCKING_WAIT=1 \
       TRITON_ENABLE_PRELOAD_KERNELS=0 PYTORCH_ALLOC_CONF=expandable_segments:True \
       ROCM_QUICK_REDUCE_QUANTIZATION=INT4 ROCM_QUICK_REDUCE_MAX_SIZE_BYTES_MB=512 \
       MORI_SHMEM_MODE=ISOLATION MORI_SHMEM_HEAP_SIZE=16G \
       SGLANG_MORI_DISPATCH_DTYPE=auto SGLANG_MORI_COMBINE_DTYPE=fp8 \
       SGLANG_MORI_NUM_MAX_DISPATCH_TOKENS_PER_RANK=4096 SGLANG_MORI_NO_PAD_MASK=1

python -m sglang.launch_server \
  --model-path /model/Deepseek-R1-MXFP4-MLPerf \
  --tp-size 8 --ep-size 8 --dp-size 8 \
  --moe-a2a-backend mori --deepep-mode normal --moe-dense-tp-size 1 \
  --enable-dp-attention --enable-dp-lm-head --enforce-shared-experts-fusion \
  --mem-fraction-static 0.96 --kv-cache-dtype fp8_e4m3 \
  --max-running-requests 22400 --max-prefill-tokens 4500000 \
  --schedule-conservativeness 3.35 --num-continuous-decode-steps 192 \
  --triton-attention-num-kv-splits 2 \
  --disable-radix-cache --disable-chunked-prefix-cache \
  --trust-remote-code --watchdog-timeout 6000 --host 127.0.0.1 --port 30000

# --- 2. Eval (standard sglang gsm8k) ---
python -m sglang.test.few_shot_gsm8k --num-questions 1319 --num-shots 5 \
  --max-new-tokens 4096 --parallel 64 --host 127.0.0.1 --port 30000
# (equivalently: python -m sglang.test.run_eval --eval-name gsm8k)

95.0% / 0% invalid on the full test set confirms both the fused append+remap and
the (default-off) SGLANG_MORI_NO_PAD_MASK=1 path are accuracy-clean on
DeepSeek-R1.

Speed Tests and Profiling

The fused kernel collapses the per-MoE-layer append + eager-remap sequence
(~6 launch-bound elementwise kernels: floor-div / add / arange / fill / copy)
into the one append kernel that already runs, removing those launches per layer.
Before:
Screenshot 2026-06-15 232230

After
Screenshot 2026-06-15 232304

End-to-end bench_serving A/B (8xMI355X, DeepSeek-R1 MoRI-EP, fp8 MoRI
dispatch/combine, SGLANG_MORI_NO_PAD_MASK=1; --dataset-name random --num-prompts 1000 --random-input-len 1024 --random-output-len 1024 --request-rate inf --seed 42). BEFORE = the pre-fix base image (eager
fused_append_shared_experts() + _remap_topk_for_deepep()); AFTER = with the
fused kernel. The padded-token mask fusion is present in both images, so this
isolates the fused append+remap kernel. Mean of 3 runs each:

Metric BEFORE (eager) AFTER (fused) Δ
Total token throughput 25,890 tok/s 26,934 tok/s +4.0%
Request throughput 25.3 req/s 26.3 req/s +4.0%
Mean TPOT 54.9 ms 53.3 ms −3.0%
Mean TTFT 3,910 ms 3,716 ms −5.0%

Per-run total throughput — BEFORE: 25613 / 25877 / 26181 tok/s; AFTER:
26448 / 27175 / 27179 tok/s. The improvement is consistent across every metric
and run.

Reproduction — the server is launched with the same env + sglang.launch_server
flags shown in the Accuracy Tests section above (BEFORE from the pre-fix base
image, AFTER with the fused kernel; identical flags), then:

# server (both BEFORE and AFTER) — see env + flags in Accuracy Tests above
SGLANG_USE_AITER=1 SGLANG_MORI_NO_PAD_MASK=1 [...other MoRI env...] \
  python -m sglang.launch_server --model-path /model/Deepseek-R1-MXFP4-MLPerf \
  --tp-size 8 --ep-size 8 --dp-size 8 --moe-a2a-backend mori \
  --enable-dp-attention --enable-dp-lm-head --mem-fraction-static 0.96 \
  --kv-cache-dtype fp8_e4m3 --trust-remote-code --host 127.0.0.1 --port 30000

# benchmark client
python -m sglang.bench_serving --backend sglang --dataset-name random \
  --num-prompts 1000 --random-input-len 1024 --random-output-len 1024 \
  --request-rate inf --seed 42 --host 127.0.0.1 --port 30000

Checklist


CI States

Latest PR Test (Base): ❌ Run #28067472170
Latest PR Test (Extra): ❌ Run #28067472020

Add fused_append_remap_shared_experts_deepep, which performs the
shared-expert append and the DeepEP interleaved remap in a single Triton
pass on the aiter/DeepEP-class path. This replaces the
fused_append_shared_experts() + eager _remap_topk_for_deepep() pair,
collapsing ~6 launch-bound elementwise kernels per MoE layer (div_floor /
add / arange / fill / copy) into the one append kernel that already runs.
The shared-expert weight is 1.0 on this aiter-only path.

Also fuse the HIP padded-token masking into a single _fill_padded_rows
Triton kernel (CUDA/HIP-graph safe), remove the redundant first HIP
weight-zeroing pass, and add the SGLANG_MORI_NO_PAD_MASK gate.

Add test/registered/moe/test_fused_append_remap_deepep.py (registered for
CUDA and AMD CI) covering golden-reference equivalence, bit-identical
parity with the eager append+remap pair, the aiter shared-weight contract,
and the no-shared-experts no-op.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Rita Brugarolas Brufau <rita.brugarolasbrufau@amd.com>
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@HaiShaw

HaiShaw commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

/tag-and-rerun-ci

@github-actions github-actions Bot added the run-ci CI: run the baseline test suite on this PR label Jun 17, 2026
Resolve topk.py conflict in _mask_topk_ids_padded_region: keep both the
AMD fused-region branch (_can_fuse_padded_region) and upstream's new NPU
branch (_is_npu); mutually exclusive platform paths.
Main's get_parallel() refactor (sgl-project#28567) removed the
get_moe_expert_parallel_world_size/rank imports and migrated its own
call sites, but the fused shared-expert deepep block added by this PR
still referenced the old names, leaving them undefined after the merge.
Switch to get_parallel().moe_ep_size / .moe_ep_rank to match.
_HAS_TRITON = True
except ImportError:
_HAS_TRITON = False

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please simplify this, our environ has triton, move import triton to the top, as python/sglang/srt/layers/quantization/fp8_utils.py

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HaiShaw cleaned this up

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR optimizes the AMD aiter + DeepEP-class MoE routing path by fusing the shared-expert append step and the DeepEP interleaved remap into a single Triton kernel, and reduces launch overhead in HIP padded-token masking by adding a fused row-fill Triton kernel with an optional env-gated skip.

Changes:

  • Add a fused Triton kernel + wrapper to append shared experts and apply the DeepEP routed-id remap in one pass.
  • Update MoE top-k post-processing to use the fused append+remap path on aiter + DeepEP-class backends, and add a Triton _fill_padded_rows helper for padded-region masking/zeroing (with an env-gated HIP skip).
  • Add GPU unit tests covering fused append+remap behavior and equivalence against a reference / eager sequence.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

File Description
test/registered/moe/test_fused_append_remap_deepep.py New GPU tests for fused append+remap correctness and equivalence.
python/sglang/srt/layers/moe/topk.py Wire fused append+remap into _post_process_topk_ids; add Triton _fill_padded_rows and HIP pad-mask env gate.
python/sglang/srt/layers/moe/moe_runner/triton_utils/fused_moe_triton_kernels.py Add fused append+remap Triton kernel + Python wrapper.
Comments suppressed due to low confidence (1)

python/sglang/srt/layers/moe/topk.py:1255

  • In the NPU branch, this function assigns topk_ids = torch.where(...), which only rebinds the local variable and does not mutate the caller’s tensor. This effectively makes padded-region masking a no-op on NPU. It also hardcodes -1 instead of using fill_value. Use an in-place update (e.g., copy_) and respect fill_value.
        _fill_padded_rows(topk_ids, num_token_non_padded, fill_value)
    elif _is_npu:
        # On NPU, bool-indexed scatter `topk_ids[bool_mask, :] = -1` lowers
        # to aclnnNonzeroV2 and can trigger an aicore timeout under long
        # workloads; `torch.where` avoids that nonzero scan.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +135 to +146
with (
patch.object(
topk_module,
"get_moe_expert_parallel_world_size",
return_value=ep_size,
),
patch.object(
topk_module,
"get_moe_expert_parallel_rank",
return_value=ep_rank,
),
):
Comment on lines +1258 to +1261
Routed IDs: e -> e + e // num_local_routed (insert gaps for shared slots)
Shared IDs: shared_id_base + s (route to home rank)
Shared wgt: scale_factor (1.0 on aiter; 1/rsf otherwise)
"""
Comment thread python/sglang/srt/layers/moe/topk.py Outdated
Comment on lines +1699 to +1703
# Shared weight is 1.0 here because this branch is aiter-only:
# aiter_biased_grouped_topk folds routed_scaling_factor into the routed
# weights and forward_deepep skips the post-MoE multiply for _use_aiter,
# so the always-on shared expert must contribute 1.0x (matches the
# _remap_topk_for_deepep aiter branch, see PR #28237).
Comment thread python/sglang/srt/layers/moe/topk.py Outdated
Comment on lines +1216 to +1228
assert isinstance(
num_token_non_padded, torch.Tensor
), "num_token_non_padded must be a torch.Tensor"
assert num_token_non_padded.numel() == 1, (
"num_token_non_padded must be a single-element tensor, got shape "
f"{tuple(num_token_non_padded.shape)}"
)
assert (
not num_token_non_padded.dtype.is_floating_point
), f"num_token_non_padded must be an integer tensor, got {num_token_non_padded.dtype}"
assert (
num_token_non_padded.device == x.device
), "num_token_non_padded and x must be on the same device"
…functions

The eager path now reads EP topology via get_parallel().moe_ep_size /
moe_ep_rank (main's sgl-project#28567 refactor), so patch.object() on the removed
get_moe_expert_parallel_world_size/rank names raised AttributeError.
Force EP size/rank with the get_parallel().override() context manager.
Per review: the runtime environment always ships triton, so the
try/except ImportError guard and _HAS_TRITON flag are unnecessary.
Import triton/triton.language at the top like other core layers, drop
the _HAS_TRITON gating on the kernel definition and _can_fuse_padded_region.
- Clarify shared-id docstring: shared_id_base + arange(S), not a constant.
- Reword the aiter shared-weight comment: _remap_topk_for_deepep has no
  separate aiter branch; it unconditionally sets 1/routed_scaling_factor.
- _fill_padded_rows: replace assert-based input validation with explicit
  raises so checks are not stripped under python -O.
@HaiShaw

HaiShaw commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

@amd-bot ci-status

@amd-bot

amd-bot commented Jun 23, 2026

Copy link
Copy Markdown

@HaiShaw

CI Status for PR #28450

Merge verdict: ❌ Do not merge — PR CI is incomplete and the changed code was never tested. All 10 red checks on HEAD c4c7878c are pr-gate/*-finish aggregator jobs that fast-failed at the gate with an identical per-user rate-limit cooldown error — no test job executed on this commit. There are 0 executed test failures, but that is meaningless here: the entire test matrix was skipped.

Caution

PR CI did not run. Every vendor pipeline (AMD, NVIDIA/base, Extra, MUSA, Xeon, XPU, NPU, Arm64) fast-failed at the gate because the author triggered CI again at 06:38 within the 120-min cooldown of the prior 04:52 trigger. The PR's changed kernel (fused_moe_triton_kernels.py, topk.py) and its new test test/registered/moe/test_fused_append_remap_deepep.py were not exercised at all on HEAD. Green/red here proves nothing. Action: wait out the cooldown (120 min from 04:52 UTC) then re-trigger (push a new commit or close/reopen). The new test is registered for PR CI — NVIDIA base-b / 1-gpu-large and AMD stage-b-test-1-gpu-small-amd — so a clean re-run will cover it.

Changed files: python/sglang/srt/layers/moe/moe_runner/triton_utils/fused_moe_triton_kernels.py (+86/-0), python/sglang/srt/layers/moe/topk.py (+133/-9), test/registered/moe/test_fused_append_remap_deepep.py (+181/-0)

Executed CI failure attribution: AMD: 0 executed failures · Others: 0 executed failures · all 10 red checks = gate/finish cascade from rate-limit cooldown (not tested).

Gate cascade (root cause of all red checks)

Workflow Gate job Error Log
PR Test (AMD) call-gate / pr-gate User 'rbrugaro-amd' already triggered 'PR Test (AMD)' ... wait 120 minutes Log
PR Test (base) call-gate / pr-gate ... 'PR Test Base' ... wait 120 minutes Log
PR Test Extra (AMD) call-gate / pr-gate ... wait 120 minutes Log
PR Test Extra call-gate / pr-gate ... wait 120 minutes Log
PR Test (MUSA) pr-gate / pr-gate ... 'PR Test (MUSA)' ... wait 120 minutes Log
PR Test (Xeon) pr-gate / pr-gate ... 'PR Test (Xeon)' ... wait 120 minutes Log
PR Test (XPU) pr-gate / pr-gate ... 'PR Test (XPU)' ... wait 120 minutes Log
PR Test (NPU) pr-gate / pr-gate ... 'PR Test (NPU)' ... wait 120 minutes Log
PR Test (Arm64) pr-gate / pr-gate ... 'PR Test (Arm64)' ... wait 120 minutes Log

Each *-finish failure (e.g. pr-test-finish) is downstream of these gates and carries no independent signal. PR Test ROCm 7.2 (AMD) (run) shows ✅ but its gate passed with 18 jobs skipped — only check-changes/pr-gate/finish ran, so it tested nothing either. Lint and sgl-router passed but don't exercise the kernel.

Details / what to do before merge

  • Re-run CI after the cooldown. The 06:38 trigger collided with the 04:52 trigger of prior commit 06412fed under a 120-min per-user/per-workflow cooldown. Wait until ≥ 06:52 UTC and push a fresh commit (or close/reopen) so the full matrix runs. For urgent full signal, the bypass-fastfail label is not applicable here (the block is at the gate, not a downstream fast-fail) — a re-trigger after cooldown is the only path.
  • Confirm the new test actually executes on the re-run. test/registered/moe/test_fused_append_remap_deepep.py (test_matches_golden_reference, test_equivalence_with_eager_append_then_remap, test_shared_weight_is_one_on_aiter_path, test_no_shared_experts_is_noop) is GPU-only and @skipUnless(torch.cuda.is_available()). Verify it lands in NVIDIA base-b 1-gpu-large and AMD stage-b-test-1-gpu-small-amd and runs (not skipped) — that is the only thing that validates this PR's kernel.
  • The earlier 04:52 run on prior commit 06412fed is not a usable substitute: its base-b stage fast-failed on an inline "lint check failed" cascade (base-b log), and it predates the upstream-main merge in current HEAD. Don't treat it as a green base.

Generated by amd-bot using Claude Code CLI

@hubertlu-tw

Copy link
Copy Markdown
Collaborator

@rbrugaro-amd could you please double confirm the result from this gsm8k command?
python -m sglang.test.few_shot_gsm8k --num-questions 1319 --num-shots 5 --parallel 1319 --host 127.0.0.1 --port 30000
We found that for some cases lower parallel values alone cannot guarantee the correctness.

cc: @karverma-amd @HaiShaw

@rbrugaro-amd

Copy link
Copy Markdown
Contributor Author

@hubertlu-tw @HaiShaw Re-ran the full gsm8k eval with --parallel 1319 as requested, on DeepSeek-R1-0528 (MXFP4). Result: 0.940 accuracy / 0.000 invalid over the full 1319-question set. The high parallelism does not degrade correctness.

Server launch (env + command)
# --- Server environment (PR recipe, incl. SGLANG_MORI_NO_PAD_MASK=1) ---
export PYTHONPATH=/workdir/code/sglang/python
export SGLANG_USE_AITER=1 SGLANG_AITER_MOE=1 AITER_FUSE_STAGE1_QUANT=1
export SGLANG_AITER_AR=1 SGLANG_AITER_MLA_PERSIST=1 SGLANG_ROCM_FUSED_DECODE_MLA=1
export SGLANG_USE_ROCM700A=1 TORCH_BLAS_PREFER_HIPBLASLT=1 TORCH_NCCL_BLOCKING_WAIT=1
export TRITON_ENABLE_PRELOAD_KERNELS=0 PYTORCH_ALLOC_CONF=expandable_segments:True
export ROCM_QUICK_REDUCE_QUANTIZATION=INT4 ROCM_QUICK_REDUCE_MAX_SIZE_BYTES_MB=512
export MORI_SHMEM_MODE=ISOLATION MORI_SHMEM_HEAP_SIZE=16G
export SGLANG_MORI_DISPATCH_DTYPE=auto SGLANG_MORI_COMBINE_DTYPE=fp8
export SGLANG_MORI_NUM_MAX_DISPATCH_TOKENS_PER_RANK=4096 SGLANG_MORI_NO_PAD_MASK=1

# --- Server command ---
python -m sglang.launch_server \
  --model-path /data/workloads-inference/models/DeepSeek-R1-0528-MXFP4/ \
  --tp-size 8 --ep-size 8 --dp-size 8 \
  --moe-a2a-backend mori --deepep-mode normal --moe-dense-tp-size 1 \
  --enable-dp-attention --enable-dp-lm-head --enforce-shared-experts-fusion \
  --mem-fraction-static 0.96 --kv-cache-dtype fp8_e4m3 \
  --max-running-requests 22400 --max-prefill-tokens 4500000 \
  --schedule-conservativeness 3.35 --num-continuous-decode-steps 192 \
  --triton-attention-num-kv-splits 2 \
  --disable-radix-cache --disable-chunked-prefix-cache \
  --trust-remote-code --watchdog-timeout 6000 --host 127.0.0.1 --port 30000

Eval command:

python -m sglang.test.few_shot_gsm8k \
  --num-questions 1319 --num-shots 5 \
  --parallel 1319 \
  --host 127.0.0.1 --port 30000

Result:

/workdir/code/sglang/python/sglang/test/few_shot_gsm8k.py:166: DeprecationWarning: sglang.test.few_shot_gsm8k is deprecated. Use sglang.test.run_eval with eval_name='gsm8k' instead.
  run_eval(args)
Downloading from https://raw.githubusercontent.com/openai/grade-school-math/master/grade_school_math/data/test.jsonl to /tmp/test.jsonl
/tmp/test.jsonl: 732kB [00:00, 30.0MB/s]                   
100%|██████████| 1319/1319 [00:27<00:00, 47.37it/s] 
Accuracy: 0.940
Invalid: 0.000
Latency: 28.088 s
Output throughput: 4826.084 token/s
GSM8K_EXIT=0

@HaiShaw
HaiShaw merged commit de2d01c into sgl-project:main Jun 25, 2026
133 of 165 checks passed
kpham-sgl pushed a commit that referenced this pull request Jun 25, 2026
Co-authored-by: Brayden Zhong <brayden@radixark.ai>
Chronostasys pushed a commit to MindLab-Research/sglang that referenced this pull request Aug 24, 2026
…sgl-project#28450)

Signed-off-by: Rita Brugarolas Brufau <rita.brugarolasbrufau@amd.com>
Chronostasys pushed a commit to MindLab-Research/sglang that referenced this pull request Aug 24, 2026
Co-authored-by: Brayden Zhong <brayden@radixark.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

amd run-ci CI: run the baseline test suite on this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants