Покращення спостережуваності за навантаженнями AI за допомогою NCCL Inspector

Покращення спостережуваності за навантаженнями AI за допомогою NCCL Inspector

Під час використання бібліотеки колективних комунікацій NVIDIA (NCCL) для виконання навчання глибокого навчання або робочого навантаження з висновками, що використовує колективні операції (такі як AllReduce, AllGather і ReduceScatter), може бути важко визначити, як працює NCCL під час виконання фактичного робочого навантаження.

Ця публікація представляє плагін NCCL Inspector Profiler, який вирішує цю проблему. Він пропонує спосіб комплексного постійного спостереження за продуктивністю з низькими накладними витратами для розподіленого глибокого навчання та робочих навантажень із висновками.

Що таке інспектор NCCL?

NCCL Inspector — це інструмент для профілювання та аналізу, який забезпечує детальну продуктивність кожного комунікатора, кожного колективу та реєстрацію метаданих. Цей інструмент складається з двох основних етапів: збору та аналізу даних.

Інспектор NCCL може допомогти відповісти на запитання на різні теми, зокрема:

  • Порівняння колективної продуктивності всередині роботи: Як AllReduce, AllGather, ReduceScatter та інші колективи працюють у домені Data Parallel порівняно з доменом Tensor Parallel?
  • Порівняння продуктивності колективу між посадами: Чи вчорашня перевантаженість мережі спричинила погану роботу колективів? Це стало причиною зниження продуктивності обчислень?
  • Кореляція продуктивності обчислювальної мережі: Якщо є загальне зниження продуктивності обчислень (TFLOP), чи була причина зниження продуктивності мережі?

Інспектор NCCL регулярно записує на диск загальну пропускну здатність і тривалість кожного рангу комунікатора. Після виконання завдання ці дані про продуктивність аналізуються та корелюються протягом усього терміну виконання завдання. Продуктивність колективів NCCL потім характеризується протягом життя завдання з кількома GPU.

Будь-який фреймворк, що використовує NCCL, є критично важливим компонентом для зв’язку з кількома GPU та кількома вузлами, тому може отримати переваги від детального спостереження, яке надає NCCL Inspector.

NCCL Inspector використовує інтерфейс плагіна, представлений у NCCL 2.23, щоб увімкнути постійне спостереження за робочими навантаженнями виробництва, мінімізуючи при цьому накладні витрати на продуктивність.

На етапі збору даних бібліотека інспектора NCCL інструктує NCCL про конкретні колективні події, які вона має видавати. Користувачі можуть завантажити бібліотеку (наприклад, фреймворки DL) через NCCL_PROFILER_PLUGIN змінна середовища. Потім NCCL Inspector прослуховує передплачені події, які надсилає NCCL, і генерує структурований вихідний файл JSON для кожного з них, що дозволяє глибоко зрозуміти характеристики продуктивності колективів NCCL.

Аналіз і візуалізація після виконання завдання генеруються та виконуються за допомогою прикладів сценаріїв Python, наданих у сховищі NCCL. Цей результат у форматі JSON пізніше передається в сценарії аналізу та різні платформи спостереження, щоб дати розуміння продуктивності NCCL під час виконання робочого навантаження.

Основні можливості NCCL Inspector

Деякі з ключових видатних функцій NCCL Inspector, які роблять його корисним, включають:

  • Відстеження кожного комунікатора: NCCL Inspector підтримує окреме відстеження для кожного комунікатора NCCL. Це особливо цінно у складних розподілених програмах, таких як робочі навантаження ШІ, де кілька комунікаторів можуть використовуватися для різних цілей, наприклад домени паралельності.
  • Завжди ввімкнено низькі накладні витрати: відстеження продуктивності NCCL Inspector із низькими накладними витратами означає, що його можна ввімкнути у виробничих робочих навантаженнях, забезпечуючи «постійне» безперервне спостереження за продуктивністю NCCL без значного зниження продуктивності.
  • Показники продуктивності: NCCL Inspector розраховує та звітує про ключові показники ефективності, включаючи:
    • Алгоритмічна пропускна здатність
    • Пропускна здатність шини
    • Час виконання в мікросекундах
    • Розміри повідомлень і типи колективів
  • Агностик мережевих технологій: NCCL Inspector використовує інтерфейс плагіна для інтеграції з NCCL. Він не залежить від різних мережевих технологій, які підтримує NCCL (RoCE, IB, EFA тощо).

