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
- Set action_parallel_strategy to a supported non-TP strategy (sp, ulysses, ring, or dp) while keeping the prefix on tp
- Or drop both to the monolithic fallback for single-process layouts
- 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
- Never copy the prefix strategy blindly onto the action expert
- Add a config lint step for VLA parallel-strategy fields
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
- Pi05Pipeline v1 supports same-process execution only. Use pr
- {selection_error}{component_suffix}
- Cosmos3CausalAttention requires num_attention_heads divisibl
- Unknown Pi05 Gemma variant: {variant}
- Invalid Pi05 precision: {precision}
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/9caad750d4307cc8.
Report an issue: GitHub.