{"record":{"id":"989d0b51ccd197db","repo":"sgl-project/sglang","slug":"error-while-unloading-lru-lora-adapter-lru-lora","errorCode":null,"errorMessage":"Error while unloading LRU LoRA adapter '{lru_lora_name}': {unload_result.error_message}","messagePattern":"Error while unloading LRU LoRA adapter '(.+?)': (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/managers/tokenizer_control_mixin.py","lineNumber":669,"sourceCode":"                            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                            )\n                        del result.loaded_adapters[lru_lora_name]\n\n                return result\n        except ValueError as e:\n            return LoadLoRAAdapterReqOutput(\n                success=False,\n                error_message=str(e),\n            )\n\n    async def load_lora_adapter_from_tensors(\n        self: TokenizerManager,\n        obj: LoadLoRAAdapterFromTensorsReqInput,\n        _: Optional[fastapi.Request] = None,\n    ) -> LoadLoRAAdapterFromTensorsReqOutput:\n        self.auto_create_handle_loop()","sourceCodeStart":651,"sourceCodeEnd":687,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/managers/tokenizer_control_mixin.py#L651-L687","documentation":"During LRU eviction inside load_lora_adapter, the attempt to unload the chosen adapter failed and returned an error message, so the load aborts.","triggerScenarios":"_unload_lora_adapter_locked for the LRU adapter returns success=False (scheduler-side unload failure), e.g. adapter in use by in-flight requests or backend unload error.","commonSituations":"High concurrency with adapters hot in flight; LoRA backend errors during weight unloading.","solutions":["Retry the load after in-flight requests using that adapter finish","Inspect server logs for the underlying unload error message included in the exception","Unoad the adapter manually via /unload_lora_adapter and inspect the error"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"for attempt in range(3):\n    try:\n        return await client.load_lora_adapter(req)\n    except ValueError as e:\n        if 'unloading LRU' in str(e) and attempt < 2:\n            await asyncio.sleep(2); continue\n        raise","preventionTips":["Drain requests using soon-to-be-evicted adapters before loading new ones","Watch scheduler logs for unload failures"],"tags":["lora","eviction","unload"],"backgroundTag":"resource-eviction-failed","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}