Использование управляемых теплых пулов SageMaker

В этой статье приводится рецепт ускорения до 60%настройки гиперпараметров с помощью перекрестной проверки в SageMaker Pipelines с использованием управляемых теплых пулов SageMaker. При использовании теплых пулов время выполнения шага настройки со 120 последовательными заданиями сокращается с 10 до 4 часов.

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

О чем эта статья…

  • Что такое теплые пулы и как их использовать для ускорения настройки гиперпараметров с перекрестной проверкой.
  • Как спроектировать производственный конвейер SageMaker, включающий этапы обработки, настройки, обучения и лямбда.

Мы рассмотрим Байесовскую оптимизацию для настройки гиперпараметров, которая использует оценки уже протестированных комбинаций гиперпараметров, чтобы выбрать набор гиперпараметров для тестирования в следующем раунде. Мы будем использовать k-кратную перекрестную проверку для оценки каждой комбинации гиперпараметров, в которой разделение выглядит следующим образом:

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

Сюжетная линия:

1. Что такое теплые бассейны?

2. Сквозной конвейер SageMaker

3. Что происходит внутри шага настройки?

4. Что мы получаем от использования теплых бассейнов?

5. Сводка

1. Что такое теплые бассейны?

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

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

Включить теплые пулы очень просто. Вы просто добавляете дополнительный параметр (keep_alive_period_in_seconds) при создании задания обучения в SageMaker:

estimator = Estimator(
    entry_point='training.py',
    keep_alive_period_in_seconds=600,
    ...
)

Если вы хотите узнать больше об управляемых теплых пулах SageMaker, вот документация:



Теперь, когда мы знаем, что такое теплые пулы, в Разделе 2 мы углубимся в то, как использовать их для ускорения общего времени выполнения конвейера SageMaker, который включает настройку гиперпараметров с перекрестной проверкой.

2. Сквозной конвейер SageMaker

На следующем рисунке показан сквозной конвейер SageMaker, который выполняет настройку гиперпараметров с перекрестной проверкой.

Мы создадим конвейер с помощью SageMaker Python SDK, библиотеки с открытым исходным кодом, которая упрощает процесс обучения, настройки и развертывания моделей машинного обучения в AWS SageMaker. Шаги конвейера на диаграмме резюмируются следующим образом:

  1. Предварительная обработка данных(ProcessingStep) —данные извлекаются из источника, преобразуются и разбиваются на kперекрестную проверку. складки. Дополнительный полный набор данных сохраняется для окончательного обучения.
  2. Настройка гиперпараметров с помощью CV(TuningStep) —это шаг, на котором мы сосредоточимся. Он находит комбинацию гиперпараметров, обеспечивающую наилучшую среднюю производительность при проверке.
  3. Поиск оптимальных гиперпараметров(LambdaStep) —запускает лямбда-функцию, которая извлекает оптимальный набор гиперпараметров путем доступа к результатам. задания по настройке гиперпараметров с помощью Boto3.
  4. Окончательное обучение(TrainingStep) —обучает модель на полном наборе данных train_full.csv с оптимальными гиперпараметрами.
  5. Регистрация модели (ModelStep) —регистрирует окончательную обученную модель в реестре моделей SageMaker.
  6. Вывод (TransformStep) — генерирует прогнозы с использованием зарегистрированной модели.

Подробную документацию о том, как реализовать эти шаги, можно найти в Руководстве разработчика SageMaker.

3. Что происходит на этапе настройки?

Давайте теперь углубимся в этап конвейера 2, который итеративно пытается и перекрестно проверяет несколько комбинаций гиперпараметров параллельно и последовательно. Решение представлено на следующей схеме:

Решение основано на автоматической настройке модели SageMaker для создания и организации учебных заданий, которые тестируют несколько комбинаций гиперпараметров. Задание автоматической настройки модели можно запустить с помощью HyperparameterTuner, доступного в SageMaker Python SDK. Он создает MxN обучающих заданий по настройке гиперпараметров, M из которых выполняются параллельно в течение N последовательных раундов, которые постепенно искать лучшие гиперпараметры. Каждое из этих заданий запускает и отслеживает набор K заданий перекрестной проверки. В каждом раунде настройки MxK экземпляров в "горячем" пуле сохраняются для следующего раунда. В последующих раундах время запуска экземпляра отсутствует.

HyperparameterTuner SageMaker уже использует теплые пулы, как было объявлено в Блоге новостей AWS. Однако задания перекрестной проверки, которые создаются в каждом задании настройки — которые выполняют перекрестную проверку определенной комбинации гиперпараметров, — должны создаваться и контролироваться вручную, и предоставляться экземпляры не хранятся в теплом пуле. Каждое задание обучения по настройке гиперпараметров завершится только после завершения всех базовых заданий обучения перекрестной проверке.

Чтобы воплотить описанную выше архитектуру в жизнь и включить теплые пулы для всех учебных заданий, нам нужно создать три основных сценария: pipeline.py, cross_validation.py и training.py:

  • pipeline.py script —определяет этапы конвейера SageMaker, описанные в Разделе 2, который включает HyperparameterTuner SageMaker:
#pipeline.py script
...
# Steps 2 to 5

