Training

FSDP

Fully Sharded Data Parallel — PyTorch-реализация шардирования параметров, аналог ZeRO-3.

Что такое FSDP

FSDP (Fully Sharded Data Parallel) — встроенный в PyTorch (с версии 1.12) механизм шардирования состояния обучения между GPU. По эффекту аналогичен ZeRO-3: каждый GPU хранит только 1/N весов, градиентов и состояний оптимизатора. Перед forward/backward выполняется AllGather для сбора нужных параметров.

Ключевое преимущество перед DeepSpeed — нативная интеграция в PyTorch без внешних зависимостей, чистый Python API.

Режимы шардирования

from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
from torch.distributed.fsdp import ShardingStrategy

# FULL_SHARD = ZeRO-3: веса + градиенты + оптимизатор
model = FSDP(model, sharding_strategy=ShardingStrategy.FULL_SHARD)

# SHARD_GRAD_OP = ZeRO-2: только градиенты + оптимизатор  
model = FSDP(model, sharding_strategy=ShardingStrategy.SHARD_GRAD_OP)

# NO_SHARD = стандартный DDP (без шардирования)
model = FSDP(model, sharding_strategy=ShardingStrategy.NO_SHARD)

FSDP с Hugging Face Trainer

from transformers import TrainingArguments

args = TrainingArguments(
    fsdp="full_shard",
    fsdp_config={
        "fsdp_transformer_layer_cls_to_wrap": "LlamaDecoderLayer",
        "fsdp_backward_prefetch": "backward_pre",
    },
    bf16=True,
    ...
)

FSDP vs DeepSpeed ZeRO

FSDP DeepSpeed ZeRO-3
Зависимости Только PyTorch DeepSpeed
CPU offload Ограниченно Мощная поддержка
Производительность Сопоставима Чуть быстрее на некоторых задачах
Интеграция HF Хорошая Отличная

Для большинства задач fine-tuning выбор между FSDP и DeepSpeed — вопрос предпочтения. При нужде в CPU offload — DeepSpeed.

Связанные термины

  • ZeRO — аналогичный алгоритм в DeepSpeed
  • DeepSpeed — альтернативный фреймворк
  • gradient checkpointing — совместно используется с FSDP
  • tensor parallelism — другой тип параллелизма

Готовы запустить GPU-задачу?

Запустить GPU-сервер