{"record":{"id":"7c615eaae2ea9fb9","repo":"sgl-project/sglang","slug":"dflash-requires-explicit-layer-ids-for-aux-hidden-7c615e","errorCode":null,"errorMessage":"DFLASH requires explicit layer_ids for aux hidden capture.","messagePattern":"DFLASH requires explicit layer_ids for aux hidden capture\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/models/qwen3_vl.py","lineNumber":1514,"sourceCode":"        if self.pp_group.is_last_rank:\n            if not get_embedding:\n                return self.logits_processor(\n                    input_ids,\n                    hidden_states,\n                    self.lm_head,\n                    forward_batch,\n                    aux_hidden_states,\n                )\n            else:\n                return self.pooler(hidden_states, forward_batch)\n        else:\n            return hidden_states\n\n    def set_dflash_layers_to_capture(self, layer_ids: List[int]):\n        if not self.pp_group.is_last_rank:\n            return\n        if layer_ids is None:\n            raise ValueError(\n                \"DFLASH requires explicit layer_ids for aux hidden capture.\"\n            )\n        self.capture_aux_hidden_states = True\n        self.model.set_dflash_layers_to_capture([val + 1 for val in layer_ids])\n\n    def load_weights(self, weights: Iterable[Tuple[str, torch.Tensor]]):\n        stacked_params_mapping = [\n            # (param_name, shard_name, shard_id)\n            (\".qkv_proj\", \".q_proj\", \"q\"),\n            (\".qkv_proj\", \".k_proj\", \"k\"),\n            (\".qkv_proj\", \".v_proj\", \"v\"),\n            (\"gate_up_proj\", \"up_proj\", 1),\n            (\"gate_up_proj\", \"gate_proj\", 0),\n        ]\n        params_dict = dict(self.named_parameters(remove_duplicate=False))\n        for name, loaded_weight in weights:\n            if \"rotary_emb.inv_freq\" in name:\n                continue","sourceCodeStart":1496,"sourceCodeEnd":1532,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/models/qwen3_vl.py#L1496-L1532","documentation":"DFLASH aux-hidden capture on Qwen3-VL requires an explicit list of layer ids; None is rejected. Note layer ids are shifted +1 to account for the embedding/decoder offset.","triggerScenarios":"Calling Qwen3VLForConditionalGeneration.set_dflash_layers_to_capture(None) on the last PP rank during DFLASH setup.","commonSituations":"DFLASH speculative decoding enabled for Qwen3-VL without a capture-layer list.","solutions":["Set --dflash-capture-layers or equivalent explicit layer list","Verify the spec worker forwards computed indices"],"exampleFix":"# before\nmodel.set_dflash_layers_to_capture(None)\n# after\nmodel.set_dflash_layers_to_capture([0, 3, 6])","handlingStrategy":"validation","validationCode":"assert layer_ids is not None and len(layer_ids) > 0","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set --dflash-capture-layers for Qwen3-VL DFLASH runs"],"tags":["dflash","qwen3-vl","speculative-decoding"],"backgroundTag":"missing-required-argument","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}