Представляем предварительный просмотр Amazon SageMaker Profiler Отслеживайте и визуализируйте подробные данные о производительности аппаратного обеспечения для рабочих нагрузок обучения вашей модели.

Предварительный просмотр Amazon SageMaker Profiler отслеживайте и визуализируйте данные о производительности аппаратного обеспечения для обучения модели.

Сегодня мы рады объявить о предварительной версии Amazon SageMaker Profiler, возможности Amazon SageMaker, которая предоставляет подробный вид на выделенные ресурсы AWS при обучении моделей глубокого обучения на SageMaker. С помощью SageMaker Profiler вы можете отслеживать все активности на ЦП и ГП, такие как использование ЦП и ГП, запуск ядер на ГП, запуск ядер на ЦП, синхронизация операций, операции с памятью на ГП, задержки между запуском ядра и соответствующим его выполнением и передача данных между ЦП и ГП. В этой статье мы рассмотрим возможности SageMaker Profiler.

SageMaker Profiler предоставляет модули Python для аннотирования скриптов обучения PyTorch или TensorFlow и активации SageMaker Profiler. Он также предлагает пользовательский интерфейс (UI), который визуализирует профиль, статистическое резюме профилированных событий и временную шкалу обучающих заданий для отслеживания и понимания временных отношений событий между ГП и ЦП.

Необходимость профилирования обучающих заданий

С развитием глубокого обучения (DL) машинное обучение (ML) стало требовательным к вычислениям и данным, обычно требующим многоузловых, многографических кластеров. По мере увеличения размеров передовых моделей в размере триллионов параметров их вычислительная сложность и стоимость также растут быстрыми темпами. Практики машинного обучения должны справляться с общими проблемами эффективного использования ресурсов при обучении таких больших моделей. Это особенно заметно в больших языковых моделях (LLM), которые обычно имеют миллиарды параметров и, следовательно, требуют больших многографических кластеров с целью эффективного их обучения.

При обучении этих моделей на больших вычислительных кластерах мы можем столкнуться с проблемами оптимизации вычислительных ресурсов, такими как узкие места ввода-вывода, задержки запуска ядер, ограничения памяти и низкое использование ресурсов. Если конфигурация обучающей задачи не оптимизирована, эти проблемы могут привести к неэффективному использованию аппаратного обеспечения, более длительным срокам обучения или неполным обучающим процессам, что увеличивает общие затраты и сроки выполнения проекта.

Предварительные требования

Для начала использования SageMaker Profiler необходимо выполнить следующие предварительные требования:

  • Домен SageMaker в вашей учетной записи AWS – Инструкции по настройке домена можно найти в разделе Onboard to Amazon SageMaker Domain using quick setup. Вы также должны добавить профили пользователей домена для индивидуальных пользователей, чтобы они имели доступ к приложению SageMaker Profiler UI. Дополнительные сведения см. в разделе Add and remove SageMaker Domain user profiles.
  • Разрешения – Вот минимальный набор разрешений, которые должны быть назначены исполнительной роли для использования приложения SageMaker Profiler UI:
    • sagemaker:CreateApp
    • sagemaker:DeleteApp
    • sagemaker:DescribeTrainingJob
    • sagemaker:SearchTrainingJobs
    • s3:GetObject
    • s3:ListBucket

Подготовка и запуск обучающего задания с помощью SageMaker Profiler

Для начала захвата запусков ядер на ГП во время выполнения обучающей задачи измените свой скрипт обучения, используя модули Python SageMaker Profiler. Импортируйте библиотеку и добавьте методы start_profiling() и stop_profiling(), чтобы определить начало и конец профилирования. Вы также можете использовать дополнительные пользовательские аннотации, чтобы добавить маркеры в скрипт обучения и визуализировать аппаратные операции во время конкретных операций на каждом шаге.

Существует два подхода к профилированию ваших скриптов обучения с помощью SageMaker Profiler. Первый подход основан на профилировании полных функций, второй подход основан на профилировании конкретных строк кода в функциях.

