{"record":{"id":"e9b8ade0e82715de","repo":"sgl-project/sglang","slug":"pi05pipeline-v1-supports-same-process-execution-on","errorCode":null,"errorMessage":"Pi05Pipeline v1 supports same-process execution only. Use prefix/action logical groups inside one worker; cross-node multimodal_gen disaggregation is a v2 target.","messagePattern":"Pi05Pipeline v1 supports same-process execution only\\. Use prefix/action logical groups inside one worker; cross-node multimodal_gen disaggregation is a v2 target\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines/pi05.py","lineNumber":38,"sourceCode":"    VLAObservationPreprocessStage,\n    VLAPrefixEncodingStage,\n)\nfrom sglang.multimodal_gen.runtime.server_args import ServerArgs\nfrom sglang.multimodal_gen.runtime.utils.logging_utils import init_logger\nfrom sglang.multimodal_gen.runtime.vla.prefix_cache import VLAPrefixCacheManager\n\nlogger = init_logger(__name__)\n\n\nclass Pi05Pipeline(ComposedPipelineBase):\n    pipeline_name = \"Pi05Pipeline\"\n    pipeline_config_cls = Pi05PipelineConfig\n    sampling_params_cls = Pi05SamplingParams\n    _required_config_modules: list[str] = []\n\n    def validate_disagg_role(self, role: RoleType) -> None:\n        if role != RoleType.MONOLITHIC:\n            raise ValueError(\n                \"Pi05Pipeline v1 supports same-process execution only. \"\n                \"Use prefix/action logical groups inside one worker; cross-node \"\n                \"multimodal_gen disaggregation is a v2 target.\"\n            )\n\n    def load_modules(\n        self,\n        server_args: ServerArgs,\n        loaded_modules: dict[str, torch.nn.Module] | None = None,\n    ) -> dict[str, torch.nn.Module]:\n        if loaded_modules is not None:\n            return loaded_modules\n\n        pipeline_config: Pi05PipelineConfig = server_args.pipeline_config\n        pipeline_config.offload_prefix_image_encoder = (\n            pipeline_config.offload_prefix_image_encoder\n            or bool(server_args.image_encoder_cpu_offload)\n        )","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines/pi05.py#L20-L56","documentation":"Raised by Pi05Pipeline.validate_disagg_role for any role except RoleType.MONOLITHIC. Pi05 (VLA) v1 runs prefix and action experts in one process; cross-node multimodal_gen disaggregation is deferred to v2, so the guard blocks PD deployments early.","triggerScenarios":"Starting the server with a prefill or decode disaggregation role while the pipeline resolves to Pi05Pipeline; PD-aware orchestrators assigning roles to every replica trigger it at validation time.","commonSituations":"Cluster templates with role env vars set globally; migrating a serving fleet to Pi05 without stripping PD flags; experimenting with PD on a newly added VLA model.","solutions":["Deploy Pi05 monolithically: unset the disaggregation role / remove PD flags from the launch command","Use prefix/action logical groups within one worker for the parallelism you need (as the message suggests)","Track upstream v2 for cross-node Pi05 disaggregation instead of forcing the role"],"exampleFix":"# before\n--disaggregation-role decode --model pi05\n\n# after\n--model pi05  # monolithic; use logical groups inside one worker","handlingStrategy":"validation","validationCode":"if role != RoleType.MONOLITHIC:\n    raise SystemExit('Pi05 v1 is monolithic-only; remove disaggregation settings')","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Do not reuse PD cluster templates for Pi05","Use logical groups within one worker for prefix/action separation"],"tags":["pi05","vla","disaggregation","monolithic-only","sglang"],"backgroundTag":"unsupported-deployment-mode","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}