Использование управляемых теплых пулов SageMaker
В этой статье приводится рецепт ускорения до 60%настройки гиперпараметров с помощью перекрестной проверки в SageMaker Pipelines с использованием управляемых теплых пулов SageMaker. При использовании теплых пулов время выполнения шага настройки со 120 последовательными заданиями сокращается с 10 до 4 часов.
Для улучшения и оценки производительности модели машинного обучения часто требуются различные ингредиенты. Два таких ингредиента — настройка гиперпараметров и перекрестная проверка. Первый находит лучшую версию модели, а второй оценивает, как модель будет обобщать невидимые данные. В совокупности эти шаги создают вычислительные проблемы, поскольку требуют обучения и проверки модели несколько раз, параллельно и/или последовательно.
О чем эта статья…
- Что такое теплые пулы и как их использовать для ускорения настройки гиперпараметров с перекрестной проверкой.
- Как спроектировать производственный конвейер SageMaker, включающий этапы обработки, настройки, обучения и лямбда.
Мы рассмотрим Байесовскую оптимизацию для настройки гиперпараметров, которая использует оценки уже протестированных комбинаций гиперпараметров, чтобы выбрать набор гиперпараметров для тестирования в следующем раунде. Мы будем использовать k-кратную перекрестную проверку для оценки каждой комбинации гиперпараметров, в которой разделение выглядит следующим образом:
Полный набор данных разбивается на 𝑘 проверочных сгибов, модель обучается на 𝑘-1 сгибах и проверяется на соответствующем выдвинутом сгибе. Общий балл представляет собой среднее значение отдельных баллов проверки, полученных для каждого раза проверки.
Сюжетная линия:
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. Шаги конвейера на диаграмме резюмируются следующим образом:
- Предварительная обработка данных(
ProcessingStep
) —данные извлекаются из источника, преобразуются и разбиваются на kперекрестную проверку. складки. Дополнительный полный набор данных сохраняется для окончательного обучения. - Настройка гиперпараметров с помощью CV(
TuningStep
) —это шаг, на котором мы сосредоточимся. Он находит комбинацию гиперпараметров, обеспечивающую наилучшую среднюю производительность при проверке. - Поиск оптимальных гиперпараметров(
LambdaStep
) —запускает лямбда-функцию, которая извлекает оптимальный набор гиперпараметров путем доступа к результатам. задания по настройке гиперпараметров с помощью Boto3. - Окончательное обучение(
TrainingStep
) —обучает модель на полном наборе данныхtrain_full.csv
с оптимальными гиперпараметрами. - Регистрация модели (
ModelStep
) —регистрирует окончательную обученную модель в реестре моделей SageMaker. - Вывод (
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
скрипт — служит точкой входа в SageMakerHyperparameterTuner
. Он запускает несколько заданий по перекрестной проверке. Именно внутри этого скрипта необходимо указать параметр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.py
script — обучает модель на заданном входном обучающем наборе. Гиперпараметры, проходящие перекрестную проверку, передаются в качестве аргументов этого скрипта.
Совет. Напишите
training.py
script общего назначения и повторно используйте его для обучения модели на наборах перекрестной проверки и для обучения окончательной модели с оптимальными гиперпараметрами на полном обучающем наборе.
Для управления каждым набором заданий параллельной перекрестной проверки, а также для вычисления окончательной метрики проверки для каждой конкретной протестированной комбинации гиперпараметров существует несколько пользовательских функций, которые должны быть реализованы внутри сценария 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.
Все изображения, если не указано иное, принадлежат автору.