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

Запустіть ансамблеві моделі ML на Amazon SageMaker

Розгортання моделі в машинному навчанні (ML) стає дедалі складнішим. Ви хочете розгорнути не лише одну модель ML, а великі групи моделей ML, представлених у вигляді ансамблю робочих процесів. Ці робочі процеси складаються з кількох моделей ML. Виробництво цих моделей ML є складним, оскільки вам потрібно дотримуватися різних вимог щодо продуктивності та затримки.

Amazon SageMaker підтримує одноразові ансамблі з Сервер висновків Triton. Ця можливість дозволяє запускати ансамблі моделей, які підходять для одного екземпляра. За лаштунками SageMaker використовує Triton Inference Server для керування ансамблем у кожному екземплярі за кінцевою точкою, щоб максимізувати пропускну здатність і використання апаратного забезпечення з наднизькою (однозначною мілісекундою) затримкою висновку. За допомогою Triton ви також можете вибирати з широкого спектру підтримуваних фреймворків ML (зокрема TensorFlow, PyTorch, ONNX, XGBoost і NVIDIA TensorRT) та інфраструктурних серверних модулів, зокрема GPU, CPU та AWS Inferentia.

Завдяки цій можливості SageMaker ви можете оптимізувати свої робочі навантаження, уникаючи дорогої затримки мережі та скориставшись перевагами локальності обчислень і даних для конвеєрів ансамблевого висновку. У цій публікації ми обговорюємо переваги використання Triton Inference Server, а також розглядаємо, чи це правильний варіант для вашого робочого навантаження.

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

Triton Inference Server розроблений, щоб дозволити командам розгортати, запускати та масштабувати навчені моделі штучного інтелекту з будь-якого фреймворку на будь-якій інфраструктурі на основі GPU або CPU. Крім того, його було оптимізовано, щоб запропонувати високопродуктивні висновки в масштабі з такими функціями, як динамічне пакетування, одночасні прогони, оптимальна конфігурація моделі, можливості модельного ансамблю та підтримка потокових вхідних даних.

Робочі навантаження повинні враховувати можливості, які Triton надає, щоб гарантувати, що їхні моделі можуть обслуговуватися. Triton підтримує низку популярних фреймворків із коробки, включаючи TensorFlow, PyTorch, ONNX, XGBoost і NVIDIA TensorRT. Triton також підтримує різні бекенди які потрібні для належної роботи алгоритмів. Ви повинні переконатися, що ваші моделі підтримуються цими бекендами, а якщо бекенд не підтримує, Triton дозволить вам реалізувати власну та інтегрувати її. Вам також слід переконатися, що версія вашого алгоритму підтримується, а також переконатися, що артефакти моделі прийнятні для відповідного серверного модуля. Щоб перевірити, чи підтримується ваш певний алгоритм, див Сервер Triton Inference Backend для списку вбудованих серверних модулів, які підтримується NVIDIA.

Можуть бути деякі сценарії, коли ваші моделі чи ансамблі моделей не працюватимуть на Triton, не потребуючи додаткових зусиль, наприклад, якщо для вашого алгоритму не існує вбудованої підтримки. Є деякі інші міркування, які слід взяти до уваги, наприклад, формат корисного навантаження може бути не ідеальним, особливо якщо розмір корисного навантаження може бути великим для вашого запиту. Як завжди, ви повинні перевірити свою продуктивність після розгортання цих робочих навантажень, щоб переконатися, що ваші очікування виправдані.

Давайте візьмемо модель нейронної мережі класифікації зображень і подивимося, як ми можемо прискорити наші робочі навантаження. У цьому прикладі ми використовуємо серверну частину NVIDIA DALI для прискорення попередньої обробки в контексті нашого ансамблю.

Створювати модельні ансамблі Тритон

Triton Inference Server спрощує масштабне розгортання моделей ШІ. Triton Inference Server поставляється зі зручним рішенням, яке спрощує створення конвеєрів попередньої та постобробки. Платформа Triton Inference Server надає планувальник ансамблю, який можна використовувати для створення конвеєрних моделей ансамблю, які беруть участь у процесі логічного висновку, забезпечуючи ефективність і оптимізуючи пропускну здатність.

Triton Inference Server обслуговує моделі зі сховищ моделей. Давайте розглянемо макет репозиторію моделі для моделі ансамблю, що містить модель попередньої обробки DALI, початкову модель TensorFlow V3 і конфігурацію ансамблю моделі. Кожен підкаталог містить інформацію про репозиторій для відповідних моделей. The config.pbtxt файл описує конфігурацію моделі для моделей. Кожен каталог повинен мати одну числову підпапку для кожної версії моделі, і він керується певним сервером, який підтримує Triton.

NVIDIA Triton Model Repository

NVIDIA DALI

Для цієї публікації ми використовуємо бібліотеку завантаження даних NVIDIA (DALI) як модель попередньої обробки в нашому ансамблі моделей. NVIDIA DALI — це бібліотека для завантаження та попередньої обробки даних для прискорення програм глибокого навчання. Він надає набір оптимізованих будівельних блоків для завантаження та обробки зображень, відео та аудіоданих. Ви можете використовувати його як портативну заміну для вбудованих завантажувачів даних та ітераторів даних у популярних фреймворках глибокого навчання.

