Оптимизируйте свои задания на логические выводы с помощью динамического пакетного логического вывода с помощью TorchServe на Amazon SageMaker.

Исходный узел: 1884601

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

Пакетная обработка может быть полезна в нескольких сценариях развертывания модели в рабочей среде. Здесь мы разделим их на два варианта использования:

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

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

Поскольку TorchServe изначально интегрирован с SageMaker через Набор инструментов для вывода SageMaker PyTorchвы можете легко развернуть модель PyTorch на TorchServe с помощью хостинга SageMaker. Также могут возникнуть случаи, когда вам потребуется дополнительно настроить среду с помощью пользовательских образов Docker. В этом посте мы сначала покажем, как развернуть конечную точку в реальном времени с помощью собственного набора инструментов вывода SageMaker PyTorch и настроить размер пакета для оптимизации пропускной способности. Во втором примере мы демонстрируем, как использовать собственный образ Docker для настройки расширенных конфигураций TorchServe, которые недоступны в качестве переменной среды, для оптимизации задания пакетного вывода.

Лучшие практики для пакетного вывода

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

Для приложений реального времени задержка часто является основной проблемой. Существует компромисс между более высокой пропускной способностью и увеличенным размером пакета и задержкой; вам может потребоваться внести необходимые изменения в соответствии с соглашением об уровне обслуживания по задержке. С точки зрения лучших практик в облаке, цена за определенное количество выводов является полезным ориентиром для принятия обоснованного решения, отвечающего потребностям вашего бизнеса. Одним из факторов, способствующих управлению затратами, является выбор правильного ускорителя. Для получения дополнительной информации см. Выберите лучший ускоритель искусственного интеллекта и компиляцию моделей для компьютерного зрения с помощью Amazon SageMaker.

Динамическое пакетирование TorchServe в SageMaker

ФакелСервировать — это собственная библиотека PyTorch для обслуживания моделей в масштабе производства. Это совместная разработка Facebook и AWS. TorchServe позволяет отслеживать, добавлять пользовательские метрики, поддерживать несколько моделей, увеличивать и уменьшать количество работников с помощью API безопасного управления, а также предоставлять конечные точки выводов и объяснений.

Для поддержки пакетной обработки TorchServe предоставляет функцию динамической пакетной обработки. Он объединяет полученные запросы в течение определенного периода времени, объединяет их в пакеты и отправляет пакет на логический вывод. Поступившие запросы обрабатываются через обработчики в ТорчСерве. TorchServe имеет несколько обработчиков по умолчанию, и вы можете создать собственный обработчик, если ваш вариант использования не охвачен. При использовании пользовательского обработчика убедитесь, что в обработчике реализована логика пакетного вывода. Пример пользовательского обработчика с поддержкой пакетного вывода доступен на сайте GitHub.

Вы можете настроить динамическую пакетную обработку, используя две настройки: batch_size и max_batch_delayлибо через переменные среды в SageMaker, либо через config.properties файл в TorchServe (при использовании пользовательского контейнера). TorchServe использует любые настройки, которые идут первыми: максимальный размер пакета (batch_size) или указанное временное окно для ожидания пакета запросов через max_batch_delay.

Благодаря интеграции TorchServe с SageMaker теперь вы можете развертывать модели PyTorch в SageMaker, где вы можете определить модель SageMaker PyTorch. Вы можете добавить пользовательскую логику загрузки, вывода, а также предварительной и постобработки модели в сценарий, передаваемый в качестве точки входа в SageMaker PyTorch (см. следующий пример кода). Альтернативно вы можете использовать собственный контейнер для развертывания своих моделей. Для получения дополнительной информации см. Сервер модели SageMaker PyTorch.

Вы можете установить размер пакета для моделей PyTorch в SageMaker через переменные среды. Если вы решите использовать собственный контейнер, вы можете связать настройки in config.properties с вашей моделью при упаковке вашей модели в TorchServe. В следующем фрагменте кода показан пример установки размера пакета с помощью переменных среды и развертывания модели PyTorch в SageMaker:

from SageMaker.pytorch.model import PyTorchModel env_variables_dict = { "SAGEMAKER_TS_BATCH_SIZE": "3", "SAGEMAKER_TS_MAX_BATCH_DELAY": "100000"
} pytorch_model = PyTorchModel( model_data=model_artifact, role=role, source_dir="code", framework_version='1.9', entry_point="inference.py", env=env_variables_dict
) predictor = pytorch_model.deploy(initial_instance_count=1, instance_type="ml.c5.2xlarge", serializer=SageMaker.serializers.JSONSerializer(), deserializer=SageMaker.deserializers.BytesDeserializer())

В фрагменте кода model_artifact относится ко всем необходимым файлам для обратной загрузки обученной модели, которая архивируется в файле .tar и помещается в файл. Простой сервис хранения Amazon (Amazon S3) ведро. Inference.py аналогичен пользовательскому обработчику TorchServe; он имеет несколько функций, которые вы можете переопределить, чтобы обеспечить инициализацию модели, предварительную и постобработку полученных запросов, а также логику вывода.

Следующие ноутбук показан полный пример развертывания модели BERT Hugging Face.

Если вам нужен собственный контейнер, вы можете создать собственный образ контейнера и отправить его в Реестр Amazon Elastic Container (Amazon ECR). Артефактом модели в этом случае может быть файл TorchServe .mar, который объединяет артефакты модели вместе с обработчиком. Мы продемонстрируем это в следующем разделе, где мы используем задание пакетного преобразования SageMaker.

Задание пакетного преобразования SageMaker

