sgl-project/sglang · error · ValueError
The hpc_ops MoE runner backend runs a plain SiLU-and-mul; it
Error message
The hpc_ops MoE runner backend runs a plain SiLU-and-mul; it does not support gemm1_alpha / gemm1_clamp_limit / swiglu_limit.
What it means
The hpc_ops backend applies a plain SiLU-and-mul activation between the two GEMMs and cannot apply gemm1_alpha, gemm1_clamp_limit, or swiglu_limit (parameters used by e.g. gpt-oss style swiglu with limits). The config check rejects any of these being non-None.
Source
Thrown at python/sglang/srt/layers/moe/moe_runner/hpc_ops.py:121
raise ValueError(
"The hpc_ops MoE runner backend does not support fused shared experts."
)
if runner_config.apply_router_weight_on_input:
raise ValueError(
"The hpc_ops MoE runner backend does not support "
"apply_router_weight_on_input."
)
if runner_config.no_combine:
raise ValueError(
"The hpc_ops MoE runner backend does not support no_combine "
"(the fused kernel always reduces over top-k experts)."
)
if (
runner_config.gemm1_alpha is not None
or runner_config.gemm1_clamp_limit is not None
or runner_config.swiglu_limit is not None
):
raise ValueError(
"The hpc_ops MoE runner backend runs a plain SiLU-and-mul; it does "
"not support gemm1_alpha / gemm1_clamp_limit / swiglu_limit."
)
@register_fused_func("none", "hpc_ops")
def fused_experts_none_to_hpc_ops(
dispatch_output: StandardDispatchOutput,
quant_info: HpcOpsMoeQuantInfo,
runner_config: MoeRunnerConfig,
) -> StandardCombineInput:
import hpc
from sglang.kernels.ops.quantization.fp8_kernel import (
scaled_fp8_quant,
sglang_per_token_group_quant_fp8,
)
from sglang.srt.layers.moe.token_dispatcher.standard import StandardCombineInputView on GitHub (pinned to 0132848349)
Solutions
- Use the triton or flashinfer backend for this model
- Remove --moe-runner-backend hpc_ops and let SGLang pick the default
- Keep hpc_ops only for plain gated-SiLU FP8 models
Defensive patterns
Strategy: validation
Validate before calling
cfg_keys = ('gemm1_alpha','gemm1_clamp_limit','swiglu_limit')
if server_args.moe_runner_backend == 'hpc_ops' and any(getattr(moe_cfg, k, None) is not None for k in cfg_keys):
server_args.moe_runner_backend = None Prevention
- Reserve hpc_ops for plain gated-SiLU FP8 MoE models
- Keep a compatibility matrix of model vs backend in CI config
When it happens
Trigger: Loading a model whose MoE config defines gemm1_alpha / gemm1_clamp_limit / swiglu_limit (gpt-oss, some Qwen/Kimi variants) with --moe-runner-backend hpc_ops.
Common situations: Serving gpt-oss or other swiglu-limit models and trying hpc_ops after seeing it benchmark well on DeepSeek; version upgrades that expose these knobs in MoE runner config.
Related errors
- The hpc_ops MoE runner backend does not support fused shared
- The hpc_ops MoE runner backend does not support apply_router
- The hpc_ops MoE runner backend does not support no_combine (
- The hpc_ops MoE runner backend only supports FP8-quantized M
- Unsupported activation: {self.activation}
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/250754eead056d80.
Report an issue: GitHub.