{"record":{"id":"7e83f273274b2af3","repo":"sgl-project/sglang","slug":"mxfp8-kv-cache-does-not-support-dcp-kv-masks","errorCode":null,"errorMessage":"MXFP8 KV cache does not support DCP KV masks.","messagePattern":"MXFP8 KV cache does not support DCP KV masks\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/mem_cache/memory_pool.py","lineNumber":3483,"sourceCode":"        return self.v_buffer[layer_id - self.start_layer]\n\n    def get_kv_scale_buffer(self, layer_id: int) -> Tuple[torch.Tensor, torch.Tensor]:\n        idx = layer_id - self.start_layer\n        return self.k_scale_buffer[idx], self.v_scale_buffer[idx]\n\n    def set_kv_buffer(\n        self,\n        layer: RadixAttention,\n        loc_info,\n        cache_k: torch.Tensor,\n        cache_v: torch.Tensor,\n        k_scale: Optional[torch.Tensor] = None,\n        v_scale: Optional[torch.Tensor] = None,\n        layer_id_override: Optional[int] = None,\n        dcp_kv_mask: Optional[torch.Tensor] = None,\n    ):\n        if dcp_kv_mask is not None:\n            raise NotImplementedError(\"MXFP8 KV cache does not support DCP KV masks.\")\n        loc, _, _ = unwrap_write_loc(loc_info)\n        maybe_detect_oob(\n            loc, 0, self.size + self.page_size, \"set_kv_buffer (MHA-MXFP8)\"\n        )\n        layer_id = (\n            layer_id_override if layer_id_override is not None else layer.layer_id\n        )\n        idx = layer_id - self.start_layer\n\n        if k_scale is None or v_scale is None:\n            # Fused path (SGLANG_OPT_INKLING_MXFP8_FUSED_QUANT_STORE): the layer\n            # hands us bf16 K/V and one kernel quantizes + scatters the fp8\n            # payload and the interleaved UE8M0 scales.\n            if not self.mxfp8_sf_interleaved or cache_k.dtype == self.store_dtype:\n                raise ValueError(\"MXFP8 KV cache requires K and V scale tensors.\")\n            from sglang.kernels.ops.quantization.mxfp8_quant import quant_store_kv_mxfp8\n\n            quant_store_kv_mxfp8(","sourceCodeStart":3465,"sourceCodeEnd":3501,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/mem_cache/memory_pool.py#L3465-L3501","documentation":"MHATokenToKVPoolMXFP8.set_kv_buffer does not implement DCP (deep-cache/persistent KV) masked writes: passing a non-None dcp_kv_mask raises NotImplementedError immediately, since the block-scaled MXFP8 buffers plus per-token masks path is unimplemented.","triggerScenarios":"Calling set_kv_buffer(..., dcp_kv_mask=tensor) on the MXFP8 pool, i.e. enabling the DCP KV mask feature (deep cache prompt / selective KV writing) together with MXFP8 KV cache dtype.","commonSituations":"Enabling DCP/deep-cache features (which pass dcp_kv_mask into set_kv_buffer) on a server configured with MXFP8 KV cache; version where DCP was added for other dtypes only.","solutions":["Disable the DCP / dcp_kv_mask feature when using MXFP8 KV cache","Switch kv-cache-dtype to a supported one (fp8_e4m3/bf16) if DCP masks are required","Implement dcp_kv_mask handling in the MXFP8 set_kv_buffer before combining the features"],"exampleFix":"# before\nserver_args = ServerArgs(kv_cache_dtype='mxfp8', enable_dcp_kv_mask=True)\n# after\nserver_args = ServerArgs(kv_cache_dtype='mxfp8')  # or keep DCP but use fp8_e4m3 dtype","handlingStrategy":"validation","validationCode":"def dcp_mask_supported(pool) -> bool:\n    return 'MXFP8' not in type(pool).__name__\n# or: gate server args\nassert not (args.kv_cache_dtype == 'mxfp8' and args.enable_dcp_kv_mask)","typeGuard":null,"tryCatchPattern":"try:\n    pool.set_kv_buffer(layer, loc, k, v, dcp_kv_mask=mask)\nexcept NotImplementedError as e:\n    if 'DCP' in str(e):\n        pool.set_kv_buffer(layer, loc, k, v)  # unmasked fallback if semantics allow","preventionTips":["Validate dtype vs DCP feature matrix at server start","Cover each kv-cache-dtype in DCP feature tests","Refuse to start rather than fail mid-batch"],"tags":["kv-cache","mxfp8","dcp-mask","not-implemented"],"backgroundTag":"unsupported-feature-combination","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}