Для профилирования функций используйте контекстный менеджер smppy.annotate, чтобы аннотировать полные функции. В следующем примере показано, как реализовать контекстный менеджер для обертывания цикла обучения и полных функций на каждой итерации:

import smppy

sm_prof = smppy.SMProfiler.instance()
config = smppy.Config()
config.profiler = {
    "EnableCuda": "1",
}
sm_prof.configure(config)
sm_prof.start_profiling()

for epoch in range(args.epochs):
    if world_size > 1:
        sampler.set_epoch(epoch)
    tstart = time.perf_counter()
    for i, data in enumerate(trainloader, 0):
        with smppy.annotate("step_"+str(i)):
            inputs, labels = data
            inputs = inputs.to("cuda", non_blocking=True)
            labels = labels.to("cuda", non_blocking=True)
    
            optimizer.zero_grad()
    
            with smppy.annotate("Forward"):
                outputs = net(inputs)
            with smppy.annotate("Loss"):
                loss = criterion(outputs, labels)
            with smppy.annotate("Backward"):
                loss.backward()
            with smppy.annotate("Optimizer"):
                optimizer.step()

sm_prof.stop_profiling()

Вы также можете использовать smppy.annotation_begin() и smppy.annotation_end() для аннотации конкретных строк кода в функциях. Дополнительную информацию см. в документации.

Настройка запуска задания обучения SageMaker

После завершения аннотирования и настройки модулей инициализации профилировщика сохраните скрипт обучения и подготовьте оценщик фреймворка SageMaker для обучения с использованием SageMaker Python SDK.

  1. Настройте объект profiler_config с использованием модулей ProfilerConfig и Profiler следующим образом:

    from sagemaker import ProfilerConfig, Profiler
    profiler_config = ProfilerConfig(
        profiler_params = Profiler(cpu_profiling_duration=3600))
  2. Создайте оценщик SageMaker с объектом profiler_config, созданным на предыдущем шаге. Приведенный ниже код показывает пример создания оценщика PyTorch:

    import sagemaker
    from sagemaker.pytorch import PyTorch
    
    estimator = PyTorch(
        framework_version="2.0.0",
        image_uri="763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.0-gpu-py310-cu118-ubuntu20.04-sagemaker",
        role=sagemaker.get_execution_role(),
        entry_point="train_with_profiler_demo.py", # ваша точка входа в задание обучения
        source_dir=source_dir, # каталог с исходными файлами вашего скрипта обучения
        output_path=output_path,
        base_job_name="sagemaker-profiler-demo",
        hyperparameters=hyperparameters, # если есть
        instance_count=1, 
        instance_type=ml.p4d.24xlarge,
        profiler_config=profiler_config
    )

Если вы хотите создать оценщик TensorFlow, вместо этого импортируйте sagemaker.tensorflow.TensorFlow и укажите одну из поддерживаемых версий TensorFlow SageMaker Profiler. Дополнительную информацию о поддерживаемых фреймворках и типах инстансов см. в разделе Поддерживаемые фреймворки.

  1. Запустите задание обучения, запустив метод fit:

    estimator.fit(wait=False)

Запуск пользовательского интерфейса профилировщика SageMaker

После завершения задания обучения вы можете запустить пользовательский интерфейс профилировщика SageMaker для визуализации и изучения профиля задания обучения. Вы можете получить доступ к приложению пользовательского интерфейса профилировщика SageMaker через страницу входа в профилировщик SageMaker на консоли SageMaker или через домен SageMaker.

Чтобы запустить приложение пользовательского интерфейса профилировщика SageMaker на консоли SageMaker, выполните следующие действия:

  1. На консоли SageMaker выберите Profiler в панели навигации.
  2. В разделе Начало работы выберите домен, в котором вы хотите запустить приложение пользовательского интерфейса профилировщика SageMaker.