tuner = HyperparameterTuner(
    estimator=estimator,
    metric_definitions=[
        {
          "Name": "training:score",
          "Regex": "average model training score:(.*?);"
        },
        {
          "Name": "validation:score",
          "Regex": "average model validation score:(.*?);"
        }
    ],
    objective_metric_name="validation:score",
    strategy="Bayesian",
    max_jobs=max_jobs, # M x N
    max_parallel_jobs=max_parallel_jobs # M
)

# Step 2 - Hyperparameter tuning With cross-validation step
step_tune = TuningStep(
    name="tuning-step",
    step_args=tuner.fit({
        "train": "<s3-path-to-training-folds>",
        "validation": "<s3-path-to-validation-folds>"
    })
)

# Step 3 - Optimal hyperparameter retrieval step
step_lambda = LambdaStep(
    name="get-optimal-hyperparameters-step",
    lambda_func=lambda_get_optimal_hyperparameters,
    inputs={
        "best_training_job_name": step_tune.properties.BestTrainingJob.TrainingJobName,
    },
    outputs=[
        LambdaOutput(output_name="hyperparameter_a"),
        LambdaOutput(output_name="hyperparameter_b"),
        LambdaOutput(output_name="hyperparameter_c")
    ]
)

# Step 4 - Final training step
step_train = TrainingStep(
    name="final-training-step",
    step_args=estimator.fit({"train": "<s3-path-to-full-training-set>"})
)

model = Model(
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    ...
)

# Step 5 - Model registration step
step_model_registration = ModelStep(
    name="model-registration-step",
    step_args=model.register(.)
)
  • cross_validation.py скрипт — служит точкой входа в SageMaker HyperparameterTuner. Он запускает несколько заданий по перекрестной проверке. Именно внутри этого скрипта необходимо указать параметр keep_alive_period_in_seconds при вызове SageMaker Training Job API. Сценарий вычисляет и регистрирует средний балл проверки по всем сгибам проверки. Регистрация значения позволяет легко считывать эту метрику с помощью Regex по HyperparameterTuner (как в приведенном выше фрагменте кода). Эта метрика будет привязана к каждой комбинации гиперпараметров.

Совет. Добавьте небольшую задержку, т. е. несколько секунд, между вызовами API-интерфейсов SageMaker, которые создают и отслеживают задания обучения, чтобы предотвратить ошибку «Превышение скорости», как в примере:

#cross_validation.py script

import time
...

training_jobs = []
for fold_index in range(number_of_folds):

    # Create cross-validation training jobs (one per fold)
    job = train_model(
        training_data="<training-data-s3-path>"
        validation_data="<validation-data-s3-path>"
        fold_index=fold_index,
        hyperparameters={
            "hyperparameter_a": "<value-of-hyperparameter-a>",
            "hyperparameter_b": "<value-of-hyperparameter-b>",
            "hyperparameter_c": "<value-of-hyperparameter-c>"
    })
    training_jobs.append(job)

    # Add delay to prevent Rate Exceeded error. 
    time.sleep(5)
...

Совет. Отключите профилировщик отладчика при запуске обучающих заданий SageMaker. Этих экземпляров профилировщика будет столько же, сколько и обучающих экземпляров, и это может привести к значительному увеличению общей стоимости. Вы можете сделать это, просто установив disable_profiler=True в определении Estimator.

  • training.pyscript — обучает модель на заданном входном обучающем наборе. Гиперпараметры, проходящие перекрестную проверку, передаются в качестве аргументов этого скрипта.

Совет. Напишите training.pyscript общего назначения и повторно используйте его для обучения модели на наборах перекрестной проверки и для обучения окончательной модели с оптимальными гиперпараметрами на полном обучающем наборе.

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

Сколько всего рабочих мест создано?

MxNx (K+1) заданий. Почему?

  • MxN обучающих заданий по настройке гиперпараметров — M параллельно и N последовательно — соответствует количеству комбинаций гиперпараметров.
  • K параллельных заданий перекрестной проверки на задание по обучению настройке гиперпараметров + 1 (само задание по обучению настройке гиперпараметров).

Если у нас есть 5 проверочных сверток, запустить 4 задания по настройке гиперпараметров параллельно и 120 последовательно, то общее количество заданий будет 2880.

Важно! Убедитесь, что у вас есть все необходимые сервисные квоты для используемых вами типов инстансов. Ознакомьтесь с руководствами AWS, чтобы понять, как установить эти квоты как для теплых пулов, так и для автоматической настройки модели.

4. Что мы получаем от использования теплых пулов?

Допустим, мы хотим запустить N = 120 последовательных заданий обучения, время запуска экземпляров составляет 3 минуты, а выполнение обучения занимает 2 минуты (5 минут на задание). Это означает, что общее время выполнения составляет приблизительно:

  • Без теплых пулов: 5 минут x 120 заданий = 10 часов
  • С теплыми пулами: 5 минут x 1 задание + 2 минуты x 119 заданий ≈ 4 часа

Это означает, что с теплыми пулами процесс занимает на 60 % меньше времени!

5. Резюме

В этой статье я показал, как мы можем использовать теплые пулы для значительного ускорения настройки гиперпараметров с помощью перекрестной проверки в SageMaker Pipelines. Теплые пулы — это отличная функция SageMaker, которая не только обеспечивает более эффективные конвейеры производства, но и ускоряет итерации в экспериментах. На данный момент управляемые теплые пулы SageMaker интегрированы в SageMaker Training, но не в SageMaker Processing.

— Жоао Перейра

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

Все изображения, если не указано иное, принадлежат автору.