{"record":{"id":"bfd5639c9425f9c1","repo":"sgl-project/sglang","slug":"the-hpc-ops-moe-runner-backend-does-not-support-no","errorCode":null,"errorMessage":"The hpc_ops MoE runner backend does not support no_combine (the fused kernel always reduces over top-k experts).","messagePattern":"The hpc_ops MoE runner backend does not support no_combine \\(the fused kernel always reduces over top-k experts\\)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/layers/moe/moe_runner/hpc_ops.py","lineNumber":112,"sourceCode":"\ndef _check_runner_config_supported(runner_config: MoeRunnerConfig) -> None:\n    if runner_config.activation != \"silu\" or not runner_config.is_gated:\n        raise ValueError(\n            \"The hpc_ops MoE runner backend only supports the gated silu \"\n            f\"activation, got activation={runner_config.activation}, \"\n            f\"is_gated={runner_config.is_gated}.\"\n        )\n    if runner_config.num_fused_shared_experts != 0:\n        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,","sourceCodeStart":94,"sourceCodeEnd":130,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/layers/moe/moe_runner/hpc_ops.py#L94-L130","documentation":"The hpc_ops fused MoE kernel always reduces (sums) outputs over the top-k experts, so it cannot honor no_combine=True (returning per-expert outputs without combining). _check_runner_config_supported raises when no_combine is set.","triggerScenarios":"Running with --moe-runner-backend hpc_ops on a model/feature path that sets runner_config.no_combine=True (e.g. certain speculative or per-expert output paths).","commonSituations":"Using hpc_ops with models or features (e.g. EAGLE-style draft layers over MoE) that need uncombined expert outputs.","solutions":["Switch to a backend that supports no_combine (triton/flashinfer)","Disable the feature that requires uncombined outputs","Avoid hpc_ops for this model"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if server_args.moe_runner_backend == 'hpc_ops' and runner_config.no_combine:\n    raise SystemExit('hpc_ops always combines top-k outputs; pick triton')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat hpc_ops as opt-in per model, not a global default","Watch server logs for the runner config dump before long runs"],"tags":["sglang","moe","hpc-ops","no-combine","config-validation"],"backgroundTag":"unsupported-backend-configuration","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}