Если ваш профиль пользователя принадлежит только одному домену, вы не увидите опцию выбора домена.

  1. Выберите профиль пользователя, для которого вы хотите запустить приложение пользовательского интерфейса профилировщика SageMaker.

Если в домене нет профиля пользователя, выберите Создать профиль пользователя. Дополнительную информацию о создании нового профиля пользователя см. в разделе Добавление и удаление профилей пользователей.

  1. Выберите Открыть профилировщик.

Вы также можете запустить пользовательский интерфейс профилировщика SageMaker со страницы сведений о домене.

Получение информации от профилировщика SageMaker

При открытии пользовательского интерфейса профилировщика SageMaker открывается страница Выбор и загрузка профиля, как показано на следующем скриншоте.

Вы можете просмотреть список всех обучающих заданий, которые были отправлены в SageMaker Profiler, и искать конкретное обучающее задание по его имени, времени создания и статусу выполнения (В процессе, Завершено, Ошибка, Остановлено или Останавливается). Чтобы загрузить профиль, выберите обучающее задание, которое вы хотите просмотреть, и выберите Загрузить. Имя задания должно отображаться в разделе Загруженный профиль вверху.

Выберите имя задания, чтобы сгенерировать панель инструментов и график времени. Обратите внимание, что при выборе задания пользовательский интерфейс автоматически открывает панель инструментов. Вы можете загружать и визуализировать только один профиль за раз. Чтобы загрузить другой профиль, вы должны сначала выгрузить ранее загруженный профиль. Чтобы выгрузить профиль, выберите значок корзины в разделе Загруженный профиль.

Для этого поста мы просматриваем профиль обучающего задания ALBEF на двух экземплярах ml.p4d.24xlarge.

После завершения загрузки и выбора обучающего задания пользовательский интерфейс открывает страницу Панель инструментов, как показано на следующем снимке экрана.

Вы можете увидеть графики для ключевых метрик, таких как активное время GPU, использование GPU со временем, активное время CPU и использование CPU со временем. Круговая диаграмма активного времени GPU показывает процент активного времени GPU по сравнению с бездействующим временем GPU, что позволяет проверить, активнее ли GPU, чем бездействуют, на протяжении всего обучающего задания. График времени использования GPU показывает среднюю нагрузку на GPU со временем на одном узле, объединяя все узлы в одной диаграмме. Вы можете проверить, есть ли несбалансированная нагрузка на GPU, проблемы с недостаточным использованием, узкие места или проблемы с бездействием в определенные временные интервалы. Дополнительные сведения о трактовке этих метрик см. в документации.

Панель инструментов предоставляет вам дополнительные графики, включая время, затраченное всеми ядрами GPU, время, затраченное 15 самыми важными ядрами GPU, количество запусков всех ядер GPU и количество запусков 15 самых важных ядер GPU, как показано на следующем снимке экрана.

Наконец, панель инструментов позволяет визуализировать дополнительные метрики, такие как распределение времени выполнения шага, которое представляет собой гистограмму, показывающую распределение длительности шагов на GPU, и круговую диаграмму распределения точности ядра, которая показывает процент времени, затраченного на выполнение ядер в различных типах данных, таких как FP32, FP16, INT32 и INT8.

Вы также можете получить круговую диаграмму распределения активности GPU, на которую затрачивается процент времени на активности GPU, такие как выполнение ядер, операции с памятью (memcpy и memset) и синхронизация (sync). Вы можете визуализировать процент времени, затраченного на операции с памятью GPU, с помощью круговой диаграммы распределения операций с памятью GPU.

Вы также можете создавать свои собственные гистограммы на основе пользовательских метрик, которые вы аннотировали вручную, как описано ранее в этом посте. При добавлении пользовательской аннотации в новую гистограмму выберите или введите имя аннотации, которую вы добавили в обучающий скрипт.

Интерфейс временной шкалы

