{"record":{"id":"5316cef9886e8eac","repo":"sgl-project/sglang","slug":"sana-wm-triton-camera-gdn-backend-unavailable-re","errorCode":null,"errorMessage":"SANA-WM Triton camera GDN backend unavailable: {reason}","messagePattern":"SANA-WM Triton camera 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":2266,"sourceCode":"            precheck_reason = \"requires eval/inference mode\"\n        elif not q.is_cuda:\n            precheck_reason = \"requires CUDA tensor\"\n\n        if precheck_reason is not None:\n            if self.gdn_backend == \"triton\":\n                raise RuntimeError(\n                    \"SANA-WM Triton camera GDN backend unavailable: \"\n                    f\"{precheck_reason}\"\n                )\n            return None\n\n        q = q.float().contiguous()\n        k = k.float().contiguous()\n        v = v.float().contiguous()\n        reason = self._triton_cam_gdn_unavailable_reason(q, k, v, beta, decay, HW)\n        if reason is not None:\n            if self.gdn_backend == \"triton\":\n                raise RuntimeError(\n                    f\"SANA-WM Triton camera GDN backend unavailable: {reason}\"\n                )\n            return None\n\n        try:\n            from sglang.kernels.ops.diffusion import cam_scan_bidi_chunkwise\n\n            B, heads, _, _ = q.shape\n            T, H_sp, W_sp = HW\n            S = H_sp * W_sp\n            if beta.ndim == 3:\n                beta_in = beta.unsqueeze(-1).expand(B, heads, T, S).contiguous()\n            else:\n                beta_in = beta.contiguous()\n            out = cam_scan_bidi_chunkwise(\n                q,\n                k,\n                v,","sourceCodeStart":2248,"sourceCodeEnd":2284,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py#L2248-L2284","documentation":"After casting q/k/v to float32 contiguous, a second precheck validates shapes/dtypes for the cam_scan_bidi_chunkwise Triton kernel. With forced gdn_backend='triton', a failure raises; otherwise it returns None for torch fallback.","triggerScenarios":"Forcing gdn_backend='triton' with camera-branch tensors whose head counts, sequence lengths, or beta/decay shapes are outside cam_scan_bidi_chunkwise's supported set, or missing the kernel import.","commonSituations":"Non-standard attention head configs; older sglang builds lacking cam_scan_bidi_chunkwise in kernels.ops.diffusion; custom camera ray features with unexpected dims.","solutions":["Switch to gdn_backend='auto'","Check the camera branch tensor shapes (q/k/v float32 CUDA, beta/decay broadcastable) against the kernel's constraints","Upgrade sglang so the diffusion Triton ops include cam_scan_bidi_chunkwise"],"exampleFix":"# before\nGDNBlock(dim, cam_update_rule=\"torch_chunk\", gdn_backend=\"triton\")\n# after\nGDNBlock(dim, cam_update_rule=\"torch_chunk\", gdn_backend=\"auto\")","handlingStrategy":"fallback","validationCode":"use gdn_backend=\"auto\"; verify q/k/v are float32 CUDA and contiguous before forcing triton","typeGuard":null,"tryCatchPattern":"except RuntimeError as e:\n    if \"camera GDN backend unavailable\" in str(e):\n        block.gdn_backend = \"auto\"\n        out = block(...)\n    else:\n        raise","preventionTips":["Keep sglang updated so diffusion Triton ops exist; unit-test both backends"],"tags":["sana-wm","gdn","triton","camera-branch","shape-constraints"],"backgroundTag":"kernel-backend-unavailable","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}