{"record":{"id":"eda1ec2ca728a5bf","repo":"opendatalab/MinerU","slug":"unsupported-lmdeploy-backend-lm-backend","errorCode":null,"errorMessage":"Unsupported lmdeploy backend: {lm_backend}","messagePattern":"Unsupported lmdeploy backend: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mineru/backend/vlm/vlm_analyze.py","lineNumber":197,"sourceCode":"                        except ImportError:\n                            raise ImportError(\"Please install lmdeploy to use the lmdeploy-engine backend.\")\n                        if \"cache_max_entry_count\" not in kwargs:\n                            kwargs[\"cache_max_entry_count\"] = 0.5\n\n                        device_type = os.getenv(\"MINERU_LMDEPLOY_DEVICE\", \"\")\n                        if device_type == \"\":\n                            if \"lmdeploy_device\" in kwargs:\n                                device_type = kwargs.pop(\"lmdeploy_device\")\n                                if device_type not in [\"cuda\", \"ascend\", \"maca\", \"camb\"]:\n                                    raise ValueError(f\"Unsupported lmdeploy device type: {device_type}\")\n                            else:\n                                device_type = \"cuda\"\n                        lm_backend = os.getenv(\"MINERU_LMDEPLOY_BACKEND\", \"\")\n                        if lm_backend == \"\":\n                            if \"lmdeploy_backend\" in kwargs:\n                                lm_backend = kwargs.pop(\"lmdeploy_backend\")\n                                if lm_backend not in [\"pytorch\", \"turbomind\"]:\n                                    raise ValueError(f\"Unsupported lmdeploy backend: {lm_backend}\")\n                            else:\n                                lm_backend = set_lmdeploy_backend(device_type)\n                        logger.info(f\"lmdeploy device is: {device_type}, lmdeploy backend is: {lm_backend}\")\n\n                        if lm_backend == \"pytorch\":\n                            kwargs[\"device_type\"] = device_type\n                            backend_config = PytorchEngineConfig(**kwargs)\n                        elif lm_backend == \"turbomind\":\n                            backend_config = TurbomindEngineConfig(**kwargs)\n                        else:\n                            raise ValueError(f\"Unsupported lmdeploy backend: {lm_backend}\")\n\n                        log_level = 'ERROR'\n                        from lmdeploy.utils import get_logger\n                        lm_logger = get_logger('lmdeploy')\n                        lm_logger.setLevel(log_level)\n                        if os.getenv('TM_LOG_LEVEL') is None:\n                            os.environ['TM_LOG_LEVEL'] = log_level","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/opendatalab/MinerU/blob/4fe4bde114a23ee5dd637eae99b767f4669bf58c/mineru/backend/vlm/vlm_analyze.py#L179-L215","documentation":"Raised when the lmdeploy engine backend name supplied via the `lmdeploy_backend` kwarg is neither 'pytorch' nor 'turbomind'. This validation runs only when MINERU_LMDEPLOY_BACKEND is unset; the value decides whether a PytorchEngineConfig or TurbomindEngineConfig is built.","triggerScenarios":"Passing lmdeploy_backend='pytorch-engine', 'Pytorch', 'triton', or any string other than pytorch/turbomind in the analyzer kwargs while MINERU_LMDEPLOY_BACKEND is empty.","commonSituations":"Version drift: configs written for older mineru releases that accepted different backend spellings; users assuming the kwarg accepts the same names as the lmdeploy CLI; copy-paste from lmdeploy docs where backend names differ.","solutions":["Use exactly 'pytorch' or 'turbomind' for lmdeploy_backend","Or omit the kwarg entirely and let set_lmdeploy_backend(device_type) pick the right engine for your device","Or set the env var MINERU_LMDEPLOY_BACKEND=pytorch (or turbomind) instead","Check for trailing whitespace/casing: pass lmdeploy_backend.strip().lower()"],"exampleFix":"# before\nanalyzer = MineVlmAnalyzer(backend='vlm-engine', lmdeploy_backend='PytorchEngine')\n\n# after\nanalyzer = MineVlmAnalyzer(backend='vlm-engine')  # auto-select via set_lmdeploy_backend(device_type)","handlingStrategy":"validation","validationCode":"SUPPORTED_LMDEPLOY_BACKENDS = {\"pytorch\", \"turbomind\"}\n\nif lmdeploy_backend is not None:\n    assert lmdeploy_backend.strip().lower() in SUPPORTED_LMDEPLOY_BACKENDS, (\n        f\"lmdeploy_backend must be one of {SUPPORTED_LMDEPLOY_BACKENDS}\"\n    )\n# best: omit lmdeploy_backend and let mineru auto-select per device","typeGuard":null,"tryCatchPattern":"try:\n    analyzer = MineVlmAnalyzer(backend=\"vlm-engine\", lmdeploy_backend=lm_backend)\nexcept ValueError as e:\n    if \"Unsupported lmdeploy backend\" in str(e):\n        lm_backend = None  # fall back to auto-selection via set_lmdeploy_backend\n        analyzer = MineVlmAnalyzer(backend=\"vlm-engine\")\n    else:\n        raise","preventionTips":["Omit lmdeploy_backend to use automatic per-device selection","Use the MINERU_LMDEPLOY_BACKEND env var in deployment configs so code stays backend-agnostic","Keep a unit test asserting your configured backend value is in {'pytorch','turbomind'}"],"tags":["lmdeploy","vlm","backend","configuration"],"backgroundTag":null,"analyzedSha":"4fe4bde114a23ee5dd637eae99b767f4669bf58c","analyzedAt":"2026-08-14T21:29:18.456Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}