Етап збору даних

Для збору даних фазі, NCCL Inspector ініціалізується за допомогою кількох змінних середовища.

Необхідні змінні:

  • NCCL_PROFILER_PLUGIN: Шлях до двійкового файлу бібліотеки плагінів.
  • NCCL_INSPECTOR_ENABLE=1
  • NCCL_INSPECTOR_DUMP_THREAD_INTERVAL_MICROSECONDS: Встановлює інтервал для запису вихідних даних

Необов'язкові змінні:

  • NCCL_INSPECTOR_DUMP_DIR: вихідний каталог для журналів
  • NCCL_INSPECTOR_DUMP_VERBOSE(Optional): вмикає детальний вивід із інформацією трасування подій

Приклад використання (SLURM)

Щоб увімкнути NCCL Inspector і почати етап збору даних, вставте такі параметри змінних середовища до сценарію SBATCH у SLURM:

export NCCL_PROFILER_PLUGIN=/path/to/nccl/ext-profiler/inspector/libnccl-profiler-inspector.so
export NCCL_INSPECTOR_ENABLE=1
export NCCL_INSPECTOR_DUMP_THREAD_INTERVAL_MICROSECONDS=500
export NCCL_INSPECTOR_DUMP_DIR=/path/to/logs/${SLURM_JOB_ID}/

srun your_nccl_application

Приклад вихідного формату

{
  "header": {
    "id": "0x7f8c496ae9f661", // communicator id
    "rank": 2,
    "n_ranks": 8,
    "nnodes": 1
  },
  "metadata": {
    "inspector_output_format_version": "v4.0",
    "git_rev": "",
    "rec_mechanism": "profiler_plugin",
    "dump_timestamp_us": 1748030377748202,
    "hostname": "hostname",
    "pid": 1639453
  },
  "coll_perf": {
    "coll": "AllReduce",
    "coll_sn": 1407,
    "coll_msg_size_bytes": 17179869184,
    "coll_exec_time_us": 61974,
    "coll_algobw_gbs": 277.210914,
    "coll_busbw_gbs": 485.119099
  }
}

Детальний висновок

Коли ввімкнуто докладний режим за допомогою NCCL_INSPECTOR_DUMP_VERBOSE=1продуктивність на ядро ​​(SM) є наступною:

{
  "header": {
    "id": "0xe62dedaa97644a", //communicator info
    "rank": 4, // communicator id
    "n_ranks": 8,
    "nnodes": 1
  },
  "metadata": {
    "inspector_output_format_version": "v4.0",
    "git_rev": "9019a1912-dirty",
    "rec_mechanism": "nccl_profiler_interface",
    "dump_timestamp_us": 1752867229276385,
    "hostname": "hostname",
    "pid": 438776
  },
  "coll_perf": {
    "coll": "ReduceScatter",
    "coll_sn": 1231,
    "coll_msg_size_bytes": 2147483648,
    "coll_exec_time_us": 41057,
    "coll_timing_source": "kernel_gpu",
    "coll_algobw_gbs": 418.439467,
    "coll_busbw_gbs": 366.134533,
    "event_trace_sn": {
      "coll_start_sn": 1,
      "coll_stop_sn": 2,
      "kernel_events": [
        {
          "channel_id": 0,
          "kernel_start_sn": 3,
          "kernel_stop_sn": 48,
          "kernel_record_sn": 47
        }
      ]
    },
    "event_trace_ts": {
      "coll_start_ts": 1752867229235059,
      "coll_stop_ts": 1752867229235064,
      "kernel_events": [
        {
          "channel_id": 0,
          "kernel_start_ts": 1752867229235181,
          "kernel_stop_ts": 1752867229275811,
          "kernel_record_ts": 1752867229275811
        }
      ]
    }
  }
}

