Я закончил обучение своей модели TensorFlow, что мне теперь делать?

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

Больше нет. AWS SageMaker размещает вашу модель, поэтому вам нужно только беспокоиться о лечении рака. Развертывание вашего хоста в SageMaker дает вам доступ к автомасштабируемым, мультирегиональным и высокодоступным конечным точкам хоста. Вы даже можете провести A / B-тестирование. Вы могли подумать ... Я в деле! Что мне нужно сделать? Ответ заключается в том, что вам необходимо предоставить контейнер Docker с вашей моделью TensorFlow. Но не волнуйтесь, это очень просто - я вас накрою.

В этом руководстве я объясню, как создать и протестировать локально обслуживающий контейнер TensorFlow для AWS SageMaker.

Почему TensorFlow?

Потому что это круто, и все им пользуются. Хорошо, я признаю, что хипстеры и большинство наиболее актуальных исследователей машинного обучения в наши дни находятся в поезде PyTorch. Но дело не в этом. Дело в том, что вы можете разместить что угодно в SageMaker, и мне пришлось начать с чего-нибудь. Если вы считаете «что-то» высокопроизводительным, масштабируемым и надежным веб-сервером - этого достаточно. Давай сделаем это.

Предположим, вы уже преобразовали свою модель в формат сохраненной модели TensorFlow Serving. Если вы еще этого не сделали, вам пригодятся следующие ссылки:

Репозиторий GitHub TensorFlow Serving предоставляет несколько готовых сохраненных моделей для тестирования.

В этом примере загрузите модель saved_model_half_plus_three из репозитория GitHub TensorFlow Serving:

Как контейнеры AWS SageMaker обрабатывают запросы на обслуживание

Чтобы иметь возможность обслуживать с помощью AWS SageMaker, в контейнере должен быть реализован веб-сервер, который обрабатывает запросы /invocations и /ping через порт 8080.

Клиентские приложения отправляют запросы POST на /invocations для получения прогнозов, обычно с помощью AWS CLI, boto3 или AWS SDK. В статье Как делать прогнозы относительно конечной точки AWS SageMaker включены некоторые примеры этих прогнозов.

SageMaker отправляет /ping запросов к контейнеру, чтобы проверить, работает ли контейнер.

Давайте создадим контейнер, который обрабатывает эти запросы.

Создание изображения для обслуживания TensorFlow

Создайте файл с именем Dockerfile со следующим содержанием:

Некоторые примечания о Dockerfile:

  • Мы используем официальное изображение tenorflow / serve. Для экземпляров графического процессора вместо этого следует использовать tensorflow / serve: latest-gpu.
  • Запросы вывода AWS SageMaker и запросы TensorFlow Servings не соответствуют подписи. Мы используем NGINX, чтобы получить запрос в формате, который ожидает AWS SageMaker, и перенаправить его в службу TensorFlow. Этот метод называется обратным прокси-сервером.
  • Мы копируем внутри изображения модели обслуживания TensorFlow (в нашем случае save_model_helf_plus_three) и nginx.conf, настраивая обратный прокси.
  • ENTRYPOINT запускает службы. TensorFlow Serving настроен на получение запросов от saved_model_half_plus_three в формате localhost: 8501 / v1 / models / half_plus_three: предсказать

Давайте подробнее рассмотрим файл nginx.conf:

В этой конфигурации NGINX будет перенаправлять запросы в формате {адрес}: 8080 / invocations на http: // localhost: 8501 / v1 / models / half_plus_three: предсказать , который является форматом запроса, ожидаемым службой TF.

Создание образа Docker

Убедитесь, что у вас установлен Докер.

Команда docker build -t sagemaker-tf-serving . создает образ докера с именем sagemaker-tf-serve:

$ docker build -t sagemaker-tf-serving .
Step 1/5 : FROM tensorflow/serving
Step 2/5 : RUN apt-get update && apt-get install -y --no-install-recommends nginx git
Step 3/5 : COPY saved_model_half_plus_three /saved_model_half_plus_three
Step 4/5 : COPY nginx.conf /etc/nginx/nginx.conf
Step 5/5 : ENTRYPOINT service nginx start | tensorflow_model_server --rest_api_port=8501  --model_name=half_plus_three  --model_base_path=/saved_model_half_plus_three
Successfully built ac2cc25f0ee6
Successfully tagged sagemaker-tf-serving:latest

Локальное тестирование контейнера SageMaker

docker run --rm -p 8080:8080 sagemaker-tf-serving запускает контейнер и делает порт 8080 доступным вне контейнера.

Теперь мы готовы делать запросы к контейнеру:

$ curl -X POST http://localhost:8080/invocations -d '{"instances": [1.0,2.0,5.0]}'
{
    "predictions": [3.5, 4.0, 5.5]
}

Приведенная выше команда выполняет запрос POST / вызовы, передавая полезную нагрузку {"instances": [1.0,2.0,5.0]} в виде JSON. Помните, что формат ввода и вывода сохраненной модели TF, обслуживающей, определяется при создании модели.

Полезные данные запроса '{"instances": [1.0,2.0,5.0]}' находятся в том же формате, который ожидает TensorFlow Serving. Я расскажу о TensorFlow Serving REST API в будущих статьях - убедитесь, что вы подписаны на меня в среде и Twitter, чтобы получать обновления.

Мы готовы развернуть ваш контейнер в SageMaker.

Движение вперед с нашим контейнером SageMaker с использованием обслуживания TensorFlow

В следующих статьях вы узнаете:

использованная литература

Вы использовали контейнер? У вас есть вопросы или просьбы о дополнительных статьях? Добавляйте комментарии ниже! И не забывайте хлопать.