MLOps — это ключевая дисциплина, которая часто контролирует путь к производству моделей машинного обучения (ML). Естественно сосредоточиться на одной модели, которую вы хотите обучить и развернуть. Однако в действительности вы, скорее всего, будете работать с десятками или даже сотнями моделей, и процесс может включать несколько сложных шагов. Поэтому важно иметь инфраструктуру для отслеживания, обучения, развертывания и мониторинга моделей различной сложности в любом масштабе. Именно здесь на помощь приходят инструменты MLOps. Инструменты MLOps помогают повторять и надежно создавать и упрощать эти процессы в рабочем процессе, адаптированном для машинного обучения.
Amazon SageMaker Pipelines, функция Amazon SageMaker, представляет собой специально созданный сервис оркестровки рабочих процессов для машинного обучения, который помогает автоматизировать сквозные рабочие процессы машинного обучения в любом масштабе. Он упрощает разработку и обслуживание моделей машинного обучения, предоставляя централизованную платформу для управления такими задачами, как подготовка данных, обучение модели, настройка и проверка. SageMaker Pipelines может помочь вам упростить управление рабочим процессом, ускорить эксперименты и упростить переобучение моделей.
В этом посте мы расскажем об интересной новой функции SageMaker Pipelines, известной как выборочное выполнение. Эта новая функция позволяет вам выборочно запускать определенные части вашего рабочего процесса ML, что приводит к значительной экономии времени и вычислительных ресурсов за счет ограничения выполнения шагами конвейера в области действия и устранения необходимости запуска шагов вне области действия. Кроме того, мы изучаем различные варианты использования, в которых преимущества использования выборочного выполнения становятся очевидными, что еще больше укрепляет его ценностное предложение.
Обзор решения
SageMaker Pipelines продолжает вносить новшества в свои возможности для разработчиков, выпуская Selective Execution. Разработчики машинного обучения теперь могут выбирать определенные шаги для запуска в конвейере, что устраняет необходимость повторного запуска всего конвейера. Эта функция позволяет повторно запускать определенные разделы конвейера, изменяя параметры среды выполнения, связанные с выбранными шагами.
Важно отметить, что выбранные шаги могут зависеть от результатов невыбранных шагов. В таких случаях выходные данные этих невыбранных шагов повторно используются из эталонного запуска текущей версии конвейера. Это означает, что эталонный прогон должен быть уже завершен. Эталонный запуск по умолчанию — это последний запуск текущей версии конвейера, но вы также можете использовать другой запуск текущей версии конвейера в качестве эталона.
Общее состояние эталонного прогона должно быть Успешный, Неуспешный или Остановлено. Не может быть Бег когда Selective Execution пытается использовать свои выходные данные. При использовании выборочного выполнения вы можете выбрать любое количество шагов для запуска, если они образуют непрерывную часть конвейера.
На следующей диаграмме показано поведение конвейера при полном запуске.
На следующей диаграмме показано поведение конвейера с использованием выборочного выполнения.
В следующих разделах мы покажем, как использовать выборочное выполнение для различных сценариев, включая сложные рабочие процессы в конвейерных прямых ациклических графах (DAG).
Предпосылки
Чтобы начать экспериментировать с выборочным выполнением, нам нужно сначала настроить следующие компоненты вашей среды SageMaker:
- SageMaker Python SDK – Убедитесь, что у вас есть обновленная SageMaker Python SDK установлен в вашей среде Python. Вы можете запустить следующую команду из своего ноутбука или терминала, чтобы установить или обновить версию SageMaker Python SDK до 2.162.0 или выше:
python3 -m pip install sagemaker>=2.162.0
илиpip3 install sagemaker>=2.162.0
. - Доступ к SageMaker Studio (необязательно) – Amazon SageMaker Studio может быть полезен для визуализации выполнения конвейера и визуального взаимодействия с уже существующими ARN конвейера. Если у вас нет доступа к SageMaker Studio или вы используете записные книжки по запросу или другие IDE, вы все равно можете следить за этой публикацией и взаимодействовать с конвейерными ARN с помощью Python SDK.
Пример кода для полного сквозного пошагового руководства доступен в репозиторий GitHub.
Настраивать
С sagemaker>=1.162.0
Python SDKмы представили SelectiveExecutionConfig
класс как часть sagemaker.workflow.selective_execution_config
модуль. Функция выборочного выполнения использует ARN конвейера, который ранее был помечен как Успешно, Неуспешный или Остановлено. В следующем фрагменте кода показано, как импортировать SelectiveExecutionConfig
class, извлеките ARN эталонного конвейера и соберите связанные шаги конвейера и параметры среды выполнения, управляющие запуском конвейера:
import boto3
from sagemaker.workflow.pipeline import Pipeline
from sagemaker.workflow.selective_execution_config import SelectiveExecutionConfig
sm_client = boto3.client('sagemaker')
# reference the name of your sample pipeline
pipeline_name = "AbalonePipeline"
# filter for previous success pipeline execution arns
pipeline_executions = (_exec
for _exec in Pipeline(name=pipeline_name).list_executions()('PipelineExecutionSummaries')
if _exec('PipelineExecutionStatus') == "Succeeded"
)
# get the last successful execution
latest_pipeline_arn = pipeline_executions(0)('PipelineExecutionArn')
print(latest_pipeline_arn)
>>> arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/x62pbar3gs6h
# list all steps of your sample pipeline
execution_steps = sm_client.list_pipeline_execution_steps(
PipelineExecutionArn=latest_pipeline_arn
)('PipelineExecutionSteps')
print(execution_steps)
>>>
({'StepName': 'Abalone-Preprocess',
'StartTime': datetime.datetime(2023, 6, 27, 4, 41, 30, 519000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 41, 30, 986000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:processing-job/pipelines-fvsmu7m7ki3q-Abalone-Preprocess-d68CecvHLU'}},
'SelectiveExecutionResult': {'SourcePipelineExecutionArn': 'arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/ksm2mjwut6oz'}},
{'StepName': 'Abalone-Train',
'StartTime': datetime.datetime(2023, 6, 27, 4, 41, 31, 320000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 43, 58, 224000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'TrainingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:training-job/pipelines-x62pbar3gs6h-Abalone-Train-PKhAc1Q6lx'}}},
{'StepName': 'Abalone-Evaluate',
'StartTime': datetime.datetime(2023, 6, 27, 4, 43, 59, 40000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 57, 43, 76000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'ProcessingJob': {'Arn': 'arn:aws:sagemaker:us-east-1:123123123123:processing-job/pipelines-x62pbar3gs6h-Abalone-Evaluate-vmkZDKDwhk'}}},
{'StepName': 'Abalone-MSECheck',
'StartTime': datetime.datetime(2023, 6, 27, 4, 57, 43, 821000, tzinfo=tzlocal()),
'EndTime': datetime.datetime(2023, 6, 27, 4, 57, 44, 124000, tzinfo=tzlocal()),
'StepStatus': 'Succeeded',
'AttemptCount': 0,
'Metadata': {'Condition': {'Outcome': 'True'}}})
# list all configureable pipeline parameters
# params can be altered during selective execution
parameters = sm_client.list_pipeline_parameters_for_execution(
PipelineExecutionArn=latest_pipeline_arn
)('PipelineParameters')
print(parameters)
>>>
({'Name': 'XGBNumRounds', 'Value': '120'},
{'Name': 'XGBSubSample', 'Value': '0.9'},
{'Name': 'XGBGamma', 'Value': '2'},
{'Name': 'TrainingInstanceCount', 'Value': '1'},
{'Name': 'XGBMinChildWeight', 'Value': '4'},
{'Name': 'XGBETA', 'Value': '0.25'},
{'Name': 'ApprovalStatus', 'Value': 'PendingManualApproval'},
{'Name': 'ProcessingInstanceCount', 'Value': '1'},
{'Name': 'ProcessingInstanceType', 'Value': 'ml.t3.medium'},
{'Name': 'MseThreshold', 'Value': '6'},
{'Name': 'ModelPath',
'Value': 's3://sagemaker-us-east-1-123123123123/Abalone/models/'},
{'Name': 'XGBMaxDepth', 'Value': '12'},
{'Name': 'TrainingInstanceType', 'Value': 'ml.c5.xlarge'},
{'Name': 'InputData',
'Value': 's3://sagemaker-us-east-1-123123123123/sample-dataset/abalone/abalone.csv'})
Случаи использования
В этом разделе мы представляем несколько сценариев, в которых выборочное выполнение потенциально может сэкономить время и ресурсы. Мы используем типичный поток конвейера, который включает в себя такие этапы, как извлечение данных, обучение, оценка, регистрация и развертывание модели, в качестве эталона для демонстрации преимуществ выборочного выполнения.
SageMaker Pipelines позволяет вам определять параметры среды выполнения для вашего конвейера, используя параметры конвейера. Когда запускается новый запуск, он обычно запускает весь конвейер от начала до конца. Однако, если кэширование шагов включено, SageMaker Pipelines попытается найти предыдущий запуск текущего шага конвейера с теми же значениями атрибутов. Если совпадение найдено, SageMaker Pipelines будет использовать выходные данные предыдущего запуска вместо повторного вычисления шага. Обратите внимание, что даже при включенном пошаговом кэшировании SageMaker Pipelines по умолчанию будет запускать весь рабочий процесс до конца.
С выпуском функции выборочного выполнения теперь вы можете повторно запустить весь рабочий процесс конвейера или выборочно запустить подмножество шагов, используя ARN предыдущего конвейера. Это можно сделать даже без включенного пошагового кэширования. Следующие варианты использования иллюстрируют различные способы использования выборочного выполнения.
Вариант использования 1: выполнение одного шага
Специалисты по данным часто сосредотачиваются на этапе обучения конвейера MLOps и не хотят беспокоиться об этапах предварительной обработки или развертывания. Выборочное выполнение позволяет специалистам по данным сосредоточиться только на этапе обучения и изменять параметры обучения или гиперпараметры на лету для улучшения модели. Это может сэкономить время и снизить затраты, поскольку вычислительные ресурсы используются только для выполнения выбранных пользователем этапов конвейера. См. следующий код:
# select a reference pipeline arn and subset step to execute
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
selected_steps=("Abalone-Train")
)
# start execution of pipeline subset
select_execution = pipeline.start(
selective_execution_config=selective_execution_config,
parameters={
"XGBNumRounds": 120,
"XGBSubSample": 0.9,
"XGBGamma": 2,
"XGBMinChildWeight": 4,
"XGBETA": 0.25,
"XGBMaxDepth": 12
}
)
На следующих рисунках показан конвейер с одним этапом в процессе, а затем завершенным.
Вариант использования 2. Запустите несколько последовательных шагов конвейера.
Продолжая предыдущий вариант использования, специалист по данным хочет обучить новую модель и оценить ее производительность по сравнению с золотым набором тестовых данных. Эта оценка имеет решающее значение для обеспечения того, чтобы модель соответствовала строгим рекомендациям по пользовательскому приемочному тестированию (UAT) или производственному развертыванию. Однако специалист по данным не хочет запускать весь рабочий процесс конвейера или развертывать модель. Они могут использовать Selective Execution, чтобы сосредоточиться исключительно на этапах обучения и оценки, экономя время и ресурсы и получая при этом необходимые результаты проверки:
# select a reference pipeline arn and subset step to execute
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
selected_steps=("Abalone-Train", "Abalone-Evaluate")
)
# start execution of pipeline subset
select_execution = pipeline.start(
selective_execution_config=selective_execution_config,
parameters={
"ProcessingInstanceType": "ml.t3.medium",
"XGBNumRounds": 120,
"XGBSubSample": 0.9,
"XGBGamma": 2,
"XGBMinChildWeight": 4,
"XGBETA": 0.25,
"XGBMaxDepth": 12
}
)
Вариант использования 3. Обновление и повторный запуск неудачных шагов конвейера
Вы можете использовать выборочное выполнение для повторного запуска неудачных шагов в конвейере или возобновления выполнения конвейера с неудачного шага и далее. Это может быть полезно для устранения неполадок и отладки неудачных шагов, поскольку позволяет разработчикам сосредоточиться на конкретных проблемах, которые необходимо решить. Это может привести к более эффективному решению проблем и сокращению времени итерации. В следующем примере показано, как можно выбрать повторный запуск только неудачного шага конвейера.
# select a previously failed pipeline arn
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/fvsmu7m7ki3q",
selected_steps=("Abalone-Evaluate")
)
# start execution of failed pipeline subset
select_execution = pipeline.start(
selective_execution_config=selective_execution_config
)
В качестве альтернативы специалист по обработке и анализу данных может возобновить конвейер с неудачного шага до конца рабочего процесса, указав неудачный шаг и все шаги, которые следуют за ним, в SelectiveExecutionConfig
.
Вариант использования 4. Покрытие конвейера
В некоторых пайплайнах одни ветви выполняются реже, чем другие. Например, может быть ветвь, которая запускается только при нарушении определенного условия. Важно тщательно протестировать эти ветки, чтобы убедиться, что они работают должным образом, когда происходит сбой. Тестируя эти менее часто запускаемые ветки, разработчики могут убедиться, что их конвейер надежен и что механизмы обработки ошибок эффективно поддерживают желаемый рабочий процесс и дают надежные результаты.
selective_execution_config = SelectiveExecutionConfig(
source_pipeline_execution_arn="arn:aws:sagemaker:us-east-1:123123123123:pipeline/AbalonePipeline/execution/9e3ljoql7s0n",
selected_steps=("Abalone-Train", "Abalone-Evaluate", "Abalone-MSECheck", "Abalone-FailNotify")
)
Заключение
В этом посте мы обсудили функцию выборочного выполнения SageMaker Pipelines, которая позволяет вам выборочно выполнять определенные шаги ваших рабочих процессов машинного обучения. Эта возможность приводит к значительной экономии времени и вычислительных ресурсов. Мы предоставили пример кода в репозиторий GitHub который демонстрирует, как использовать выборочное выполнение, и представляет различные сценарии, в которых это может быть выгодно для пользователей. Если вы хотите узнать больше о выборочном выполнении, обратитесь к нашему Руководству разработчика и Справочному руководству по API.
Чтобы более подробно изучить доступные шаги рабочего процесса SageMaker Pipelines, см. Конвейер построения моделей Amazon SageMaker и рабочие процессы SageMaker. Кроме того, вы можете найти дополнительные примеры, демонстрирующие различные варианты использования и подходы к реализации с использованием SageMaker Pipelines, в разделе Примеры AWS SageMaker Репозиторий GitHub. Эти ресурсы могут еще больше углубить ваше понимание и помочь вам использовать весь потенциал SageMaker Pipelines и Selective Execution в ваших текущих и будущих проектах машинного обучения.
Об авторах
Пранав Мурти является специалистом по архитектуре решений AI/ML в AWS. Он помогает клиентам создавать, обучать, развертывать и переносить рабочие нагрузки машинного обучения (ML) в SageMaker. Ранее он работал в полупроводниковой промышленности, разрабатывая большие модели компьютерного зрения (CV) и обработки естественного языка (NLP) для улучшения полупроводниковых процессов. В свободное время любит играть в шахматы и путешествовать.
Ахил Нумарсу — старший технический менеджер по продуктам, который помогает командам ускорить получение результатов машинного обучения с помощью эффективных инструментов и сервисов в облаке. Он любит играть в настольный теннис и является фанатом спорта.
Нишант Кришнамурти является старшим инженером-разработчиком программного обеспечения в Amazon Stores. Он имеет степень магистра компьютерных наук и в настоящее время занимается ускорением внедрения машинного обучения в различных организациях Amazon путем создания и внедрения решений машинного обучения на SageMaker.