{"record":{"id":"4629edc6d094a5a6","repo":"sgl-project/sglang","slug":"the-original-encoder-only-has-num-hidden-layers-4629ed","errorCode":null,"errorMessage":"The original encoder only has {num_hidden_layers} layers, but you requested {len(self.encoder.layers)} layers.","messagePattern":"The original encoder only has (.+?) layers, but you requested (.+?) layers\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/models/siglip2.py","lineNumber":442,"sourceCode":"        config: Siglip2VisionConfig,\n        quant_config: Optional[QuantizationConfig] = None,\n        num_hidden_layers_override: Optional[int] = None,\n        require_post_norm: Optional[bool] = None,\n        prefix: str = \"\",\n    ):\n        super().__init__()\n        embed_dim = config.hidden_size\n        self.config = config\n        self.embeddings = Siglip2VisionEmbeddings(config)\n        self.encoder = Siglip2Encoder(\n            config,\n            quant_config=quant_config,\n            num_hidden_layers_override=num_hidden_layers_override,\n            prefix=add_prefix(\"encoder\", prefix),\n        )\n        num_hidden_layers = config.num_hidden_layers\n        if len(self.encoder.layers) > config.num_hidden_layers:\n            raise ValueError(\n                f\"The original encoder only has {num_hidden_layers} \"\n                f\"layers, but you requested {len(self.encoder.layers)} layers.\"\n            )\n\n        if require_post_norm is None:\n            require_post_norm = len(self.encoder.layers) == num_hidden_layers\n\n        if require_post_norm:\n            self.post_layernorm = nn.LayerNorm(embed_dim, eps=config.layer_norm_eps)\n        else:\n            self.post_layernorm = None\n\n    @property\n    def dtype(self) -> torch.dtype:\n        return self.embeddings.patch_embedding.weight.dtype\n\n    @property\n    def device(self) -> torch.device:","sourceCodeStart":424,"sourceCodeEnd":460,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/models/siglip2.py#L424-L460","documentation":"Same guard as siglip.py: Siglip2VisionModel constructs its encoder with an optional num_hidden_layers_override; requesting more layers than the pretrained encoder's num_hidden_layers is invalid and aborts init.","triggerScenarios":"Passing num_hidden_layers_override > config.num_hidden_layers when constructing Siglip2VisionModel at python/sglang/srt/models/siglip2.py:442.","commonSituations":"Vision-layer trimming server args set to a value larger than the checkpoint's vision depth; typo'd override; edited config.json with reduced num_hidden_layers.","solutions":["Set the override <= num_hidden_layers or remove it","Verify config.json vision num_hidden_layers matches the checkpoint","Check server args for vision layer overrides before launch"],"exampleFix":"# before\noverride = 40  # siglip2 checkpoint has 27\n# after\noverride = 16  # or None","handlingStrategy":"validation","validationCode":"assert override is None or override <= config.num_hidden_layers","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Clamp vision layer overrides to the checkpoint depth"],"tags":["siglip2","vision-encoder","layer-override"],"backgroundTag":"layer-count-override-invalid","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}