Сократите затраты и время разработки с помощью Amazon SageMaker Pipelines в локальном режиме PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Сократите затраты и время разработки с помощью локального режима Amazon SageMaker Pipelines

Создание надежных и многократно используемых конвейеров машинного обучения (ML) может быть сложным и трудоемким процессом. Разработчики обычно тестируют свои сценарии обработки и обучения локально, но сами конвейеры обычно тестируются в облаке. Создание и запуск полного конвейера во время экспериментов увеличивает жизненный цикл разработки нежелательными накладными расходами и затратами. В этом посте мы подробно расскажем, как вы можете использовать Локальный режим Amazon SageMaker Pipelines для локального запуска конвейеров ML, чтобы сократить как разработку конвейера, так и время выполнения при одновременном снижении затрат. После того, как конвейер будет полностью протестирован локально, вы можете легко повторно запустить его с помощью Создатель мудреца Амазонки управлять ресурсами всего несколькими строками кода.

Обзор жизненного цикла машинного обучения

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

  1. Очистка и подготовка данных (разработка функций)
  2. Обучение и настройка модели
  3. Оценка модели
  4. Развертывание модели (или пакетное преобразование)

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

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

По мере повышения зрелости организации в области машинного обучения вы можете использовать Конвейеры Amazon SageMaker для создания конвейеров машинного обучения, которые объединяют эти шаги, создавая более сложные рабочие процессы машинного обучения, которые обрабатывают, обучают и оценивают модели машинного обучения. SageMaker Pipelines — это полностью управляемая служба для автоматизации различных этапов рабочего процесса машинного обучения, включая загрузку данных, преобразование данных, обучение и настройку модели, а также развертывание модели. До недавнего времени вы могли разрабатывать и тестировать свои скрипты локально, но вам приходилось тестировать конвейеры машинного обучения в облаке. Это сделало повторение потока и формы конвейеров машинного обучения медленным и дорогостоящим процессом. Теперь, благодаря добавленной в SageMaker Pipelines функции локального режима, вы можете повторять и тестировать конвейеры машинного обучения аналогично тому, как вы тестируете и повторяете сценарии обработки и обучения. Вы можете запускать и тестировать конвейеры на локальном компьютере, используя небольшое подмножество данных для проверки синтаксиса и функций конвейера.

Конвейеры SageMaker

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

SageMaker Pipelines привносит в ML методы непрерывной интеграции и непрерывного развертывания (CI/CD), такие как поддержание паритета между средами разработки и производственной средой, контроль версий, тестирование по запросу и сквозная автоматизация, что помогает масштабировать ML на протяжении всей вашей организация. Практики DevOps знают, что некоторые из основных преимуществ использования методов CI/CD включают повышение производительности за счет многократно используемых компонентов и повышение качества за счет автоматизированного тестирования, что приводит к более быстрой окупаемости ваших бизнес-целей. Эти преимущества теперь доступны специалистам по MLOps при использовании SageMaker Pipelines для автоматизации обучения, тестирования и развертывания моделей машинного обучения. В локальном режиме теперь вы можете гораздо быстрее выполнять итерации при разработке сценариев для использования в конвейере. Обратите внимание, что локальные экземпляры конвейера нельзя просматривать или запускать в Studio IDE; однако вскоре будут доступны дополнительные параметры просмотра для локальных конвейеров.

