{"record":{"id":"770de294acd5d948","repo":"sgl-project/sglang","slug":"didn-t-find-any-lora-adapters-when-trying-to-evict","errorCode":null,"errorMessage":"Didn't find any LoRA adapters when trying to evict LRU LoRA adapter. LoRA registry is: {self.lora_registry._registry}","messagePattern":"Didn't find any LoRA adapters when trying to evict LRU LoRA adapter\\. LoRA registry is: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/managers/tokenizer_control_mixin.py","lineNumber":654,"sourceCode":"                result = _merge_lora_update_results(\n                    await self.update_lora_adapter_communicator(obj)\n                )\n\n                # Register the LoRA adapter only after loading is successful.\n                if result.success:\n                    await self.lora_registry.register(new_adapter)\n                    self.lora_ref_cache[obj.lora_name] = new_adapter\n\n                if self.server_args.max_loaded_loras is not None:\n                    while (\n                        self.lora_registry.num_registered_loras\n                        > self.server_args.max_loaded_loras\n                    ):\n                        lru_lora_name = await self.lora_registry.lru_lora_name(\n                            exclude_pinned=True\n                        )\n                        if lru_lora_name is None:\n                            raise ValueError(\n                                \"Didn't find any LoRA adapters when trying to evict LRU LoRA adapter. \"\n                                f\"LoRA registry is: {self.lora_registry._registry}\"\n                            )\n\n                        logger.info(\n                            f\"Unloading least recently used LoRA adapter '{lru_lora_name}' \"\n                            f\"(current number of adapters: {self.lora_registry.num_registered_loras}, \"\n                            f\"max allowed: {self.server_args.max_loaded_loras})\"\n                        )\n\n                        unload_result = await self._unload_lora_adapter_locked(\n                            UnloadLoRAAdapterReqInput(lora_name=lru_lora_name)\n                        )\n                        if not unload_result.success:\n                            raise ValueError(\n                                f\"Error while unloading LRU LoRA adapter '{lru_lora_name}': \"\n                                f\"{unload_result.error_message}\"\n                            )","sourceCodeStart":636,"sourceCodeEnd":672,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/managers/tokenizer_control_mixin.py#L636-L672","documentation":"While evicting the least-recently-used LoRA adapter to stay under max_loaded_loras, the registry reported no evictable (non-pinned) adapter even though the limit was exceeded.","triggerScenarios":"load_lora_adapter exceeds max_loaded_loras but lru_lora_name(exclude_pinned=True) returns None — i.e. all loaded adapters are pinned, or the registry/counters are out of sync.","commonSituations":"Loading more pinned LoRA adapters than max_loaded_loras; adapter count leaking after failed loads.","solutions":["Raise --max-loaded-loras above the number of pinned adapters","Unpin or explicitly unload adapters you no longer need","Report if counts disagree with the logged registry state"],"exampleFix":"# before\n--enable-lora --max-loaded-loras 2  # with 3 pinned adapters\n# after\n--enable-lora --max-loaded-loras 8","handlingStrategy":"validation","validationCode":"pinned = count_pinned(lora_registry)\nassert pinned <= server_args.max_loaded_loras, 'raise --max-loaded-loras or unpin'","typeGuard":null,"tryCatchPattern":"try:\n    await client.load_lora_adapter(req)\nexcept ValueError as e:\n    if 'evict LRU' in str(e):\n        increase_max_loaded_loras_or_unload_manually()\n    raise","preventionTips":["Keep max_loaded_loras above the pinned-adapter count","Unpin adapters you don't need resident"],"tags":["lora","eviction","capacity"],"backgroundTag":"resource-eviction-failed","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}