{"record":{"id":"84a5114fd87c8772","repo":"sgl-project/sglang","slug":"unsupported-sana-wm-gdn-backend-self-gdn-backend","errorCode":null,"errorMessage":"Unsupported SANA-WM gdn_backend: {self.gdn_backend}. Expected one of auto, torch, triton.","messagePattern":"Unsupported SANA-WM gdn_backend: (.+?)\\. Expected one of auto, torch, triton\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py","lineNumber":1895,"sourceCode":"        self.in_dim = in_dim\n        self.out_dim = out_dim\n        self.heads = heads\n        self.dim = head_dim\n        self.eps = eps\n        self.softmax_main = softmax_main\n        self.update_rule = update_rule\n        self.cam_update_rule = cam_update_rule\n        self.chunk_gdn_chunk_size = chunk_gdn_chunk_size\n        self.use_chunked_softmax_attention = use_chunked_softmax_attention\n        self.gdn_backend = gdn_backend\n        if self.update_rule not in (\"torch_chunk\", \"torch_recurrent\"):\n            raise ValueError(f\"Unsupported SANA-WM update_rule: {self.update_rule}\")\n        if self.cam_update_rule not in (\"torch_chunk\", \"torch_recurrent\"):\n            raise ValueError(\n                f\"Unsupported SANA-WM cam_update_rule: {self.cam_update_rule}\"\n            )\n        if self.gdn_backend not in (\"auto\", \"torch\", \"triton\"):\n            raise ValueError(\n                \"Unsupported SANA-WM gdn_backend: \"\n                f\"{self.gdn_backend}. Expected one of auto, torch, triton.\"\n            )\n\n        # Fused QKV + output proj (proj shared with cam branch).\n        self.qkv = nn.Linear(in_dim, 3 * out_dim, bias=False)\n        self.proj = nn.Linear(out_dim, out_dim, bias=True)\n\n        if qk_norm:\n            self.q_norm = _RMSNorm(in_dim, eps=1e-5)\n            self.k_norm = _RMSNorm(in_dim, eps=1e-5)\n            self.q_norm_cam = _RMSNorm(in_dim, eps=1e-5)\n            self.k_norm_cam = _RMSNorm(in_dim, eps=1e-5)\n        else:\n            self.q_norm = nn.Identity()\n            self.k_norm = nn.Identity()\n            self.q_norm_cam = nn.Identity()\n            self.k_norm_cam = nn.Identity()","sourceCodeStart":1877,"sourceCodeEnd":1913,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/models/dits/sana_wm_components.py#L1877-L1913","documentation":"gdn_backend selects the kernel implementation and must be 'auto', 'torch', or 'triton'. Validation happens at block construction so invalid backend names never reach dispatch.","triggerScenarios":"Instantiating the GDN block with gdn_backend='cuda', 'cuda_kernel', 'fused', or a version-specific name.","commonSituations":"Configs copied from another codebase whose backend names differ; users assuming Triton selection also goes through update_rule and setting both incorrectly.","solutions":["Use 'auto' (preferred; falls back to torch when Triton prechecks fail), 'torch', or 'triton'","Remember: update_rule/cam_update_rule pick the algorithm, gdn_backend picks the kernel — set Triton via gdn_backend"],"exampleFix":"# before\nGDNBlock(dim, gdn_backend=\"cuda\")\n# after\nGDNBlock(dim, gdn_backend=\"auto\")","handlingStrategy":"validation","validationCode":"assert gdn_backend in (\"auto\", \"torch\", \"triton\"), gdn_backend","typeGuard":"def valid_gdn_backend(b: str) -> bool: return b in (\"auto\", \"torch\", \"triton\")","tryCatchPattern":null,"preventionTips":["Prefer 'auto' in production configs"],"tags":["sana-wm","gdn","backend-selection","invalid-enum"],"backgroundTag":"invalid-argument-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}