Пользовательский интерфейс SageMaker Profiler также включает интерфейс временной шкалы, который предоставляет вам подробный вид на вычислительные ресурсы на уровне операций и ядер, запланированных на ЦП и выполняемых на ГП. Временная шкала организована в древовидной структуре, предоставляя вам информацию от уровня хоста до уровня устройства, как показано на следующем снимке экрана.

Для каждого ЦП вы можете отслеживать счетчики производительности ЦП, такие как clk_unhalted_ref.tsc и itlb_misses.miss_causes_a_walk. Для каждого ГП на экземпляре 2x p4d.24xlarge вы можете увидеть временную шкалу хоста и временную шкалу устройства. Запуски ядер находятся на временной шкале хоста, а выполнения ядер – на временной шкале устройства.

Вы также можете увеличить масштаб отдельных шагов. На следующем скриншоте мы увеличили масштаб до шага_41. Выделенная на следующем скриншоте полоса времени представляет собой операцию AllReduce, необходимый шаг связи и синхронизации в распределенном обучении, выполняемый на GPU-0. Обратите внимание на то, что запуск ядра на хосте GPU-0 соединяется с запуском ядра в потоке устройства GPU-0 1, указанном стрелкой цвета голубой на скриншоте.

Доступность и соображения

SageMaker Profiler доступен в PyTorch (версии 2.0.0 и 1.13.1) и TensorFlow (версии 2.12.0 и 2.11.1). В следующей таблице приведены ссылки на поддерживаемые контейнеры AWS Deep Learning для SageMaker.

Фреймворк Версия URI образа AWS DLC
PyTorch 2.0.0 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:2.0.0-gpu-py310-cu118-ubuntu20.04-sagemaker
PyTorch 1.13.1 763104351884.dkr.ecr.<region>.amazonaws.com/pytorch-training:1.13.1-gpu-py39-cu117-ubuntu20.04-sagemaker
TensorFlow 2.12.0 763104351884.dkr.ecr.<region>.amazonaws.com/tensorflow-training:2.12.0-gpu-py310-cu118-ubuntu20.04-sagemaker
TensorFlow 2.11.1 763104351884.dkr.ecr.<region>.amazonaws.com/tensorflow-training:2.11.1-gpu-py39-cu112-ubuntu20.04-sagemaker

SageMaker Profiler в настоящее время доступен в следующих регионах: США, Восточная (Огайо, Северная Виргиния), США, Западная (Орегон) и Европа (Франкфурт, Ирландия).

SageMaker Profiler доступен на типах экземпляров для обучения ml.p4d.24xlarge, ml.p3dn.24xlarge и ml.g4dn.12xlarge.

Для полного списка поддерживаемых фреймворков и версий обратитесь к документации.

Стоимость использования SageMaker Profiler начинается после окончания бесплатного периода или пробного периода функции SageMaker. Дополнительную информацию вы найдете в разделе “Ценообразование Amazon SageMaker”.

Производительность SageMaker Profiler

Мы сравнили накладные расходы SageMaker Profiler с различными профилировщиками с открытым исходным кодом. Базовое значение, использованное для сравнения, было получено при выполнении задания обучения без профилировщика.

Наши основные результаты показали, что SageMaker Profiler в целом приводит к более короткому времени тренировки, так как имеет меньше времени накладных расходов на общем протяжении тренировочного запуска. Он также генерирует меньше профилирующих данных (до 10 раз меньше) по сравнению с альтернативами с открытым исходным кодом. Меньшие артефакты профилирования, генерируемые SageMaker Profiler, требуют меньше места для хранения, что также позволяет сэкономить на затратах.

Заключение

SageMaker Profiler позволяет получать подробную информацию о использовании вычислительных ресурсов при обучении моделей глубокого обучения. Это позволяет выявить узкие места и узкие места производительности, чтобы обеспечить эффективное использование ресурсов, что в конечном итоге приведет к снижению затрат на обучение и сокращению общего времени обучения.

Для начала работы с SageMaker Profiler ознакомьтесь с документацией.