Зменште вартість і час розробки за допомогою Amazon SageMaker Pipelines локального режиму PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Зменште вартість і час розробки за допомогою локального режиму Amazon SageMaker Pipelines

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

Огляд життєвого циклу машинного навчання

Одним із основних рушійних факторів нових інновацій і додатків у ML є доступність і обсяг даних разом із дешевшими варіантами обчислень. У кількох областях ML довів здатність вирішувати проблеми, які раніше не вирішувались за допомогою класичних великих даних і аналітичних методів, і попит на науку про дані та практиків ML постійно зростає. Починаючи з дуже високого рівня, життєвий цикл ML складається з багатьох різних частин, але створення моделі ML зазвичай складається з таких загальних кроків:

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

На етапі підготовки даних дані завантажуються, обробляються та перетворюються на тип вхідних даних або функцій, які очікує модель ML. Написання сценаріїв для перетворення даних зазвичай є ітеративним процесом, де швидкі цикли зворотного зв’язку важливі для прискорення розробки. Зазвичай немає необхідності використовувати повний набір даних під час тестування сценаріїв розробки функцій, тому ви можете використовувати функція локального режиму компанії SageMaker Processing. Це дозволяє запускати локально та оновлювати код ітераційно, використовуючи менший набір даних. Коли остаточний код готовий, він надсилається на віддалену обробку, яка використовує повний набір даних і виконується на екземплярах, керованих SageMaker.

Процес розробки подібний до етапу підготовки даних як для навчання моделі, так і для етапів оцінки моделі. Науковці даних використовують функція локального режиму Навчання SageMaker для швидкої ітерації з меншими наборами даних локально, перш ніж використовувати всі дані в керованому SageMaker кластері оптимізованих для ML примірників. Це прискорює процес розробки та усуває витрати на запуск екземплярів ML, якими керує SageMaker під час експериментів.

У міру розвитку зрілості ML організації ви можете використовувати Трубопроводи Amazon SageMaker щоб створити конвеєри ML, які з’єднують ці кроки, створюючи складніші робочі процеси ML, які обробляють, навчають і оцінюють моделі ML. SageMaker Pipelines — це повністю керована служба для автоматизації різних етапів робочого процесу машинного навчання, включаючи завантаження даних, перетворення даних, навчання та налаштування моделі, а також розгортання моделі. Донедавна ви могли розробляти та тестувати свої сценарії локально, але доводилося тестувати конвеєри машинного навчання в хмарі. Це зробило ітерацію потоку та форми конвеєрів ML повільним і дорогим процесом. Тепер, з доданою функцією локального режиму SageMaker Pipelines, ви можете повторювати та тестувати свої конвеєри машинного навчання подібно до того, як ви тестуєте та повторюєте свої сценарії обробки та навчання. Ви можете запускати та тестувати свої конвеєри на локальній машині, використовуючи невелику підмножину даних для перевірки синтаксису та функцій конвеєра.

Трубопроводи SageMaker

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

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

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

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

  • Обробка етапів роботи – Спрощений, керований досвід у SageMaker для запуску робочих навантажень обробки даних, таких як розробка функцій, перевірка даних, оцінка моделі та інтерпретація моделі
  • Навчальна робота кроки – Ітеративний процес, який навчає модель робити прогнози, представляючи приклади з навчального набору даних
  • Роботи з налаштування гіперпараметрів – Автоматичний спосіб оцінки та вибору гіперпараметрів, які створюють найточнішу модель
  • Умовні кроки бігу – Крок, який забезпечує умовний хід розгалужень у конвеєрі
  • Модельний крок – Використовуючи аргументи CreateModel, цей крок може створити модель для використання на етапах перетворення або подальшого розгортання як кінцевої точки
  • Перетворення етапів роботи – Завдання пакетного перетворення, яке генерує прогнози з великих наборів даних і виконує висновок, коли постійна кінцева точка не потрібна
  • Невдалі кроки – Крок, який зупиняє запуск конвеєра та позначає запуск як невдалий

Огляд рішення

Наше рішення демонструє важливі кроки для створення та запуску конвеєрів SageMaker у локальному режимі, що означає використання локального процесора, оперативної пам’яті та дискових ресурсів для завантаження та виконання етапів робочого процесу. Ваше локальне середовище може працювати на ноутбуці з використанням популярних IDE, таких як VSCode або PyCharm, або воно може бути розміщено в SageMaker за допомогою класичних екземплярів ноутбука.

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

Для цього зразка блокнота ми використовуємо стандартний загальнодоступний набір даних, the Набір даних UCI Machine Learning Abalone. Мета полягає в тому, щоб навчити модель ML визначати вік морського равлика за його фізичними вимірюваннями. По суті, це проблема регресії.

