{"record":{"id":"68620b4c26cea749","repo":"sgl-project/sglang","slug":"a-log-dt-bias-must-be-contiguous-68620b","errorCode":null,"errorMessage":"`A_log`/`dt_bias` must be contiguous.","messagePattern":"`A_log`/`dt_bias` must be contiguous\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/kernels/ops/attention/helion/kda_decode.py","lineNumber":243,"sourceCode":"    ssm_state_indices: torch.Tensor,\n) -> tuple[int, int, int, int, int]:\n    \"\"\"Apply the shape and layout checks from SGLang's packed wrapper.\"\"\"\n    if mixed_qkv.ndim != 2:\n        raise ValueError(\n            f\"`mixed_qkv` must be a 2D tensor (got ndim={mixed_qkv.ndim}).\"\n        )\n    if mixed_qkv.stride(-1) != 1:\n        raise ValueError(\"`mixed_qkv` must be contiguous in the last dim.\")\n    if a.ndim != 2 or b.ndim != 2:\n        raise ValueError(\n            f\"`a` and `b` must be 2D tensors (got a.ndim={a.ndim}, b.ndim={b.ndim}).\"\n        )\n    if a.stride(-1) != 1 or b.stride(-1) != 1:\n        raise ValueError(\"`a`/`b` must be contiguous in the last dim.\")\n    if A_log.ndim != 1 or dt_bias.ndim != 1:\n        raise ValueError(\"`A_log`/`dt_bias` must be 1D tensors.\")\n    if A_log.stride(0) != 1 or dt_bias.stride(0) != 1:\n        raise ValueError(\"`A_log`/`dt_bias` must be contiguous.\")\n    if ssm_state_indices.ndim != 1:\n        raise ValueError(\n            \"`ssm_state_indices` must be 1D for packed decode \"\n            f\"(got ndim={ssm_state_indices.ndim}).\"\n        )\n    if not out.is_contiguous():\n        raise ValueError(\"`out` must be contiguous.\")\n\n    device = mixed_qkv.device\n    if any(\n        tensor.device != device\n        for tensor in (\n            a,\n            b,\n            A_log,\n            dt_bias,\n            initial_state,\n            out,","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/kernels/ops/attention/helion/kda_decode.py#L225-L261","documentation":"A_log and dt_bias must have stride(0)==1, i.e. be contiguous 1D vectors; strided views would cause incorrect indexing in the Triton kernel, so the validator rejects them upfront.","triggerScenarios":"Passing A_log or dt_bias as a non-contiguous slice (e.g. A_log[::2] or a column of a 2D param).","commonSituations":"Sub-selecting dims of a fused parameter buffer; quantized/dequantized parameter views.","solutions":["Call .contiguous() on A_log and dt_bias","Load/copy parameters into contiguous buffers"],"exampleFix":"# before\nout = decode(qkv, a, b, A_log_slice, dt_bias_slice, ...)  # strided\n# after\nout = decode(qkv, a, b, A_log_slice.contiguous(), dt_bias_slice.contiguous(), ...)","handlingStrategy":"validation","validationCode":"A_log = A_log.contiguous()\ndt_bias = dt_bias.contiguous()","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Materialize parameter slices into fresh buffers","Avoid strided parameter views crossing kernel boundaries"],"tags":["kda","mamba","contiguity","parameters","helion"],"backgroundTag":"non-contiguous-tensor","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}