Организуйте свое путешествие по машинному обучению с помощью Amazon SageMaker Experiments и Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Организуйте процесс машинного обучения с помощью Amazon SageMaker Experiments и Amazon SageMaker Pipelines.

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

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

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

Почему важно, чтобы ваши эксперименты были организованы?

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

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

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

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

Преимущества экспериментов с SageMaker

SageMaker Experiments позволяет специалистам по данным организовывать, отслеживать, сравнивать и оценивать свои обучающие итерации.

Давайте начнем сначала с обзора того, что вы можете делать с экспериментами:

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

Чтобы узнать больше об API и SDK Experiments, мы рекомендуем следующую документацию: СоздатьЭксперимент и Amazon SageMaker экспериментирует с Python SDK.

Если вы хотите погрузиться глубже, мы рекомендуем изучить amazon-sagemaker-examples/sagemaker-experiments репозиторий GitHub для дальнейших примеров.

Интеграция конвейеров и экспериментов

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

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

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

Код конвейеров SageMaker

Вы можете просмотреть и скачать блокнот с Репозиторий GitHub связанные с этим постом. Мы смотрим на специфичный для Pipelines код, чтобы лучше понять его.

Pipelines позволяет передавать параметры во время выполнения. Здесь мы определяем типы и количество экземпляров обработки и обучения во время выполнения с предустановленными значениями по умолчанию:

base_job_prefix = "pipeline-experiment-sample"
model_package_group_name = "pipeline-experiment-model-package"

processing_instance_count = ParameterInteger(
  name="ProcessingInstanceCount", default_value=1
)

training_instance_count = ParameterInteger(
  name="TrainingInstanceCount", default_value=1
)

processing_instance_type = ParameterString(
  name="ProcessingInstanceType", default_value="ml.m5.xlarge"
)
training_instance_type = ParameterString(
  name="TrainingInstanceType", default_value="ml.m5.xlarge"
)

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

Конвейеры позволяют нам управлять версиями данных программным способом, используя переменные, специфичные для выполнения, такие как ExecutionVariables.PIPELINE_EXECUTION_ID, который является уникальным идентификатором запуска конвейера. Мы можем, например, создать уникальный ключ для хранения выходных наборов данных в Простой сервис хранения Amazon (Amazon S3), который привязывает их к конкретному запуску конвейера. Полный список переменных см. Переменные выполнения.

framework_version = "0.23-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=processing_instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-ca-housing",
    role=role,
)

process_step = ProcessingStep(
    name="ca-housing-preprocessing",
    processor=sklearn_processor,
    outputs=[
        ProcessingOutput(
            output_name="train",
            source="/opt/ml/processing/train",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "train",
                ],
            ),
        ),
        ProcessingOutput(
            output_name="validation",
            source="/opt/ml/processing/validation",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "validation",
                ],
            )
        ),
        ProcessingOutput(
            output_name="test",
            source="/opt/ml/processing/test",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "test",
                ],
            )
        ),
    ],
    code="california-housing-preprocessing.py",
)

Затем мы переходим к созданию объекта оценки для обучения модели XGBoost. Мы устанавливаем некоторые статические гиперпараметры, которые обычно используются с XGBoost:

model_path = f"s3://{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"

image_uri = sagemaker.image_uris.retrieve(
    framework="xgboost",
    region=region,
    version="1.2-2",
    py_version="py3",
    instance_type=training_instance_type,
)

xgb_train = Estimator(
    image_uri=image_uri,
    instance_type=training_instance_type,
    instance_count=training_instance_count,
    output_path=model_path,
    base_job_name=f"{base_job_prefix}/ca-housing-train",
    sagemaker_session=sagemaker_session,
    role=role,
)

xgb_train.set_hyperparameters(
    eval_metric="rmse",
    objective="reg:squarederror",  # Define the object metric for the training job
    num_round=50,
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.7
)

Мы выполняем настройку гиперпараметров моделей, которые мы создаем, используя ContinuousParameter диапазон для lambda. Выбор одной метрики в качестве целевой метрики сообщает средству настройки (экземпляру, который запускает задания по настройке гиперпараметров), что вы будете оценивать задание обучения на основе этой конкретной метрики. Настройщик возвращает наилучшую комбинацию на основе наилучшего значения этой целевой метрики, то есть наилучшую комбинацию, которая минимизирует наилучшую среднеквадратичную ошибку (RMSE).

objective_metric_name = "validation:rmse"

hyperparameter_ranges = {
    "lambda": ContinuousParameter(0.01, 10, scaling_type="Logarithmic")
}

tuner = HyperparameterTuner(estimator,
                            objective_metric_name,
                            hyperparameter_ranges,
                            objective_type=objective_type,
                            strategy="Bayesian",
                            max_jobs=10,
                            max_parallel_jobs=3)

tune_step = TuningStep(
    name="HPTuning",
    tuner=tuner_log,
    inputs={
        "train": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "train"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
        "validation": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "validation"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
    } 
)

На этапе настройки выполняется несколько испытаний с целью определения наилучшей модели среди протестированных диапазонов параметров. Методом get_top_model_s3_uri, мы ранжируем 50 самых эффективных версий URI S3 артефакта модели и извлекаем только самую эффективную версию (мы указываем k=0 к лучшему) для создания модели SageMaker.

model_bucket_key = f"{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"
model_candidate = Model(
    image_uri=image_uri,
    model_data=tune_step.get_top_model_s3_uri(top_k=0, s3_bucket=model_bucket_key),
    sagemaker_session=sagemaker_session,
    role=role,
    predictor_cls=XGBoostPredictor,
)

