sgl-project/sglang · error · ValueError

Intern-S2-Mobius baseline does not support PP tensors

Error message

Intern-S2-Mobius baseline does not support PP tensors

What it means

The baseline forward() does not accept pipeline-parallel proxy tensors; passing pp_proxy_tensors means the scheduler believes this stage is not first, contradicting the model's PP=1 design.

Source

Thrown at python/sglang/srt/models/interns2_mobius.py:780

                self.config.hidden_size,
                self.config.shared_expert_intermediate_size * 2,
            )
        if module_name == "down_proj":
            return self.config.shared_expert_intermediate_size, self.config.hidden_size
        return super().get_hidden_dim(module_name, layer_idx)

    @torch.no_grad()
    def forward(
        self,
        input_ids: torch.Tensor,
        positions: torch.Tensor,
        forward_batch: ForwardBatch,
        input_embeds: torch.Tensor | None = None,
        pp_proxy_tensors: PPProxyTensors | None = None,
        input_deepstack_embeds: torch.Tensor | None = None,
    ) -> torch.Tensor | PPProxyTensors:
        if pp_proxy_tensors is not None:
            raise ValueError("Intern-S2-Mobius baseline does not support PP tensors")
        hidden_states = (
            self.embed_tokens(input_ids) if input_embeds is None else input_embeds
        )
        residual = None
        aux_hidden_states = []
        for layer_idx, layer in enumerate(self.layers):
            hidden_states, residual = layer(
                positions=positions,
                hidden_states=hidden_states,
                residual=residual,
                forward_batch=forward_batch,
                meta_mlp=self.meta_mlp,
                captured_last_layer_outputs=(
                    aux_hidden_states
                    if getattr(layer, "_is_layer_to_capture", False)
                    else None
                ),
            )

View on GitHub (pinned to 0132848349)

Solutions

  1. Run with pipeline parallelism disabled (pp size 1)
  2. Use the ConditionalGeneration wrapper which owns the PP boundary
  3. Ensure callers pass pp_proxy_tensors=None for the baseline class

Example fix

# before
model.forward(hidden, forward_batch, pp_proxy_tensors=proxy)

# after
model.forward(hidden, forward_batch)  # pp disabled
Defensive patterns

Strategy: type-guard

Validate before calling

assert pp_proxy_tensors is None, "baseline model cannot consume PP tensors"

Type guard

def can_forward_baseline(pp_proxy_tensors) -> bool:
    return pp_proxy_tensors is None

Prevention

When it happens

Trigger: forward(..., pp_proxy_tensors=<non-None>) — happens when the model runs in a PP pipeline that hands received proxy tensors to a non-first stage.

Common situations: PP flags left enabled, or a wrapper forwarding proxy tensors unconditionally to the baseline model.

Related errors


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