{"record":{"id":"250754eead056d80","repo":"sgl-project/sglang","slug":"the-hpc-ops-moe-runner-backend-runs-a-plain-silu-a","errorCode":null,"errorMessage":"The hpc_ops MoE runner backend runs a plain SiLU-and-mul; it does not support gemm1_alpha / gemm1_clamp_limit / swiglu_limit.","messagePattern":"The hpc_ops MoE runner backend runs a plain SiLU-and-mul; it does not support gemm1_alpha / gemm1_clamp_limit / swiglu_limit\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/layers/moe/moe_runner/hpc_ops.py","lineNumber":121,"sourceCode":"        raise ValueError(\n            \"The hpc_ops MoE runner backend does not support fused shared experts.\"\n        )\n    if runner_config.apply_router_weight_on_input:\n        raise ValueError(\n            \"The hpc_ops MoE runner backend does not support \"\n            \"apply_router_weight_on_input.\"\n        )\n    if runner_config.no_combine:\n        raise ValueError(\n            \"The hpc_ops MoE runner backend does not support no_combine \"\n            \"(the fused kernel always reduces over top-k experts).\"\n        )\n    if (\n        runner_config.gemm1_alpha is not None\n        or runner_config.gemm1_clamp_limit is not None\n        or runner_config.swiglu_limit is not None\n    ):\n        raise ValueError(\n            \"The hpc_ops MoE runner backend runs a plain SiLU-and-mul; it does \"\n            \"not support gemm1_alpha / gemm1_clamp_limit / swiglu_limit.\"\n        )\n\n\n@register_fused_func(\"none\", \"hpc_ops\")\ndef fused_experts_none_to_hpc_ops(\n    dispatch_output: StandardDispatchOutput,\n    quant_info: HpcOpsMoeQuantInfo,\n    runner_config: MoeRunnerConfig,\n) -> StandardCombineInput:\n    import hpc\n\n    from sglang.kernels.ops.quantization.fp8_kernel import (\n        scaled_fp8_quant,\n        sglang_per_token_group_quant_fp8,\n    )\n    from sglang.srt.layers.moe.token_dispatcher.standard import StandardCombineInput","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/layers/moe/moe_runner/hpc_ops.py#L103-L139","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"cfg_keys = ('gemm1_alpha','gemm1_clamp_limit','swiglu_limit')\nif server_args.moe_runner_backend == 'hpc_ops' and any(getattr(moe_cfg, k, None) is not None for k in cfg_keys):\n    server_args.moe_runner_backend = None","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Reserve hpc_ops for plain gated-SiLU FP8 MoE models","Keep a compatibility matrix of model vs backend in CI config"],"tags":["sglang","moe","hpc-ops","swiglu","activation","config-validation"],"backgroundTag":"unsupported-backend-configuration","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}