{"record":{"id":"e4a466303bf09cb5","repo":"opendatalab/MinerU","slug":"unsupported-lmdeploy-backend-lm-backend-e4a466","errorCode":null,"errorMessage":"Unsupported lmdeploy backend: {lm_backend}","messagePattern":"Unsupported lmdeploy backend: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"mineru/model/vlm/lmdeploy_server.py","lineNumber":66,"sourceCode":"\n    # 添加默认参数\n    if not has_port_arg:\n        args.extend([\"--server-port\", \"30000\"])\n    if not has_gpu_memory_utilization_arg:\n        args.extend([\"--cache-max-entry-count\", \"0.5\"])\n    if not has_log_level_arg:\n        args.extend([\"--log-level\", \"ERROR\"])\n\n    device_type = os.getenv(\"MINERU_LMDEPLOY_DEVICE\", device_type)\n    if device_type == \"\":\n        device_type = \"cuda\"\n    elif device_type not in [\"cuda\", \"ascend\", \"maca\", \"camb\"]:\n        raise ValueError(f\"Unsupported lmdeploy device type: {device_type}\")\n    lm_backend = os.getenv(\"MINERU_LMDEPLOY_BACKEND\", lm_backend)\n    if lm_backend == \"\":\n        lm_backend = set_lmdeploy_backend(device_type)\n    elif lm_backend not in [\"pytorch\", \"turbomind\"]:\n        raise ValueError(f\"Unsupported lmdeploy backend: {lm_backend}\")\n    logger.info(f\"lmdeploy device is: {device_type}, lmdeploy backend is: {lm_backend}\")\n\n    if lm_backend == \"pytorch\":\n        os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"\n\n\n    args.extend([\"--device\", device_type])\n    args.extend([\"--backend\", lm_backend])\n\n    model_path = auto_download_and_get_model_root_path(\"/\", \"vlm\")\n\n    # logger.debug(args)\n\n    # 重构参数，将模型路径作为位置参数\n    sys.argv = [sys.argv[0]] + [\"serve\", \"api_server\", model_path] + args\n\n    if os.getenv('OMP_NUM_THREADS') is None:\n        os.environ[\"OMP_NUM_THREADS\"] = \"1\"","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/opendatalab/MinerU/blob/4fe4bde114a23ee5dd637eae99b767f4669bf58c/mineru/model/vlm/lmdeploy_server.py#L48-L84","documentation":"Raised when starting the lmdeploy VLM server if the resolved backend is not 'pytorch' or 'turbomind'. The value comes from the function argument overridden by the MINERU_LMDEPLOY_BACKEND env var; an empty value falls back to set_lmdeploy_backend(device_type), which picks a default per device.","triggerScenarios":"Setting MINERU_LMDEPLOY_BACKEND to values like 'vlm', 'transformers', 'trt', or passing lm_backend with such a string when calling the lmdeploy server builder.","commonSituations":"Confusing lmdeploy backend names with other inference engines; carrying over env vars from other serving stacks; trying to force a backend unsupported for the chosen device.","solutions":["Set MINERU_LMDEPLOY_BACKEND to pytorch or turbomind, or unset it to let the device default apply.","On non-CUDA devices the pytorch backend is usually the valid choice.","Remove stale backend env vars from deployment manifests."],"exampleFix":"# before\nexport MINERU_LMDEPLOY_BACKEND=vlm\n\n# after\nexport MINERU_LMDEPLOY_BACKEND=pytorch\n# or leave unset to auto-select per device","handlingStrategy":"validation","validationCode":"import os\nVALID_BACKENDS = {\"pytorch\", \"turbomind\"}\nbackend = os.getenv(\"MINERU_LMDEPLOY_BACKEND\", \"\")\nif backend:\n    assert backend in VALID_BACKENDS, f\"MINERU_LMDEPLOY_BACKEND must be one of {VALID_BACKENDS}, got {backend!r}\"","typeGuard":"def is_supported_lmdeploy_backend(b: str) -> bool:\n    return b in {\"pytorch\", \"turbomind\"}","tryCatchPattern":null,"preventionTips":["Leave MINERU_LMDEPLOY_BACKEND unset to use the per-device default","Do not confuse lmdeploy backend names with other serving engines' backends"],"tags":["vlm","lmdeploy","backend","environment-variable","validation"],"backgroundTag":null,"analyzedSha":"4fe4bde114a23ee5dd637eae99b767f4669bf58c","analyzedAt":"2026-08-14T21:29:18.456Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}