NVIDIA Dali

Наступний код показує конфігурацію моделі для серверної частини DALI:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

Модель Inception V3

У цій публікації ми показуємо, як DALI використовується в модельному ансамблі з Inception V3. Попередньо навчена модель Inception V3 TensorFlow зберігається у форматі GraphDef як один файл під назвою model.graphdef, config.pbtxt містить інформацію про назву моделі, платформу, max_batch_size, а також контракти на вхід і вихід. Ми рекомендуємо встановити max_batch_size конфігурації до розміру партії, меншого ніж початкова модель V3. Файл міток містить мітки класів для 1,000 різних класів. Ми копіюємо мітки моделі початкової класифікації в inception_graphdef каталог у репозиторії моделей. Файл міток містить 1,000 міток класів IMAGEnet набір даних класифікації.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

Ансамбль Тритон

Наступний код показує конфігурацію моделі моделі ансамблю для попередньої обробки DALI та класифікації зображень:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

Створіть кінцеву точку SageMaker

Кінцеві точки SageMaker дозволяють хостинг у режимі реального часу, де потрібен час відгуку в мілісекундах. SageMaker бере на себе недиференційовану важку роботу з керування хостингом моделі та має можливість автоматичного масштабування. Крім того, також надається ряд можливостей, зокрема розміщення кількох варіантів вашої моделі, A/B-тестування ваших моделей, інтеграція з Amazon CloudWatch щоб отримати можливість спостерігати за характеристиками моделі та контролювати дрейф моделі.

Давайте створимо модель SageMaker із завантажених нами артефактів моделі Служба простого зберігання Amazon (Amazon S3).

Далі ми також надаємо додаткову змінну середовища: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME, що вказує назву моделі, яку буде завантажувати Triton. Значення цього ключа має відповідати назві папки в пакеті моделі, завантаженому на Amazon S3. Ця змінна необов’язкова у випадках, коли ви використовуєте одну модель. У випадку групових моделей цей ключ необхідно вказати, щоб Triton запускався в SageMaker.

Крім того, ви можете встановити SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT та SAGEMAKER_TRITON_THREAD_COUNT для оптимізації кількості потоків.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

За допомогою попередньої моделі ми створюємо конфігурацію кінцевої точки, де ми можемо вказати тип і кількість екземплярів, які нам потрібні в кінцевій точці:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

Ми використовуємо цю конфігурацію кінцевої точки для створення нової кінцевої точки SageMaker і чекаємо завершення розгортання. Після успішного розгортання статус змінюється на InService.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

Корисне навантаження висновку

Вхідне зображення корисного навантаження проходить через конвеєр попередньої обробки DALI та використовується в планувальнику ансамблю, наданому Triton Inference Server. Ми створюємо корисне навантаження, яке буде передано до кінцевої точки висновку:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

Висновок ансамблю

Коли у нас працює кінцева точка, ми можемо використовувати зразок зображення для виконання запиту на висновок, використовуючи JSON як формат корисного навантаження. Для формату запиту висновку Triton використовує стандартні протоколи висновку спільноти KFServing.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

З binary+json форматі, ми повинні вказати довжину метаданих запиту в заголовку, щоб дозволити Triton правильно проаналізувати бінарне корисне навантаження. Це робиться за допомогою спеціального заголовка Content-Type application/vnd.sagemaker-triton.binary+json;json-header-size={}.

Це відрізняється від використання an Inference-Header-Content-Length заголовок на автономному сервері Triton, оскільки спеціальні заголовки не дозволені в SageMaker.

Пакет tritonclient надає допоміжні методи для створення корисного навантаження без необхідності знати деталі специфікації. Ми використовуємо наведені нижче методи, щоб перетворити наш запит на висновок у двійковий формат, який забезпечує менші затримки для висновку. Зверніться до GitHub ноутбук для деталей впровадження.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

Висновок

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

Щоб отримати більше зразків ансамблів Triton на SageMaker, зверніться до GitHub репо. Спробуй!


Про авторів

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

Запустіть ансамблеві моделі ML на Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Вікрам Еланго є старшим архітектором рішень спеціаліста зі штучного інтелекту/ML в Amazon Web Services, що базується у Вірджинії, США. Vikram допомагає клієнтам у фінансовій та страховій галузях завдяки дизайну та інтелектуальному лідерству створювати та розгортати програми машинного навчання в масштабі. Зараз він зосереджений на обробці природної мови, відповідальному штучному інтелекті, оптимізації висновків і масштабуванні ML на підприємстві. У вільний час він любить подорожувати, піти в походи, готувати їжу та кемпінг зі своєю сім’єю.

Запустіть ансамблеві моделі ML на Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Саураб Тріканде є старшим менеджером із продуктів Amazon SageMaker Inference. Він захоплений роботою з клієнтами та мотивований метою демократизації машинного навчання. Він зосереджується на основних проблемах, пов’язаних із розгортанням складних програм ML, моделями ML з кількома клієнтами, оптимізацією витрат і забезпеченням більшої доступності розгортання моделей глибокого навчання. У вільний час Саураб любить піші прогулянки, вивчає інноваційні технології, стежить за TechCrunch і проводить час із сім’єю.

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

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