Етап аналізу даних

NCCL Inspector містить приклад комплексного аналізу продуктивності та інструмент візуалізації, який обробляє файли журналів і створює докладні звіти про ефективність. Інструмент Performance Summary Exporter забезпечує багату візуалізацію та статистичний аналіз ефективності колективної комунікації.

Експортер підсумкових даних про продуктивність

Цей автономний засіб експорту підсумкових даних про продуктивність — це інструмент аналізу на основі Python, розташований у ext-profiler/inspector/exporter/example/. Цей інструмент виконує такі завдання:

  • Обробляє журнали NCCL Inspector у кількох форматах (.log, .log.gz, .jsonl, .jsonl.gz)
  • Експорт даних у формат Parquet для ефективної обробки
  • Створює статистичні підсумки для колективних операцій
  • Створює візуалізації, включаючи діаграми розсіювання, гістограми та прямокутні діаграми
  • Класифікує моделі спілкування
    • одноранговий
    • лише nvlink
    • лише hca
    • змішаний

Інтеграція інформаційної панелі

Команда NVIDIA інтегрувала ці дані з NCCL Inspector на інформаційні панелі, які можуть надавати огляд продуктивності NCCL для кожного завдання SLURM.

Графік, що показує колективи ReduceScatter лише IB Network із розміром Communicator 32, розміром повідомлення 8,39 МБ, 8,40 МБ, 5,85 МБ.Графік, що показує колективи ReduceScatter лише IB Network із розміром Communicator 32, розміром повідомлення 8,39 МБ, 8,40 МБ, 5,85 МБ.
Рисунок 1. Інтеграція колективної продуктивності для кожного завдання з еластичною інформаційною панеллю
Два графіки, що показують лише колективи NVLink AllGather і ReduceScatter із розміром комунікатора 8, розміром повідомлення 50,33 МБ, 64 Б.Два графіки, що показують лише колективи NVLink AllGather і ReduceScatter із розміром комунікатора 8, розміром повідомлення 50,33 МБ, 64 Б.
Малюнок 2. Продуктивність кожного типу колективу, наприклад продуктивність лише колективів NVLink, які використовуються для паралелізму тензорів

Випадки використання та програми

Ви можете використовувати NCCL Inspector для низки додатків і варіантів використання, включаючи аналіз продуктивності, дослідження та розробки та моніторинг виробництва.

Аналіз продуктивності

Інспектор дозволяє детально аналізувати ефективність колективної комунікації, допомагаючи виявити вузькі місця та можливості оптимізації в розподілених навчальних навантаженнях.

Дослідження та розробки

Дослідники можуть використовувати детальні траси подій і показники продуктивності для розробки нових шаблонів зв’язку та алгоритмів.

Моніторинг виробництва

Завжди ввімкнений характер Inspector робить його придатним для безперервного моніторингу виробничих навантажень, надаючи розуміння продуктивності зв’язку з часом.

Почніть роботу з NCCL Inspector

NCCL Inspector надає потужний інструмент для розуміння й оптимізації продуктивності колективної комунікації в розподілених навчальних навантаженнях. Конструкція з низькими накладними витратами робить його придатним для використання у виробництві, а детальне відстеження подій і показники продуктивності дозволяють глибоко аналізувати шаблони зв’язку.

Щоб почати роботу та дізнатися більше про NCCL і пов’язані інструменти, відвідайте сховище NVIDIA/nccl NCCL GitHub і ознайомтеся з документацією NVIDIA Magnum IO.