create_model_step = CreateModelStep(
    name="CreateTopModel",
    model=model_candidate,
    inputs=sagemaker.inputs.CreateModelInput(instance_type="ml.m4.large"),
)

Когда конвейер запускается, он создает пробные компоненты для каждого задания настройки гиперпараметров и каждого задания SageMaker, созданного шагами конвейера.

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

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

#Pipeline experiment config
ca_housing_experiment_config = PipelineExperimentConfig(
    experiment_name,
    Join(
        on="-",
        values=[
            "pipeline-execution",
            ExecutionVariables.PIPELINE_EXECUTION_ID
        ],
    )
)

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

pipeline_name = f"CAHousingExperimentsPipeline"

pipeline = Pipeline(
    name=pipeline_name,
    pipeline_experiment_config=ca_housing_experiment_config,
    parameters=[
        processing_instance_count,
        processing_instance_type,
        training_instance_count,
        training_instance_type
    ],
    steps=[process_step,tune_step,create_model_step],
)

Теперь полноценный конвейер создан и готов к работе. Добавляем исполнительную роль в пайплайн и запускаем его. Отсюда мы можем перейти к консоли SageMaker Studio Pipelines и визуально отслеживать каждый шаг. Вы также можете получить доступ к связанным журналам из консоли для отладки конвейера.

pipeline.upsert(role_arn=sagemaker.get_execution_role())
execution = pipeline.start()

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

# SM Pipeline injects the Execution ID into trial component names
execution_id = execution.describe()['PipelineExecutionArn'].split('/')[-1]
source_arn_filter = Filter(
    name="TrialComponentName", operator=Operator.CONTAINS, value=execution_id
)

source_type_filter = Filter(
    name="Source.SourceType", operator=Operator.EQUALS, value="SageMakerTrainingJob"
)

search_expression = SearchExpression(
    filters=[source_arn_filter, source_type_filter]
)

trial_component_analytics = ExperimentAnalytics(
    sagemaker_session=sagemaker_session,
    experiment_name=experiment_name,
    search_expression=search_expression.to_boto()
)

analytic_table = trial_component_analytics.dataframe()
analytic_table.head()

Сравните показатели для каждого пробного компонента

Вы можете отобразить результаты настройки гиперпараметров в Studio или с помощью других библиотек построения графиков Python. Мы показываем оба способа сделать это.

Изучите показатели обучения и оценки в Studio

Studio предоставляет интерактивный пользовательский интерфейс, в котором вы можете создавать интерактивные графики. Шаги следующие:

  1. Выберите Эксперименты и испытания из Ресурсы SageMaker значок на левой боковой панели.
  2. Выберите свой эксперимент, чтобы открыть его.
  3. Выберите (щелкните правой кнопкой мыши) интересующую вас пробную версию.
  4. Выберите Открыть список пробных компонентов.
  5. Нажмите Shift для выбора пробных компонентов, представляющих обучающие задания.
  6. Выберите Добавить диаграмму.
  7. Выберите Новая диаграмма и настройте его для построения собранных показателей, которые вы хотите анализировать. Для нашего случая использования выберите следующее:
    1. Что касается Тип данныхВыбрать Сводные статистические данные.
    2. Что касается Тип диаграммыВыбрать Точечная диаграмма.
    3. Что касается Ось X, выберите lambda.
    4. Что касается Ось Y, выберите validation:rmse_last.

Новая диаграмма появится в нижней части окна с пометкой «8».

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

Организуйте свое путешествие по машинному обучению с помощью Amazon SageMaker Experiments и Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Аналитика с экспериментами SageMaker

Когда запуск конвейера завершен, мы можем быстро визуализировать сравнение различных вариантов модели с точки зрения метрик, собранных во время обучения. Ранее мы экспортировали все пробные метрики в Панды DataFrame через ExperimentAnalytics. Мы можем воспроизвести сюжет, полученный в Studio, с помощью библиотеки Matplotlib.

analytic_table.plot.scatter("lambda", "validation:rmse - Last", grid=True)

Заключение

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

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

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

В качестве следующего шага вы можете использовать эти три функции SageMaker — Studio, Experiments и Pipelines — для своего следующего проекта машинного обучения.

Предлагаемые чтения


Об авторах

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

Организуйте свое путешествие по машинному обучению с помощью Amazon SageMaker Experiments и Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Марио Бургуэн является старшим архитектором партнерских решений для AWS, специалистом по искусственному интеллекту и машинному обучению и глобальным техническим руководителем MLOps. Он работает с корпоративными клиентами и партнерами, развертывающими решения ИИ в облаке. У него более 30 лет опыта работы с машинным обучением и искусственным интеллектом в стартапах и на предприятиях, начиная с создания одной из первых коммерческих систем машинного обучения для больших данных. Марио проводит свободное время, играя со своими тремя бельгийскими тервюренами, готовя ужин для своей семьи и изучая математику и космологию.

Организуйте свое путешествие по машинному обучению с помощью Amazon SageMaker Experiments и Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Ганапати Кришнамурти является старшим архитектором решений машинного обучения в AWS. Ганапати предоставляет рекомендации начинающим и корпоративным клиентам, помогая им разрабатывать и развертывать облачные приложения в масштабе. Он специализируется на машинном обучении и помогает клиентам использовать AI/ML для достижения результатов в бизнесе. Когда он не на работе, ему нравится гулять на свежем воздухе и слушать музыку.

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

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

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