Самый гибкий вариант логического вывода в реальном времени в SageMaker

В прошлом я рассказывал о том, как обучить пользовательскую модель TensorFlow на Amazon SageMaker. Это упрощается, поскольку SageMaker управляет контейнерами для популярных фреймворков, таких как TensorFlow, PyTorch, HuggingFace и других. Это позволяет разработчикам использовать предоставленные контейнеры и сосредоточиться на предоставлении сценария для обучения и/или вывода в методе, известном как Режим сценария.

Теперь предположим, что фреймворк, с которым вы работаете, не поддерживается существующими контейнерами глубокого обучения SageMaker. Это реальная возможность, так как существует множество существующих платформ машинного обучения, которые запускаются каждую неделю. SageMaker предлагает функцию, известную как Принеси свой собственный контейнер (BYOC), где у вас как у разработчика есть полный контроль. В этой статье мы рассмотрим пример переноса предварительно обученной модели Spacy NER в SageMaker и процесс развертывания для создания конечной точки в реальном времени для логического вывода. Если вы хотите сразу перейти к коду, загляните в этот репозиторий с исходным кодом и другими примерами SageMaker, связанными с инференсом.

ПРИМЕЧАНИЕ. Для тех из вас, кто не знаком с AWS, убедитесь, что вы создали учетную запись по следующей ссылке, если хотите следовать дальше. Процесс развертывания потребует затрат, особенно если вы оставите свою конечную точку включенной и работающей. В этой статье также предполагается наличие промежуточных знаний о SageMaker и AWS.

Оглавление

  1. Настройка контейнера
  2. Создание и отправка образа Docker в ECR
  3. Создать модель
  4. Создать конфигурацию конечной точки
  5. Создать конечную точку
  6. Вывод
  7. Заключение и дополнительные ресурсы

1. Настройка контейнера

Прежде чем мы начнем, обязательно создайте экземпляр Notebook и запустите его в SageMaker. После того, как вы откроете установку SageMaker JupyterLab, ваш каталог должен выглядеть следующим образом. Создайте блокнот (ядро Python3), а затем создайте каталог, который будет содержать файл Dockerfile и настройки наших файлов вывода/обслуживания.

Ваш Dockerfile будет указывать на ваш каталог NER, который содержит ваш код для оркестровки модели, работающей в SageMaker, и то, что Docker установит. В этом каталоге NER будет четыре файла, которые способствуют этой настройке.

  • nginx.conf: настраивает и настраивает внешний интерфейс nginx. Вы можете напрямую скопировать этот файл как есть для большинства примеров BYOC.
  • serve: эта программа запускает сервер gunicorn под капотом, он запускается при запуске контейнера для хостинга, вы также можете оставить этот файл как есть. Обратите внимание, что обычно у вас также будет файл train, если вы используете BYOC как для обучения, так и для хостинга. Для примера посмотрите этот код.
  • predictor.py: эта программа реализует веб-сервер Flask под капотом, есть два маршрута в /ping и /invocations, которые имеют решающее значение. . Ping получает запросы GET и возвращает 200, если ваш контейнер исправен. Вызовы — это место, где вы можете иметь свою логику вывода для модели, с которой вы работаете, и она будет возвращать прогнозы из вашей модели.
  • wsgi.py: представляет собой оболочку вокруг вашего файла predictor.py и не нуждается в изменении, если только вы не назвали предиктор.py другое имя файла.

Файл, который мы рассмотрим, — Predictor.py, так как остальную часть конфигурации не нужно трогать или редактировать.

Здесь мы можем загрузить нашу модель Spacy для вывода. Далее, как мы уже говорили, есть два URL-адреса, с которыми мы работаем. Мы можем использовать маршрут ping для выполнения проверки работоспособности нашего контейнера.

Теперь мы можем сосредоточиться на нашей логике вывода в маршруте вызовов.

Здесь мы ожидаем ввода JSON, поэтому мы настроим его на стороне клиента при подаче на конечную точку. Теперь наш контейнер настроен для обслуживания, теперь нам нужно создать Dockerfile, который указывает и выполняет эти файлы, а также устанавливает наши зависимости модели.

Здесь мы устанавливаем Spacy и указываем наш код на каталог SageMaker /opt/program, который SageMaker создает под капотом при обслуживании модели.

Теперь мы можем войти в нашу записную книжку и сосредоточиться на отправке этого изображения в ECR, где SageMaker может извлечь и использовать это изображение для логического вывода.

2. Создайте образ Docker и отправьте его в ECR

Записные книжки SageMaker Classic поставляются с поддержкой для Docker, поэтому мы также можем проводить локальное тестирование в терминале экземпляра. Прежде чем мы сможем перейти к этапам создания конечной точки, нам нужно создать и отправить наш образ Docker в ECR, где SageMaker хранит и извлекает все образы для обучения и вывода. Следующая команда оболочки может быть запущена в ноутбуке без каких-либо серьезных изменений.

Здесь мы делаем файл подачи исполняемым, назовем наш репозиторий ECR именем нашего алгоритма и создадим образ Docker на основе нашей структуры контейнера и Dockerfile. Это займет немного времени, но в конце вы сможете увидеть успешное изображение и репозиторий ECR, созданный с вашим изображением.

3. Создать модель

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

Обратите внимание, что есть два клиента: sm_client для модели, настройки конечной точки и создания конечной точки. Клиент времени выполнения предназначен для логического вывода и вызова конечной точки.

Теперь первым шагом является создание модели, здесь нам нужно указать на изображение ECR, которое мы отправили, чтобы SageMaker мог создать нашу модель. Мы делаем это, предоставляя имя нашего алгоритма и account_id в качестве переменной для местоположения контейнера. Вы также можете вручную получить URI изображения из ECR, хотя это не рекомендуется.

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

4. Создайте конфигурацию конечной точки

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

5. Создайте конечную точку

Теперь мы можем использовать конфигурацию конечной точки, чтобы затем создать конечную точку, которую мы будем использовать для логического вывода, с помощью другого простого вызова Boto3.

Это должно занять несколько минут, но если вы видите успешное сообщение, теперь мы готовы увидеть некоторые примеры выводов.

6. Вывод

Теперь мы можем вызвать конечную точку. Нам нужно помнить, что мы передали образец ввода json в наш файл Predictor.py, чтобы мы правильно настроили и сериализовали наш ввод перед вызовом.

Теперь мы видим некоторые образцы результатов NER с нашей конечной точки.

Если вы не хотите, чтобы ваша конечная точка работала, обязательно запустите следующий вызов Boto3, чтобы удалить вашу конечную точку, чтобы не нести расходы.

7. Заключение и дополнительные ресурсы



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

Чтобы понять, какую опцию SageMaker Inference использовать, ознакомьтесь с этой статьей. Чтобы узнать, как работать с существующими изображениями SageMaker, ознакомьтесь с этой статьей.

Если вам понравилась эта статья, не стесняйтесь связаться со мной в LinkedIn и подписаться на мою Информационную рассылку. Если вы новичок в Medium, зарегистрируйтесь с помощью моего Реферала для участников.