huggingface/transformers · error · ValueError
Sequence parallelism is enabled but no SP process group is a
Error message
Sequence parallelism is enabled but no SP process group is available. Ensure torch_device_mesh is initialized or sp_backend='deepspeed' with sp_size > 1.
What it means
Error "Sequence parallelism is enabled but no SP process group is available. Ensure torch_device_mesh is initialized or sp_backend='deepspeed' with sp_size > 1." thrown in huggingface/transformers.
Source
Thrown at src/transformers/integrations/deepspeed.py:727
# The model's forward pass receives shift_labels via **kwargs and passes it to the loss function.
# Both standard transformer models and Liger-patched models handle shift_labels correctly,
# so we can directly use the computed loss from the model output.
# See: https://huggingface.co/docs/accelerate/en/concept_guides/sequence_parallelism
if "labels" not in inputs and "shift_labels" in inputs:
# DeepSpeed SP Dataloader removes "labels" but we need it, otherwise, we won't compute the loss.
inputs["labels"] = inputs["shift_labels"]
outputs = model(**inputs)
loss = outputs.loss
# Prefer DeepSpeed SP groups when using Ulysses; otherwise fall back to torch device mesh.
if pc.sp_backend == "deepspeed" and pc.sp_size > 1:
from deepspeed.utils import groups
sp_group = groups._get_sequence_parallel_group()
elif accelerator.torch_device_mesh is not None:
sp_group = accelerator.torch_device_mesh["sp"].get_group()
else:
raise ValueError(
"Sequence parallelism is enabled but no SP process group is available. "
"Ensure torch_device_mesh is initialized or sp_backend='deepspeed' with sp_size > 1."
)
# differentiable weighted per-shard-loss aggregation across ranks
losses_per_rank = torch.distributed.nn.functional.all_gather(loss, group=sp_group)
# special dealing with SFT that has prompt tokens that aren't used in loss computation
good_tokens = (inputs["shift_labels"] != -100).view(-1).sum()
good_tokens_per_rank = torch.distributed.nn.functional.all_gather(good_tokens, group=sp_group)
losses_stacked = torch.stack(losses_per_rank)
good_tokens_stacked = torch.stack(good_tokens_per_rank)
mask = good_tokens_stacked > 0
safe_losses = torch.where(mask, losses_stacked, torch.zeros_like(losses_stacked))
total_loss = (safe_losses * good_tokens_stacked).sum()
total_good_tokens = good_tokens_stacked.sum()
loss = total_loss / total_good_tokens.clamp(min=1)
return (loss, outputs) if return_outputs else loss
View on GitHub (pinned to a597f97485)
Solutions
- Initialize torch_device_mesh before enabling sequence parallelism.
- Set sp_backend='deepspeed' with sp_size > 1 in the config.
When it happens
Trigger: Raised when sequence parallelism is configured but no SP process group exists.
Common situations: sp_backend/sp_size set without initializing torch_device_mesh or a matching DeepSpeed SP group.
AI-assisted analysis of huggingface/transformers@a597f97485 (2026-08-14).
Data as JSON: /api/errors/8b851fc95f8f6748.
Report an issue: GitHub.