SageMaker SDK обеспечивает общее назначение конфигурация локального режима это позволяет разработчикам запускать и тестировать поддерживаемые процессоры и оценщики в своей локальной среде. Вы можете использовать обучение в локальном режиме с несколькими поддерживаемыми AWS фреймворками (TensorFlow, MXNet, Chainer, PyTorch и Scikit-Learn), а также с изображениями, которые вы предоставляете сами.

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

  • Шаги обработки задания – Упрощенный, управляемый интерфейс SageMaker для запуска рабочих нагрузок обработки данных, таких как разработка функций, проверка данных, оценка модели и интерпретация модели.
  • Этапы работы по обучению – Итеративный процесс, который учит модель делать прогнозы, представляя примеры из обучающего набора данных.
  • Задания по настройке гиперпараметров – Автоматизированный способ оценки и выбора гиперпараметров, обеспечивающих наиболее точную модель.
  • Шаги условного запуска – Шаг, который обеспечивает условный запуск ветвей в конвейере
  • Шаг модели – Используя аргументы CreateModel, на этом этапе можно создать модель для использования на этапах преобразования или последующего развертывания в качестве конечной точки.
  • Преобразование шагов работы – Задание пакетного преобразования, которое генерирует прогнозы на основе больших наборов данных и выполняет вывод, когда постоянная конечная точка не требуется.
  • Неудачные шаги – Шаг, который останавливает запуск конвейера и помечает запуск как неудачный.

Обзор решения

Наше решение демонстрирует основные шаги по созданию и запуску SageMaker Pipelines в локальном режиме, что означает использование локальных ресурсов ЦП, ОЗУ и диска для загрузки и выполнения шагов рабочего процесса. Ваша локальная среда может работать на ноутбуке с использованием популярных IDE, таких как VSCode или PyCharm, или она может размещаться в SageMaker с использованием классических экземпляров ноутбука.

Локальный режим позволяет специалистам по обработке и анализу данных объединять шаги, которые могут включать в себя задания по обработке, обучению и оценке, и запускать весь рабочий процесс локально. Когда вы закончите локальное тестирование, вы можете повторно запустить конвейер в управляемой среде SageMaker, заменив LocalPipelineSession объект с PipelineSession, что обеспечивает согласованность жизненного цикла машинного обучения.

Для этого примера записной книжки мы используем стандартный общедоступный набор данных, Набор данных машинного обучения UCI Abalone. Цель состоит в том, чтобы обучить модель машинного обучения определять возраст морского морского ушка по его физическим измерениям. По сути, это проблема регрессии.

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

  • Этап обработки (разработка функций)
  • Этап обучения (обучение модели)
  • Этап обработки (оценка модели)
  • Шаг условия (точность модели)
  • Шаг создания модели (модель)
  • Шаг преобразования (пакетное преобразование)
  • Шаг регистрации модели (пакет модели)
  • Неудачный шаг (выполнение не удалось)

Следующая диаграмма иллюстрирует наш конвейер.

Сократите затраты и время разработки с помощью Amazon SageMaker Pipelines в локальном режиме PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Предпосылки

Чтобы следовать в этом посте, вам нужно следующее:

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

Создайте свой трубопровод

В этом примере записной книжки мы используем Режим сценария SageMaker для большинства процессов машинного обучения, что означает, что мы предоставляем фактический код Python (скрипты) для выполнения действия и передаем ссылку на этот код. Режим сценария обеспечивает большую гибкость для управления поведением в рамках обработки SageMaker, позволяя вам настраивать свой код, при этом используя преимущества предварительно созданных контейнеров SageMaker, таких как XGBoost или Scikit-Learn. Пользовательский код записывается в файл сценария Python с использованием ячеек, начинающихся с волшебной команды. %%writefile, вроде следующего:

%%writefile code/evaluation.py

Основным активатором локального режима является LocalPipelineSession объект, созданный из Python SDK. В следующих сегментах кода показано, как создать конвейер SageMaker в локальном режиме. Хотя вы можете настроить локальный путь к данным для многих шагов локального конвейера, Amazon S3 является местом по умолчанию для хранения выходных данных преобразования. Новый LocalPipelineSession Объект передается в Python SDK во многих вызовах API рабочего процесса SageMaker, описанных в этом посте. Обратите внимание, что вы можете использовать local_pipeline_session переменная для получения ссылок на корзину S3 по умолчанию и имя текущего региона.

from sagemaker.workflow.pipeline_context import LocalPipelineSession

# Create a `LocalPipelineSession` object so that each 
# pipeline step will run locally
# To run this pipeline in the cloud, you must change 
# the `LocalPipelineSession()` to `PipelineSession()`
local_pipeline_session = LocalPipelineSession()
region = local_pipeline_session.boto_region_name

