Оптимізуйте свої завдання висновку за допомогою динамічного пакетного висновку за допомогою TorchServe на Amazon SageMaker

Вихідний вузол: 1884601

У глибокому навчанні пакетна обробка означає введення кількох вхідних даних у модель. Хоча це важливо під час навчання, це також може бути дуже корисним для управління вартістю та оптимізації пропускної здатності під час висновків. Апаратні прискорювачі оптимізовані для паралелізму, а пакетна робота допомагає наситити обчислювальну потужність і часто призводить до підвищення пропускної здатності.

Пакетування може бути корисним у кількох сценаріях під час розгортання моделі у виробництві. Тут ми загалом класифікуємо їх за двома випадками використання:

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

Amazon SageMaker надає два популярні варіанти для ваших завдань з висновків. Для додатків у реальному часі SageMaker Hosting використовує TorchServe як серверну бібліотеку обслуговування, яка обробляє динамічне групування отриманих запитів. Для офлайн-додатків можна використовувати завдання пакетного перетворення SageMaker. У цій публікації ми розглянемо приклади кожного варіанта, щоб допомогти вам почати роботу.

Оскільки TorchServe є нативним інтегровано з SageMaker чЕРЕЗ Набір інструментів висновку SageMaker PyTorch, ви можете легко розгорнути модель PyTorch на TorchServe за допомогою SageMaker Hosting. Також можуть бути випадки, коли вам потрібно буде додатково налаштувати ваше середовище за допомогою спеціальних зображень Docker. У цій публікації ми спочатку покажемо, як розгорнути кінцеву точку в реальному часі за допомогою рідного набору інструментів для висновків SageMaker PyTorch і налаштування розміру пакета для оптимізації пропускної здатності. У другому прикладі ми демонструємо, як використовувати спеціальне зображення Docker для налаштування розширених конфігурацій TorchServe, які недоступні як змінна середовища, для оптимізації вашого завдання пакетного висновку.

Найкращі практики для пакетного висновку

Пакетна обробка може збільшити пропускну здатність і оптимізувати ваші ресурси, оскільки це допомагає завершити більшу кількість висновків за певний проміжок часу за рахунок затримки. Щоб оптимізувати розгортання моделі для підвищення пропускної здатності, загальна вказівка ​​полягає в збільшенні розміру пакета, доки пропускна здатність не зменшиться. Це найчастіше підходить для офлайн-додатків, де кілька вхідних даних групуються (наприклад, відеокадри, зображення або текст) для отримання прогнозованих виходів.

Для додатків у реальному часі затримка часто є основною проблемою. Існує компроміс між вищою пропускною здатністю та збільшенням розміру пакета та затримки; вам може знадобитися відкоригувати за потреби, щоб відповідати затримці SLA. З точки зору найкращих практик у хмарі, вартість певної кількості висновків є корисним орієнтиром для прийняття обґрунтованого рішення, яке відповідає потребам вашого бізнесу. Одним із факторів, що сприяє управлінню витратами, є вибір правильного прискорювача. Для отримання додаткової інформації див Виберіть найкращий прискорювач штучного інтелекту та компіляцію моделей для комп’ютерного бачення за допомогою Amazon SageMaker.

Динамічне дозування TorchServe на SageMaker

TorchServe це рідна бібліотека PyTorch для обслуговування моделей у виробництві в масштабі. Це спільна розробка Facebook і AWS. TorchServe дозволяє відстежувати, додавати спеціальні показники, підтримувати кілька моделей, збільшувати та зменшувати кількість працівників за допомогою безпечних API керування, а також надавати висновки та пояснення кінцевих точок.

Для підтримки пакетної обробки TorchServe надає функцію динамічного пакетування. Він агрегує отримані запити протягом визначеного періоду часу, групує їх разом і надсилає пакет для висновку. Отримані запити обробляються через обробники у 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 (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 для збереження результатів завдання пакетного перетворення.
  • Установка BatchStrategy до 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 Containers для навчання та висновків. Він захоплюється розподіленими системами глибокого навчання. Поза роботою він любить читати книги, грати на гітарі та готувати піцу.

Гамід Шоджаназері є інженером-партнером Pytorch, який працює над оптимізацією та обслуговуванням високопродуктивної моделі OSS. Хамід має ступінь доктора філософії в галузі комп’ютерного зору та працював дослідником у мультимедійних лабораторіях в Австралії, Малайзії та очолював NLP в Opus.ai. Він любить знаходити простіші рішення складних проблем і захоплюється мистецтвом у вільний час.

Гіта Чаухан очолює партнерську розробку штучного інтелекту в Meta AI, маючи досвід у створенні стійких, стійких до крихкості, великомасштабних розподілених платформ для стартапів і Fortune 500s. Її команда співпрацює зі стратегічними партнерами, лідерами машинного навчання у всій галузі та всіма основними постачальниками хмарних послуг для створення та запуску нових продуктів і послуг штучного інтелекту; і переносить моделі PyTorch від досліджень до виробництва. Вона є переможницею конкурсу «Жінки в ІТ – Силіконова долина» – технічний директор 2019 року, видатний спікер ACM та лідер думок у таких сферах, як етика в штучному інтелекті, глибоке навчання, блокчейн, Інтернет речей. Вона пристрасно заохочує використання ШІ на благо.

Джерело: https://aws.amazon.com/blogs/machine-learning/optimize-your-inference-jobs-using-dynamic-batch-inference-with-torchserve-on-amazon-sagemaker/

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

Більше від Блог машинного навчання AWS