Назад к подготовке

Что делать, если модель и данные не помещаются на одну GPU

Какие подходы есть для обучения большой нейросети на нескольких GPU и чем они отличаются?

Ответить самому

Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.

Загрузка

Короткий ответ

Data parallelism делит batch между GPU и синхронизирует градиенты. Model/tensor parallelism режет саму модель. Pipeline parallelism раскладывает слои по устройствам. FSDP/ZeRO шардуют параметры, градиенты и optimizer state, чтобы снизить память.

Полный разбор

Если не хватает только throughput, обычно начинают с DDP: каждая GPU держит копию модели, считает градиенты на своей части batch, затем градиенты синхронизируются через all-reduce. Это просто и хорошо масштабируется, пока модель помещается на каждую GPU.

Если модель не помещается, нужны model parallel подходы. Tensor parallelism режет отдельные матричные операции, pipeline parallelism кладет разные блоки модели на разные GPU и прогоняет micro-batches конвейером. FSDP и ZeRO уменьшают память, шардуя параметры, градиенты и optimizer state между устройствами.

Дополнительно почти всегда включают mixed precision, gradient checkpointing, accumulation и аккуратную настройку batch size. Выбор зависит от узкого места: память параметров, память активаций, коммуникации или скорость загрузки данных.

Теория

Распределенное обучение - это баланс памяти, коммуникаций и загрузки GPU. Один термин “multi-GPU” не описывает архитектуру обучения.

Типичные ошибки

  • Путать data parallelism и model parallelism.
  • Забывать про optimizer state, который может занимать больше памяти, чем веса.
  • Считать, что больше GPU автоматически ускорят обучение без коммуникационных потерь.