default_bucket = local_pipeline_session.default_bucket()
prefix = "sagemaker-pipelines-local-mode-example"

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

mse_threshold = ParameterFloat(name="MseThreshold", default_value=7.0)

Чтобы создать шаг обработки данных, который используется здесь для выполнения проектирования признаков, мы используем SKLearnProcessor для загрузки и преобразования набора данных. Мы проходим local_pipeline_session в конструктор класса, который указывает шагу рабочего процесса выполняться в локальном режиме:

from sagemaker.sklearn.processing import SKLearnProcessor

framework_version = "1.0-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-abalone-process",
    role=role,
    sagemaker_session=local_pipeline_session,
)

Затем мы создаем наш первый фактический шаг конвейера, ProcessingStep объект, импортированный из SageMaker SDK. Аргументы процессора возвращаются из вызова SKLearnProcessor метод запуска(). Этот шаг рабочего процесса объединяется с другими шагами ближе к концу записной книжки, чтобы указать порядок операций в конвейере.

from sagemaker.processing import ProcessingInput, ProcessingOutput
from sagemaker.workflow.steps import ProcessingStep

processor_args = sklearn_processor.run(
    inputs=[
        ProcessingInput(source=input_data, destination="/opt/ml/processing/input"),
    ],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train"),
        ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation"),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test"),
    ],
    code="code/preprocessing.py",
)

step_process = ProcessingStep(name="AbaloneProcess", step_args=processor_args)

Затем мы предоставляем код для установки шага обучения, сначала создав экземпляр стандартного оценщика с помощью SageMaker SDK. Мы проходим то же самое local_pipeline_session переменная для оценщика, названная xgb_train, как sagemaker_session аргумент. Поскольку мы хотим обучить модель XGBoost, мы должны сгенерировать действительный URI изображения, указав следующие параметры, включая структуру и несколько параметров версии:

from sagemaker.estimator import Estimator
from sagemaker.inputs import TrainingInput

model_path = f"s3://{default_bucket}/{prefix}/model"
image_uri = sagemaker.image_uris.retrieve(
    framework="xgboost",
    region=region,
    version="1.5-1",
    py_version="py3",
    instance_type=instance_type,
)

xgb_train = Estimator(
    image_uri=image_uri,
    entry_point="code/abalone.py",
    instance_type=instance_type,
    instance_count=training_instance_count,
    output_path=model_path,
    role=role,
    sagemaker_session=local_pipeline_session,
)

При желании мы можем вызвать дополнительные методы оценки, например set_hyperparameters(), чтобы предоставить настройки гиперпараметров для задания обучения. Теперь, когда у нас настроен оценщик, мы готовы создать фактический шаг обучения. Еще раз импортируем TrainingStep класс из библиотеки SageMaker SDK:

from sagemaker.workflow.steps import TrainingStep

step_train = TrainingStep(name="AbaloneTrain", step_args=train_args)

Затем мы создаем еще один шаг обработки для выполнения оценки модели. Это делается путем создания ScriptProcessor экземпляр и прохождение local_pipeline_session объект как параметр:

from sagemaker.processing import ScriptProcessor

script_eval = ScriptProcessor(
    image_uri=image_uri,
    command=["python3"],
    instance_type=instance_type,
    instance_count=processing_instance_count,
    base_job_name="script-abalone-eval",
    role=role,
    sagemaker_session=local_pipeline_session,
)

Чтобы разрешить развертывание обученной модели либо на Конечная точка SageMaker в реальном времени или для пакетного преобразования нам нужно создать Model объект, передав артефакты модели, правильный URI изображения и, возможно, наш пользовательский код вывода. Затем мы передаем это Model возражать против ModelStep, который добавляется в локальный конвейер. См. следующий код:

from sagemaker.model import Model

model = Model(
    image_uri=image_uri,
    model_data=step_train.properties.ModelArtifacts.S3ModelArtifacts,
    source_dir="code",
    entry_point="inference.py",
    role=role,
    sagemaker_session=local_pipeline_session,
)

