sgl-project/sglang · error · ValueError

VLA action expert should not share the prefix TP layout. Use

Error message

VLA action expert should not share the prefix TP layout. Use SP, Ulysses, Ring, DP, or monolithic fallback for the action path.

What it means

Raised by Pi05Pipeline.load_modules when both prefix_parallel_strategy and action_parallel_strategy on the pipeline config are 'tp'. The VLA action expert must not be sharded identically to the prefix backbone over the same TP layout; a different strategy (SP, Ulysses, Ring, DP) or a monolithic fallback is required.

Source

Thrown at python/sglang/multimodal_gen/runtime/pipelines/pi05.py:90

            pipeline_config.offload_prefix_image_encoder,
            pipeline_config.offload_prefix_image_encoder_after_embed,
            pipeline_config.offload_prefix_token_embedding,
            pipeline_config.offload_prefix_language_layers,
            pipeline_config.offload_prefix_language_layers_after_prefix,
            pipeline_config.offload_prefix_language_layer_count_after_prefix,
            pipeline_config.offload_action_expert_after_denoise,
            pipeline_config.empty_cache_after_prefix,
        )
        policy_model = Pi05PolicyModel.from_pretrained(
            self.model_path,
            pipeline_config,
        )
        if (
            pipeline_config.prefix_parallel_strategy
            == pipeline_config.action_parallel_strategy
            == "tp"
        ):
            raise ValueError(
                "VLA action expert should not share the prefix TP layout. "
                "Use SP, Ulysses, Ring, DP, or monolithic fallback for the "
                "action path."
            )
        return {
            "policy_model": policy_model,
        }

    def initialize_pipeline(self, server_args: ServerArgs) -> None:
        pipeline_config: Pi05PipelineConfig = server_args.pipeline_config
        self.preprocessor = Pi05Preprocessor(pipeline_config)
        self.prefix_cache = VLAPrefixCacheManager(
            max_entries=pipeline_config.prefix_cache_max_entries
        )

    def create_pipeline_stages(self, server_args: ServerArgs):
        self.add_stage(
            VLAObservationPreprocessStage(self.preprocessor),

View on GitHub (pinned to 0132848349)

Solutions

  1. Set action_parallel_strategy to a supported non-TP strategy (sp, ulysses, ring, or dp) while keeping the prefix on tp
  2. Or drop both to the monolithic fallback for single-process layouts
  3. Audit any config templating code that assigns 'tp' to every *_parallel_strategy field

Example fix

# before
cfg = Pi05PipelineConfig(prefix_parallel_strategy='tp', action_parallel_strategy='tp')

# after
cfg = Pi05PipelineConfig(prefix_parallel_strategy='tp', action_parallel_strategy='dp')
Defensive patterns

Strategy: validation

Validate before calling

cfg = server_args.pipeline_config
if cfg.prefix_parallel_strategy == cfg.action_parallel_strategy == 'tp':
    cfg.action_parallel_strategy = 'dp'  # or 'sp'/'ulysses'/'ring' per hardware layout

Type guard

def is_valid_pi05_parallelism(cfg) -> bool:
    return not (cfg.prefix_parallel_strategy == cfg.action_parallel_strategy == 'tp')

Prevention

When it happens

Trigger: Setting Pi05PipelineConfig.prefix_parallel_strategy='tp' and action_parallel_strategy='tp' (including via defaults that copy the prefix strategy to the action path); single-GPU-style configs reused on multi-GPU hosts where 'tp' becomes the fallback for both experts.

Common situations: Config generators that propagate one parallel strategy to all components; upgrading from versions where sharing TP was permitted; users assuming TP applies uniformly to mixture-of-experts-style VLA architectures.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/9caad750d4307cc8. Report an issue: GitHub.