Training

DeepSpeed

Библиотека Microsoft для распределённого обучения с ZeRO-оптимизатором и снижением потребления памяти.

Что такое DeepSpeed

DeepSpeed — библиотека для распределённого обучения от Microsoft Research, оптимизированная для LLM. Ключевые компоненты: алгоритм ZeRO (Zero Redundancy Optimizer) для устранения дублирования состояния оптимизатора между GPU, поддержка смешанной точности, gradient checkpointing и multi-node training.

Хорошо интегрирован с Hugging Face Transformers через Trainer(deepspeed=...).

ZeRO: три стадии

Стандартное обучение дублирует полную копию модели на каждом GPU. ZeRO устраняет это:

Стадия Что шардируется Экономия VRAM
ZeRO-1 Состояния оптимизатора ~4×
ZeRO-2 + Градиенты ~8×
ZeRO-3 + Параметры модели ~N× (N = число GPU)

При ZeRO-3 на 8 GPU каждый GPU хранит 1/8 весов, 1/8 градиентов, 1/8 оптимизатора — модель 70B умещается на 8× A100 40GB вместо 8× 80GB.

Быстрый старт

# ds_config.json
{
  "zero_optimization": {
    "stage": 2,
    "offload_optimizer": {"device": "cpu"},  # опционально: выгрузить на CPU
    "allgather_partitions": true,
    "reduce_scatter": true
  },
  "bf16": {"enabled": true},
  "gradient_accumulation_steps": 4,
  "train_micro_batch_size_per_gpu": 2
}
# Запуск через Hugging Face Trainer
from transformers import Trainer, TrainingArguments

args = TrainingArguments(
    deepspeed="ds_config.json",
    per_device_train_batch_size=2,
    gradient_accumulation_steps=4,
    bf16=True,
    output_dir="./output"
)
trainer = Trainer(model=model, args=args, ...)
# Запуск на нескольких GPU
deepspeed --num_gpus=8 train.py --deepspeed ds_config.json

DeepSpeed vs FSDP

DeepSpeed ZeRO FSDP
Интеграция с HF Trainer Отличная Хорошая
CPU offload Да Ограниченно
Скорость Обычно быстрее Немного медленнее
Простота настройки JSON-конфиг Python API

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

  • ZeRO — оптимизатор, реализованный в DeepSpeed
  • FSDP — альтернатива от PyTorch
  • gradient checkpointing — совместно используется
  • mixed precision — BF16/FP16 в DeepSpeed

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

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