Для случаев автономного использования, когда запросы группируются из источника данных, например набора данных, SageMaker предоставляет задания пакетного преобразования. Эти задания позволяют считывать данные из корзины S3 и записывать результаты в целевую корзину S3. Для получения дополнительной информации см. Используйте пакетное преобразование для получения выводов из больших наборов данных. Полный пример пакетного вывода с использованием заданий пакетного преобразования можно найти в следующем документе. ноутбук, где мы используем модель машинного перевода из конкурса FLORES. В этом примере мы покажем, как использовать собственный контейнер для оценки нашей модели с помощью SageMaker. Использование пользовательского контейнера вывода позволяет дополнительно настроить конфигурацию TorchServe. В этом примере мы хотим изменить и отключить декодирование JSON, что мы можем сделать через TorchServe. config.properties .

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

Мы используем наш собственный контейнер для объединения артефактов модели с обработчиком, как мы это делаем в TorchServe (создание файла .mar). Нам также нужна точка входа в контейнер Docker, который запускает TorchServe с размером пакета и декодированием JSON, установленными в config.properties. Продемонстрируем это на примере ноутбук.

Заданию пакетного преобразования SageMaker требуется доступ к входным файлам из корзины S3, где оно делит входные файлы на мини-пакеты и отправляет их на логический вывод. При настройке задания пакетного преобразования учитывайте следующие моменты:

  • Поместите входные файлы (например, набор данных) в корзину S3 и установите его в качестве источника данных в настройках задания.
  • Назначьте корзину S3, в которой будут сохраняться результаты задания пакетного преобразования.
  • Поставьте Пакетная стратегия в MultiRecord и SplitType в Line если вам нужно задание пакетного преобразования для создания мини-пакетов из входного файла. Если он не может автоматически разделить набор данных на мини-пакеты, вы можете разделить его на мини-пакеты, поместив каждый пакет в отдельный входной файл, помещенный в корзину S3 источника данных.
  • Убедитесь, что размер пакета помещается в память. SageMaker обычно делает это автоматически; однако при разделении пакетов вручную это необходимо настроить на основе памяти.

Следующий код является примером задания пакетного преобразования:

s3_bucket_name= 'SageMaker-us-west-2-XXXXXXXX'
batch_input = f"s3://{s3_bucket_name}/folder/jobename_TorchServe_SageMaker/"
batch_output = f"s3://{s3_bucket_name}/folder/jobname_TorchServe_SageMaker_output/" batch_job_name = 'job-batch' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
batch_job_name request = { "ModelClientConfig": { "InvocationsTimeoutInSeconds": 3600, "InvocationsMaxRetries": 1, }, "TransformJobName": batch_job_name, "ModelName": model_name, "MaxConcurrentTransforms":1, "BatchStrategy": "MultiRecord", "TransformOutput": {"S3OutputPath": batch_output, "AssembleWith": "Line", "Accept": "application/json"}, "TransformInput": { "DataSource": { "S3DataSource": {"S3DataType": "S3Prefix", "S3Uri": batch_input} }, "SplitType" : "Line", "ContentType": "application/json", }, "TransformResources": {"InstanceType": "ml.p2.xlarge", "InstanceCount": 1},
}

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

В следующем фрагменте кода показано, как создать и запустить задание с использованием предыдущих настроек:

sm.create_transform_job(**request) while True: response = sm.describe_transform_job(TransformJobName=batch_job_name) status = response["TransformJobStatus"] if status == "Completed": print("Transform job ended with status: " + status) break if status == "Failed": message = response["FailureReason"] print("Transform failed with the following error: {}".format(message)) raise Exception("Transform job failed") print("Transform job is still in status: " + status) time.sleep(30)

Заключение

В этом посте мы рассмотрели два режима, которые предлагает SageMaker для онлайн- и офлайн-вывода. Первый использует динамическую пакетную обработку, предусмотренную в TorchServe, для пакетной обработки запросов от нескольких клиентов. Последний использует задание преобразования SageMaker для пакетной обработки запросов из входных файлов в корзину S3 и выполнения вывода.

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

Поскольку TorchServe продолжает развиваться для удовлетворения потребностей сообщества PyTorch, в SageMaker интегрируются новые функции, обеспечивающие эффективные способы обслуживания моделей в производстве. Для получения дополнительной информации ознакомьтесь с Репозиторий TorchServe на GitHub и Примеры SageMaker.


Об авторах

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

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

Хамид Шоджаназери — инженер-партнер в Pytorch, занимающийся оптимизацией и обслуживанием высокопроизводительной модели OSS. Хамид имеет докторскую степень в области компьютерного зрения и работал исследователем в мультимедийных лабораториях в Австралии, Малайзии и руководил НЛП в Opus.ai. Ему нравится находить более простые решения сложных проблем, а в свободное время он увлекается искусством.

Гита Чаухан возглавляет разработку партнеров по искусственному интеллекту в Meta AI и обладает опытом создания устойчивых, устойчивых к хрупкости крупномасштабных распределенных платформ для стартапов и компаний из списка Fortune 500. Ее команда работает со стратегическими партнерами, лидерами машинного обучения в отрасли и всеми крупными поставщиками облачных услуг для создания и запуска новых продуктов и услуг в области искусственного интеллекта; и перенос моделей PyTorch от исследования к производству. Она является победительницей конкурса «Женщины в ИТ – Силиконовая долина – технический директор 2019 года», почетным докладчиком ACM и идейным лидером по различным темам, от этики в искусственном интеллекте, глубокого обучения, блокчейна, Интернета вещей. Она с энтузиазмом продвигает использование ИИ во благо.

Источник: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

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

Больше от Блог машинного обучения AWS