{"record":{"id":"297b725160f6db6f","repo":"sgl-project/sglang","slug":"self-pipeline-name-requires-distilled-lora-pat","errorCode":null,"errorMessage":"{self.pipeline_name} requires --distilled-lora-path (component_paths['distilled_lora']).","messagePattern":"(.+?) requires --distilled-lora-path \\(component_paths\\['distilled_lora'\\]\\)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines/ltx_2_pipeline.py","lineNumber":698,"sourceCode":"                f\"{self.pipeline_name} requires --spatial-upsampler-path \"\n                \"(component_paths['spatial_upsampler']).\"\n            )\n        module, memory_usage = PipelineComponentLoader.load_component(\n            component_name=\"spatial_upsampler\",\n            component_model_path=upsampler_path,\n            transformers_or_diffusers=\"diffusers\",\n            server_args=server_args,\n        )\n        self.modules[\"spatial_upsampler\"] = module\n        self.memory_usages[\"spatial_upsampler\"] = memory_usage\n\n        # LTX-2 / 2.3 merge a distilled LoRA per stage; LTX-2.5's transformer\n        # is already distilled, so the LoRA is optional there.\n        distilled_lora_path = server_args.component_paths.get(\"distilled_lora\")\n        if not distilled_lora_path and not self._transformer_is_predistilled(\n            server_args\n        ):\n            raise ValueError(\n                f\"{self.pipeline_name} requires --distilled-lora-path \"\n                \"(component_paths['distilled_lora']).\"\n            )\n        self._distilled_lora_path = distilled_lora_path\n        self._stage1_lora_path = server_args.lora_path\n        self._stage1_lora_scale = float(server_args.lora_scale)\n        self._active_lora_phase = None\n        self._active_lora_signature = None\n        self._use_premerged_stage2_transformer = False\n        # set when original mode merges stage-1 distilled LoRA into the DiT base\n        # once at init (see _merge_stage1_distilled_into_base).\n        self._stage1_distilled_in_base = False\n        self._stage1_distilled_base_strength: float | None = None\n\n    @staticmethod\n    def _transformer_is_predistilled(server_args: ServerArgs) -> bool:\n        \"\"\"Whether the checkpoint's own transformer is already distilled.\n","sourceCodeStart":680,"sourceCodeEnd":716,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines/ltx_2_pipeline.py#L680-L716","documentation":"Raised by LTX2Pipeline.initialize_pipeline when no distilled_lora component path is provided and the transformer is not pre-distilled. LTX-2 / 2.3 merge a distilled LoRA per stage for fast few-step sampling; only LTX-2.5's transformer (already distilled at train time) is exempt via _transformer_is_predistilled.","triggerScenarios":"Launching an LTX-2 or LTX-2.3 checkpoint without --distilled-lora-path; supplying the flag only via a config key the launcher ignores; running a 2.5-adjacent transformer whose checkpoint lacks the pre-distillation marker so the exemption check fails.","commonSituations":"Omitting the LoRA flag when copying a launch line from LTX-2.5 examples; separate-repo distilled LoRA artifacts not downloaded together with the base model; wrong model_path causing the predistilled probe to look at the wrong config.","solutions":["Pass --distilled-lora-path <dir> for LTX-2 / 2.3 checkpoints","If you are actually running a pre-distilled (LTX-2.5-style) transformer, verify model_path points at the right checkpoint so _transformer_is_predistilled detects it and the flag becomes optional","Download the distilled LoRA artifact and confirm the directory exists before launch"],"exampleFix":"# before\npython -m sglang.launch_server --model-path ltx2-2.3 ...\n\n# after\npython -m sglang.launch_server --model-path ltx2-2.3 --distilled-lora-path /models/ltx2-distilled-lora","handlingStrategy":"validation","validationCode":"needs_lora = not pipeline._transformer_is_predistilled(server_args)\nif needs_lora and not server_args.component_paths.get('distilled_lora'):\n    raise SystemExit('this LTX-2 checkpoint requires --distilled-lora-path')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Know your transformer generation: 2/2.3 need the distilled LoRA, 2.5 does not","Validate all component paths exist on the serving node before launch"],"tags":["ltx2","distilled-lora","missing-path","component","sglang"],"backgroundTag":"missing-component-path","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}