from sagemaker.workflow.model_step import ModelStep

step_create_model = ModelStep(name="AbaloneCreateModel", 
    step_args=model.create(instance_type=instance_type)
)

Затем мы создаем этап пакетного преобразования, на котором мы отправляем набор векторов признаков и выполняем вывод. Сначала нам нужно создать Transformer объект и передать local_pipeline_session параметр к нему. Затем мы создаем TransformStep, передав необходимые аргументы, и добавьте это в определение конвейера:

from sagemaker.transformer import Transformer

transformer = Transformer(
    model_name=step_create_model.properties.ModelName,
    instance_type=instance_type,
    instance_count=transform_instance_count,
    output_path=f"s3://{default_bucket}/{prefix}/transform",
    sagemaker_session=local_pipeline_session,
)

from sagemaker.workflow.steps import TransformStep

transform_args = transformer.transform(transform_data, content_type="text/csv")

step_transform = TransformStep(name="AbaloneTransform", step_args=transform_args)

Наконец, мы хотим добавить в рабочий процесс условие ветвления, чтобы мы запускали пакетное преобразование только в том случае, если результаты оценки модели соответствуют нашим критериям. Мы можем указать это условие, добавив ConditionStep с определенным типом условия, например ConditionLessThanOrEqualTo. Затем мы перечисляем шаги для двух ветвей, по существу определяя ветви if/else или true/false конвейера. if_steps, предоставленные в ConditionStep (Step_create_model, шаг_трансформация) запускаются всякий раз, когда условие оценивается как True.

from sagemaker.workflow.conditions import ConditionLessThanOrEqualTo
from sagemaker.workflow.condition_step import ConditionStep
from sagemaker.workflow.functions import JsonGet

cond_lte = ConditionLessThanOrEqualTo(
    left=JsonGet(
        step_name=step_eval.name,
        property_file=evaluation_report,
        json_path="regression_metrics.mse.value",),
    right=mse_threshold,
)

step_cond = ConditionStep(
    name="AbaloneMSECond",
    conditions=[cond_lte],
    if_steps=[step_create_model, step_transform],
    else_steps=[step_fail],
)

Следующая диаграмма иллюстрирует эту условную ветвь и связанные с ней шаги if/else. Выполняется только одна ветвь на основе результата шага оценки модели по сравнению с этапом условия.

Сократите затраты и время разработки с помощью Amazon SageMaker Pipelines в локальном режиме PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Теперь, когда у нас определены все наши шаги и созданы экземпляры базового класса, мы можем объединить их в конвейер. Мы предоставляем некоторые параметры и определяем порядок работы, просто перечисляя шаги в нужном порядке. Обратите внимание, что TransformStep здесь не показан, потому что он является целью условного шага и был предоставлен в качестве аргумента шага для ConditionalStep ранее.

from sagemaker.workflow.pipeline import Pipeline

pipeline_name = f"LocalModelPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[
        input_data,
        mse_threshold,
    ],
    steps=[step_process, step_train, step_eval, step_cond],
    sagemaker_session=local_pipeline_session,
)

Для запуска конвейера необходимо вызвать два метода: pipeline.upsert(), который загружает конвейер в базовую службу, и pipeline.start(), который запускает конвейер. Вы можете использовать различные другие методы для опроса состояния выполнения, перечисления шагов конвейера и т. д. Поскольку мы использовали сеанс конвейера в локальном режиме, все эти шаги выполняются локально на вашем процессоре. Выходные данные ячейки под методом запуска показывают выходные данные конвейера:

pipeline.upsert(role_arn=role)
execution = pipeline.start()

Вы должны увидеть сообщение в нижней части вывода ячейки, подобное следующему:

Pipeline execution d8c3e172-089e-4e7a-ad6d-6d76caf987b7 SUCCEEDED

Вернуться к управляемым ресурсам

