Что такое FSDP и как он отличается от DDP?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
FSDP — это способ обучать большие модели, распределяя не только вычисления, но и сами параметры модели по нескольким GPU. В отличие от DDP, где на каждой GPU хранится полная копия модели, FSDP экономит память за счёт шардирования весов, градиентов и состояний оптимизатора. Это особенно важно для fine-tuning и обучения LLM, когда модель не помещается в память одной карты.
Определение:
FSDP (Fully Sharded Data Parallel) — это стратегия распределённого обучения, при которой модель разбивается на части между несколькими устройствами. Во время прямого и обратного прохода нужные параметры временно собираются, а затем снова шардируются.
DDP (Distributed Data Parallel) работает иначе: на каждом процессе/GPU хранится полная копия модели, а синхронизация происходит в основном через градиенты после backward. Поэтому DDP проще и часто быстрее в сценариях, где модель уже помещается в память, но FSDP лучше масштабируется по памяти для крупных моделей.
Пример использования:
FSDP используют, когда нужно дообучить LLM на нескольких GPU, но полная копия модели, оптимизатора и градиентов не помещается ни на одну карту. Например, модель на 7B–13B параметров может не влезать в DDP-схему, а FSDP позволит обучать её за счёт разбиения весов между GPU.
import torch
from torch.distributed.fsdp import FullyShardedDataParallel as FSDP
model = MyLargeModel().cuda()
model = FSDP(model)
for batch in dataloader:
loss = model(batch).loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
Пояснение кода:
- Создаётся обычная модель и переносится на GPU.
- Модель оборачивается в
FSDP, после чего её параметры шардируются между устройствами. - На прямом проходе FSDP подгружает нужные части параметров только на время вычисления.
- На обратном проходе градиенты также обрабатываются в распределённом виде.
optimizer.step()обновляет параметры, не требуя полной копии модели на каждой GPU.
Ключевые моменты:
- DDP хранит полную копию модели на каждом GPU, FSDP — нет.
- Главное преимущество FSDP — экономия памяти для больших моделей.
- FSDP шардирует параметры, градиенты и состояния оптимизатора.
- DDP обычно проще в настройке и часто предпочтителен, если модель помещается в память.
- FSDP особенно полезен для fine-tuning LLM и обучения моделей, близких к пределу памяти GPU.