Увесь код, необхідний для запуску цього зразка блокнота, доступний на GitHub у amazon-sagemaker-приклади сховище. У цьому прикладі блокнота кожен крок робочого циклу конвеєра створюється незалежно, а потім з’єднується разом для створення конвеєра. Створюємо наступні кроки:

  • Етап обробки (розробка функцій)
  • Етап навчання (модельне навчання)
  • Етап обробки (оцінка моделі)
  • Крок умови (точність моделі)
  • Створити крок моделі (модель)
  • Крок перетворення (пакетне перетворення)
  • Зареєструвати крок моделі (пакет моделі)
  • Невдалий крок (не вдалося запустити)

Наступна діаграма ілюструє наш конвеєр.

Зменште вартість і час розробки за допомогою Amazon SageMaker Pipelines локального режиму PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Передумови

Щоб слідувати цій публікації, вам потрібно:

Після того, як ці передумови створено, ви можете запустити зразок блокнота, як описано в наступних розділах.

Побудуйте свій трубопровід

У цьому зразку зошита ми використовуємо Режим сценарію SageMaker для більшості процесів ML, що означає, що ми надаємо фактичний код (сценарії) 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,
)

Далі ми створюємо наш перший фактичний крок конвеєра, a ProcessingStep об’єкт, імпортований із SDK SageMaker. Аргументи процесора повертаються з виклику до SKLearnProcessor метод run(). Цей крок робочого циклу поєднується з іншими кроками в кінці блокнота, щоб вказати порядок роботи в конвеєрі.

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)

Далі ми надаємо код для створення кроку навчання, спочатку створюючи стандартний оцінювач за допомогою SDK SageMaker. Проходимо так само 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 клас із бібліотеки SDK SageMaker:

from sagemaker.workflow.steps import TrainingStep

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

Далі ми створюємо інший етап обробки для виконання оцінки моделі. Це робиться шляхом створення a 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,
)

Щоб увімкнути розгортання навченої моделі, або до a Кінцева точка реального часу SageMaker або для пакетного перетворення, нам потрібно створити a 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)
)

Далі ми створюємо етап пакетного перетворення, де надсилаємо набір векторів ознак і виконуємо висновок. Спочатку нам потрібно створити a Transformer об'єкт і передати local_pipeline_session параметр до нього. Потім ми створюємо a 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)

Нарешті, ми хочемо додати умову розгалуження до робочого процесу, щоб ми запускали пакетне перетворення, лише якщо результати оцінювання моделі відповідають нашим критеріям. Ми можемо вказати цю умову, додавши a ConditionStep з певним типом стану, наприклад ConditionLessThanOrEqualTo. Потім ми перераховуємо кроки для двох гілок, по суті визначаючи гілки if/else або true/false конвеєру. If_steps, надані в ConditionStep (step_create_model, step_transform) запускаються щоразу, коли умова оцінюється як 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. Вертикальний пошук. Ai.

Тепер, коли ми визначили всі кроки та створили екземпляри основного класу, ми можемо об’єднати їх у конвеєр. Ми надаємо деякі параметри та, головне, визначаємо порядок роботи, просто перераховуючи кроки в потрібному порядку. Зверніть увагу, що 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(), який запускає конвеєр. Ви можете використовувати різні інші методи для опитування про стан виконання, створення списку кроків конвеєра тощо. Оскільки ми використовували конвеєрний сеанс локального режиму, усі ці дії виконуються локально на вашому процесорі. Вивід клітинки під методом 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 спеціалісти ML тепер можуть застосовувати той самий метод під час ітерації своїх конвеєрів ML, з’єднуючи різні робочі процеси ML разом. Коли конвеєр готовий до виробництва, для його запуску з керованими ресурсами SageMaker потрібно лише кілька рядків змін коду. Це зменшує час роботи конвеєра під час розробки, що призводить до швидшої розробки конвеєра з швидшими циклами розробки, одночасно зменшуючи вартість керованих ресурсів SageMaker.

Щоб дізнатися більше, відвідайте Трубопроводи Amazon SageMaker or Використовуйте конвеєри SageMaker для локального виконання завдань.


Про авторів

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

Зменште вартість і час розробки за допомогою Amazon SageMaker Pipelines локального режиму PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Ніклас Палм є архітектором рішень у AWS у Стокгольмі, Швеція, де він допомагає клієнтам із скандинавських країн досягати успіху в хмарі. Він особливо захоплюється безсерверними технологіями, а також Інтернетом речей і машинним навчанням. Поза роботою Ніклас є завзятим лижником і сноубордистом, а також майстерним варінням яєць.

Зменште вартість і час розробки за допомогою Amazon SageMaker Pipelines локального режиму PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Кіріт Тадака є архітектором рішень ML, який працює в команді SageMaker Service SA. До того, як приєднатися до AWS, Кіріт працював у стартапах зі штучним інтелектом на ранніх стадіях, а потім деякий час консультував на різних посадах у дослідженнях штучного інтелекту, MLOps і технічному керівництві.

Часова мітка:

Більше від AWS Машинне навчання