После того как мы подтвердим, что конвейер работает без ошибок, и нас устраивают поток и форма конвейера, мы можем воссоздать конвейер, но с управляемыми ресурсами SageMaker, и повторно запустить его. Единственное требуемое изменение — использование PipelineSession объект вместо LocalPipelineSession:

от sagemaker.workflow.pipeline_context импортировать LocalPipelineSession
from sagemaker.workflow.pipeline_context import PipelineSession

local_pipeline_session = LocalPipelineSession()
pipeline_session = PipelineSession()

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

from sagemaker.sklearn.processing import SKLearnProcessor

framework_version = "1.0-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-abalone-process",
    role=role,
    sagemaker_session=pipeline_session,  # non-local session
)

После того, как локальный объект сеанса был заменен везде, мы заново создаем конвейер и запускаем его с управляемыми ресурсами SageMaker:

from sagemaker.workflow.pipeline import Pipeline

pipeline_name = f"LocalModelPipeline"
pipeline = Pipeline(
    name=pipeline_name,
    parameters=[
        input_data,
        mse_threshold,
    ],
    steps=[step_process, step_train, step_eval, step_cond],
    sagemaker_session=pipeline_session, # non-local session
)

pipeline.upsert(role_arn=role)
execution = pipeline.start()

Убирать

Если вы хотите поддерживать порядок в среде Studio, вы можете использовать следующие методы для удаления конвейера SageMaker и модели. Полный код можно найти в примере ноутбук.

# delete models 
sm_client = boto3.client("sagemaker")
model_prefix="AbaloneCreateModel"
delete_models(sm_client, model_prefix)

# delete managed pipeline
pipeline_to_delete = 'SM-Managed-Pipeline'
delete_sagemaker_pipeline(sm_client, pipeline_to_delete)

Заключение

До недавнего времени вы могли использовать функцию локального режима SageMaker Processing и SageMaker Training для локального повторения сценариев обработки и обучения, прежде чем запускать их для всех данных с управляемыми ресурсами SageMaker. Благодаря новой функции локального режима в SageMaker Pipelines специалисты по машинному обучению теперь могут применять один и тот же метод при повторении своих конвейеров машинного обучения, объединяя различные рабочие процессы машинного обучения. Когда конвейер готов к работе, для его запуска с помощью управляемых ресурсов SageMaker требуется изменить всего несколько строк кода. Это сокращает время работы конвейера во время разработки, что приводит к более быстрой разработке конвейера с более короткими циклами разработки, а также снижает стоимость управляемых ресурсов SageMaker.

Чтобы узнать больше, посетите Конвейеры Amazon SageMaker or Используйте конвейеры SageMaker для локального выполнения заданий.


Об авторах

Сократите затраты и время разработки с помощью Amazon SageMaker Pipelines в локальном режиме PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Пол Харгис сосредоточил свои усилия на машинном обучении в нескольких компаниях, включая AWS, Amazon и Hortonworks. Ему нравится создавать технологические решения и учить людей, как извлечь из них максимальную пользу. До своей должности в AWS он был ведущим архитектором Amazon Exports and Expansions, помогая amazon.com улучшить качество обслуживания покупателей со всего мира. Полу нравится помогать клиентам расширять свои инициативы в области машинного обучения для решения реальных проблем.

Сократите затраты и время разработки с помощью Amazon SageMaker Pipelines в локальном режиме PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Никлас Палм является архитектором решений в AWS в Стокгольме, Швеция, где он помогает клиентам из Скандинавии добиться успеха в облаке. Он особенно увлечен бессерверными технологиями, а также Интернетом вещей и машинным обучением. Вне работы Никлас заядлый лыжник и сноубордист, а также мастер по приготовлению яиц.

Сократите затраты и время разработки с помощью Amazon SageMaker Pipelines в локальном режиме PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Кирит Тадака является архитектором решений машинного обучения, работающим в команде SageMaker Service SA. До прихода в AWS Кирит работал в стартапах в области ИИ на ранней стадии, а затем некоторое время консультировал на различных должностях в области исследований ИИ, MLOps и технического руководства.

Отметка времени:

Больше от Машинное обучение AWS