Настройка DeepSpeed для распределённого обучения LLM

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Настройка DeepSpeed для распределённого обучения LLM
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Настройка DeepSpeed для распределённого обучения LLM

DeepSpeed — библиотека от Microsoft для эффективного обучения больших языковых моделей. Её ключевые возможности: технология ZeRO (Zero Redundancy Optimizer), которая устраняет избыточность при хранении состояния оптимизатора и параметров модели между GPU, а также поддержка mixed precision, gradient checkpointing и pipeline parallelism.

ZeRO: ключевая инновация DeepSpeed

ZeRO Stage 1 — шардирование состояния оптимизатора (Adam states) между GPU. На 8 GPU: потребление памяти оптимизатором снижается в 8 раз.

ZeRO Stage 2 — добавляется шардирование градиентов. Суммарное снижение памяти: ~8x для состояния оптимизатора + ~8x для градиентов.

ZeRO Stage 3 — полное шардирование: параметры, градиенты, состояние оптимизатора. Позволяет обучать модели, которые в сумме не помещаются даже на все GPU кластера. При этом параметры gather и scatter при каждом forward/backward pass — overhead на коммуникацию выше, чем Stage 2.

ZeRO-Infinity — offloading параметров на CPU RAM и NVMe SSD. Позволяет обучать модели с триллионами параметров на ограниченном количестве GPU за счёт пропускной способности PCIe/NVMe.

Конфигурация DeepSpeed

{
  "zero_optimization": {
    "stage": 2,
    "allgather_partitions": true,
    "allgather_bucket_size": 2e8,
    "overlap_comm": true,
    "reduce_scatter": true,
    "reduce_bucket_size": 2e8,
    "contiguous_gradients": true
  },
  "fp16": {
    "enabled": true,
    "loss_scale": 0,
    "loss_scale_window": 1000,
    "initial_scale_power": 16,
    "hysteresis": 2,
    "min_loss_scale": 1
  },
  "bf16": {
    "enabled": false  // или true для A100/H100
  },
  "gradient_accumulation_steps": 4,
  "gradient_clipping": 1.0,
  "train_batch_size": "auto",
  "train_micro_batch_size_per_gpu": 4,
  "wall_clock_breakdown": false
}

Интеграция с Hugging Face Transformers

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./results",
    deepspeed="ds_config_zero2.json",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    fp16=True,
    num_train_epochs=3,
    logging_steps=100,
    save_steps=1000,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    tokenizer=tokenizer,
)

trainer.train()

Запуск:

deepspeed --num_gpus=8 train.py --deepspeed ds_config.json
# Или через torchrun:
torchrun --nproc_per_node=8 train.py --deepspeed ds_config.json

ZeRO Stage 3: обучение очень больших моделей

Для моделей 30B+ параметров на ограниченном кластере:

{
  "zero_optimization": {
    "stage": 3,
    "offload_optimizer": {
      "device": "cpu",
      "pin_memory": true
    },
    "offload_param": {
      "device": "cpu",
      "pin_memory": true
    },
    "overlap_comm": true,
    "contiguous_gradients": true,
    "sub_group_size": 1e9,
    "reduce_bucket_size": "auto",
    "stage3_prefetch_bucket_size": "auto",
    "stage3_param_persistence_threshold": "auto",
    "stage3_max_live_parameters": 1e9,
    "stage3_max_reuse_distance": 1e9,
    "stage3_gather_16bit_weights_on_model_save": true
  }
}

Оценка конфигурации

DeepSpeed предоставляет инструмент оценки необходимой памяти:

from deepspeed.runtime.zero.stage3 import estimate_zero3_model_states_mem_needs_all_live

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-13b-hf")
estimate_zero3_model_states_mem_needs_all_live(
    model,
    num_gpus_per_node=8,
    num_nodes=1
)
# Выводит оценку RAM и GPU памяти для разных конфигураций

Практические показатели

Конфигурация Модель Кластер Throughput
ZeRO-2, BF16 LLaMA 7B 8x A100 80GB ~7000 tokens/s
ZeRO-2, BF16 LLaMA 13B 8x A100 80GB ~3500 tokens/s
ZeRO-3, BF16 LLaMA 30B 8x A100 80GB ~1200 tokens/s
ZeRO-3 + Offload LLaMA 65B 8x A100 80GB + 512GB RAM ~400 tokens/s

DeepSpeed в сочетании с gradient checkpointing и activation recomputation позволяет обучать модели в 3-5x большего размера на том же железе по сравнению с наивной DDP реализацией.