<НА ГЛАВНУЮ

ZenFlow ускоряет до 5×: безстолковые offload-обновления для обучения LLM

'ZenFlow устраняет CPU-вызываемые простои GPU и ускоряет дообучение LLM до 5×, требуя только минимальных изменений в конфигурации DeepSpeed.'

ZenFlow — расширение DeepSpeed, созданное для устранения простоев GPU, вызванных обновлениями на CPU при offloading'е оптимизаторов и градиентов. За счёт разделения вычислений GPU и CPU с помощью importance-aware конвейеризации и ограниченно-асинхронных обновлений ZenFlow поддерживает GPU загруженными и даёт значительный прирост производительности при минимальной настройке.

Почему простои GPU критичны

Offloading оптимизаторов и градиентов в память CPU снижает потребление GPU-памяти, но традиционные решения, такие как ZeRO-Offload и ZeRO-Infinity, часто приводят к простаиванию GPU, пока CPU выполняет обновления и идут передачи по PCIe. В некоторых сценариях шаг обучения может замедлиться с 0.5s до более 7s, как в случае с Llama 2-7B на 4× A100 при полном offload'е — это 14× замедление. Такие простои дорого обходятся по времени и ресурсам.

Основные методы ZenFlow

  • Importance-Aware обновления градиентов: ZenFlow сразу обновляет наиболее важные топ-k градиенты на GPU, а менее значимые накапливает асинхронно на CPU. Это снижает трафик градиентов почти на 50% и уменьшает нагрузку на PCIe примерно в 2× по сравнению с ZeRO-Offload.
  • Ограниченно-асинхронная агрегация на CPU: некритичные градиенты батчатся и обновляются на CPU асинхронно, скрывая работу CPU за вычислениями GPU, что предотвращает простои.
  • Лёгкий выбор градиентов: вместо полного AllGather градиентов используется прокси по нормам столбцов градиентов, что уменьшает объём коммуникации более чем в 4,000× и практически не влияет на точность.
  • Автоматическая подстройка: интервалы обновления адаптируются в рантайме (параметры select_interval и update_interval можно ставить в "auto"), что убирает необходимость ручной тонкой настройки.

Результаты производительности

ZenFlow обеспечивает до 5× ускорения end-to-end по сравнению с ZeRO-Offload и сокращает простои GPU более чем на 85%. Также уменьшается трафик по PCIe примерно в 2×, при этом качество моделей сохраняется на GLUE и других бенчмарках.

Интеграция и использование

ZenFlow интегрируется как расширение ZeRO-Offload в DeepSpeed и не требует изменения кода — достаточно обновить JSON-конфигурацию DeepSpeed. Доступны параметры вроде topk_ratio для выбора доли градиентов, select_strategy, select_interval и update_interval. Поддерживается автоматическое определение параметров для упрощённой развёртки.

Пример конфигурации из документации DeepSpeed:

"zero_optimization": {
  "stage": 2,
  "offload_optimizer": {
    "device": "cpu",
    "pin_memory": true
  },
  "zenflow": {
    "topk_ratio": 0.05,
    "select_strategy": "auto",
    "select_interval": "auto",
    "update_interval": 4,
    "full_warm_up_rounds": 0,
    "overlap_step": true
  }
}

В репозитории DeepSpeedExamples есть пример дообучения с ZenFlow на GLUE и скрипт bash finetune_gpt_glue.sh для старта. Следуйте README репозитория для установки и запуска.

Кому это полезно

Наибольшую выгоду увидят команды, которые дообучают большие модели на ограниченных или гетерогенных кластерах GPU. ZenFlow особенно актуален, когда offloading необходим для размещения модели, но пропускной способности CPU и задержки PCIe грозят снизить производительность GPU.

Итоговая идея

ZenFlow меняет подход к offloading'у: он приоритизирует важные градиенты, скрывает CPU-работу за GPU-вычислениями и использует лёгкий отбор градиентов для минимизации коммуникации. Это даёт беспростойное, высокопроизводительное дообучение при минимальной конфигурации и без правки кода.

🇬🇧

Switch Language

Read this article in English

Switch to English