[Bugfix][DSv3.2] Skip indexer weights for index-cache-skipped layers (#46600)

Signed-off-by: Frida Andersson <fanderss@amd.com> Co-authored-by: Andreas Karatzas <akaratza@amd.com>

frida-andersson committed Jun 28, 2026 at 10:37 UTC 6eb63a1da6996abad00323dc7e845dc868996524
1 file changed +10
vllm/model_executor/models/deepseek_v2.py
+10
@@ -1451,6 +1451,11 @@ class DeepseekV2Model(nn.Module):
1451 pp_missing_layer_names = get_pp_missing_layer_names(self)
1452 params_dict = dict(self.named_parameters())
1453 loaded_params: set[str] = set()
1454 + # With index_topk_freq>1 only some layers build an indexer, yet the
1455 + # checkpoint ships indexer weights for all of them; track the built ones.
1456 + indexer_present_prefixes = {
1457 + n.rsplit(".indexer.", 1)[0] for n in params_dict if ".indexer." in n
1458 + }
1459 for name, loaded_weight in weights:
1460 if "rotary_emb.inv_freq" in name:
1461 continue
@@ -1459,6 +1464,11 @@ class DeepseekV2Model(nn.Module):
1464 if spec_layer is not None:
1465 continue # skip spec decode layers for main model
1466
1467 + if ".indexer." in name and (
1468 + name.rsplit(".indexer.", 1)[0] not in indexer_present_prefixes
1469 + ):
1470 + continue # this layer has no indexer; drop its checkpoint weights
1471 +
1472 is_fusion_moe_shared_experts_layer = (
1473 rocm_aiter_moe_shared_expert_enabled and ("mlp.shared_experts" in name)
1474 )