{"record":{"id":"683a44d44c3dfb61","repo":"sgl-project/sglang","slug":"sana-wm-triton-gdn-backend-unavailable-reason","errorCode":null,"errorMessage":"SANA-WM Triton GDN backend unavailable: {reason}","messagePattern":"SANA-WM Triton GDN backend unavailable: (.+?)","errorType":"error_code","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py","lineNumber":2136,"sourceCode":"\n        tables = prepare_rope_tables(rotary_emb, N, head_dim, device)\n        self._triton_rope_tables_cache = (key, tables)\n        return tables\n\n    def _maybe_main_branch_triton_gdn(\n        self,\n        qkv: torch.Tensor,\n        beta: torch.Tensor,\n        decay: torch.Tensor,\n        HW: Tuple[int, int, int],\n        rotary_emb: Optional[torch.Tensor],\n    ) -> Optional[torch.Tensor]:\n        global _SANA_WM_TRITON_GDN_DISABLED_REASON\n\n        reason = self._triton_gdn_unavailable_reason(qkv, beta, decay, HW)\n        if reason is not None:\n            if self.gdn_backend == \"triton\":\n                raise RuntimeError(f\"SANA-WM Triton GDN backend unavailable: {reason}\")\n            return None\n\n        try:\n            from sglang.kernels.ops.diffusion import (\n                fused_bigdn_func,\n                fused_qk_inv_rms,\n                prepare_rope_tables,\n            )\n\n            B, N, _, heads, head_dim = qkv.shape\n            T, H_sp, W_sp = HW\n            S = H_sp * W_sp\n            q_norm_weight, k_norm_weight = self._get_triton_norm_weights()\n            norm_eps = float(getattr(self.q_norm, \"eps\", 1e-5))\n            q_inv_rms, k_inv_rms = fused_qk_inv_rms(qkv, eps=norm_eps)\n            rope_cos, rope_sin = self._get_triton_rope_tables(\n                prepare_rope_tables,\n                rotary_emb,","sourceCodeStart":2118,"sourceCodeEnd":2154,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py#L2118-L2154","documentation":"When gdn_backend='triton' is explicitly forced, any failed precheck for the fused Triton GDN kernel (shape/dtype/CUDA/eval-mode constraints) raises this RuntimeError instead of silently falling back to torch. 'auto' would return None and fall back.","triggerScenarios":"Setting gdn_backend='triton' and calling the GDN forward with inputs failing _triton_gdn_unavailable_reason: non-CUDA tensors, grad-enabled mode, unsupported head dims/dtypes, or missing sglang.kernels.ops.diffusion fused ops.","commonSituations":"Forcing triton under torch.compile or autograd; running on CPU; kernel package built without the diffusion Triton ops; batch/head-dim combination outside the kernel's supported set.","solutions":["Switch to gdn_backend='auto' so unsupported cases fall back to the torch path","Run under torch.no_grad()/eval; ensure tensors are CUDA and dtypes match kernel requirements","If the kernel is truly required, reshape/broadcast inputs to the supported configuration and verify sglang.kernels.ops.diffusion imports"],"exampleFix":"# before\nblock = GDNBlock(dim, update_rule=\"torch_chunk\", gdn_backend=\"triton\")\n# after\nblock = GDNBlock(dim, update_rule=\"torch_chunk\", gdn_backend=\"auto\")","handlingStrategy":"fallback","validationCode":"use gdn_backend=\"auto\" so precheck failures fall back to torch instead of raising","typeGuard":null,"tryCatchPattern":"try:\n    out = block(...)\nexcept RuntimeError as e:\n    if \"Triton GDN backend unavailable\" in str(e):\n        block.gdn_backend = \"auto\"; out = block(...)\n    else: raise","preventionTips":["Wrap forced-triton runs in torch.no_grad(); keep tensors on CUDA; test the triton path on a small batch first"],"tags":["sana-wm","gdn","triton","backend-fallback","cuda"],"backgroundTag":"kernel-backend-unavailable","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}