Запускайте ансамблевые модели машинного обучения в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Запуск моделей ансамблевого машинного обучения в Amazon SageMaker

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

Создатель мудреца Амазонки поддерживает ансамбли из одного экземпляра с Сервер вывода Triton. Эта возможность позволяет запускать ансамбли моделей, которые подходят для одного экземпляра. За кулисами SageMaker использует Triton Inference Server для управления ансамблем на каждом экземпляре за конечной точкой, чтобы максимизировать пропускную способность и использование оборудования со сверхнизкой (единичные миллисекунды) задержкой вывода. С Triton вы также можете выбирать из широкого спектра поддерживаемых платформ машинного обучения (включая TensorFlow, PyTorch, ONNX, XGBoost и NVIDIA TensorRT) и серверных частей инфраструктуры, включая графические процессоры, процессоры и Вывод AWS.

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

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

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

Рабочие нагрузки должны учитывать возможности, которые Triton предоставляет для обеспечения обслуживания своих моделей. Triton «из коробки» поддерживает ряд популярных платформ, включая TensorFlow, PyTorch, ONNX, XGBoost и NVIDIA TensorRT. Triton также поддерживает различные серверные части. которые необходимы для правильной работы алгоритмов. Вы должны убедиться, что ваши модели поддерживаются этими бэкэндами, а в случае, если бэкэнд не поддерживает, Triton позволит вам реализовать свои собственные и интегрировать их. Вам также следует убедиться, что ваша версия алгоритма поддерживается, а также убедиться, что артефакты модели приемлемы для соответствующего бэкэнда. Чтобы проверить, поддерживается ли ваш конкретный алгоритм, см. Серверная часть сервера вывода Triton список встроенных бэкэндов, поддерживаемых NVIDIA.

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

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

Создание ансамблей моделей Тритона

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

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

Репозиторий моделей NVIDIA Triton

NVIDIA ДАЛИ

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

NVIDIA Дали

Следующий код показывает конфигурацию модели для серверной части 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={}.

Это отличается от использования 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, Попробуйте!


Об авторах

Запускайте ансамблевые модели машинного обучения в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Джеймс Парк — архитектор решений в Amazon Web Services. Он работает с Amazon.com над проектированием, созданием и развертыванием технологических решений на AWS, а также проявляет особый интерес к искусственному интеллекту и машинному обучению. В свободное время он любит исследовать новые культуры, получать новый опыт и оставаться в курсе последних технологических тенденций.

Запускайте ансамблевые модели машинного обучения в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Викрам Эланго — старший специалист по архитектуре решений искусственного интеллекта и машинного обучения в компании Amazon Web Services, расположенной в Вирджинии, США. Vikram помогает клиентам финансовой и страховой отрасли с помощью дизайна и идей создавать и развертывать приложения машинного обучения в большом масштабе. В настоящее время он занимается обработкой естественного языка, ответственным искусственным интеллектом, оптимизацией вывода и масштабированием машинного обучения на предприятии. В свободное время он любит путешествовать, ходить в походы, готовить и ходить в походы со своей семьей.

Запускайте ансамблевые модели машинного обучения в Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Саураб Триканде является старшим менеджером по продуктам Amazon SageMaker Inference. Он увлечен работой с клиентами и мотивирован целью демократизации машинного обучения. Он фокусируется на основных проблемах, связанных с развертыванием сложных приложений машинного обучения, мультитенантных моделей машинного обучения, оптимизацией затрат и обеспечением более доступного развертывания моделей глубокого обучения. В свободное время Саураб любит ходить в походы, узнавать об инновационных технологиях, следить за TechCrunch и проводить время со своей семьей.

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

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