---
id: pr-sglang-22809
repo: sgl-project/sglang
pr: 22809
title: Dual MoE CUDA graph capture for lora/nolora batches
author: sshleifer
date: '2026-04-22'
url: https://github.com/sgl-project/sglang/pull/22809
source_category: upstream-code
architectures:
- sm100
tags:
- CUDA kernel
- moe kernel
- moe_routing
- triton kernel
techniques: []
hardware_features: []
kernel_types:
- moe
languages:
- cuda-cpp
- triton
captured_at: '2026-05-16'
status: merged
merge_sha: b9e33d6a5be796ab0c893bf4b1b825f451a3caa8
inclusion_reason: Separate routing, permutation, top-k, and expert GEMM costs; keep tail-token and expert-layout tests attached to the idea.
changed_paths:
- python/sglang/srt/layers/moe/utils.py
- python/sglang/srt/lora/lora_moe_runners.py
- python/sglang/srt/model_executor/cuda_graph_runner.py
- python/sglang/srt/server_args.py
artifact_dir: evidence/pull-bundles/sglang/gh-22809
head_ref_oid: 8c22baf1e570b02dcb5bf3571f05b1dabef14c55
---
# Dual MoE CUDA graph capture for lora/nolora batches

- Repository: `sgl-project/sglang`
- PR: [22809](https://github.com/sgl-project/sglang/pull/22809)
- Decision: `Separate routing, permutation, top-k, and expert GEMM costs; keep tail-token and expert-layout tests attached to the idea.`
- Reason: Separate routing, permutation, top-k, and expert GEMM costs; keep tail-token and expert-layout tests attached to the idea.

## Changed Paths

- `python/sglang/srt/layers/moe/utils.py`
- `python/sglang/srt/lora/lora_moe_runners.py`
- `python/sglang/srt/model_executor/cuda_graph_runner.py`
- `python/sglang/srt/server_args.py`

## Evidence Bundle

`evidence/pull-bundles/sglang/gh-22809`
