Развертывание простой модели TensorFlow

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Этот проект предназначен для того, чтобы помочь вам пройти процесс создания простой модели TensorFlow, экспорта ее и последующего развертывания с использованием Docker и TensorFlow Serving. TensorFlow - это открытый фреймворк машинного обучения, а TensorFlow Serving - это гибкая система высокой производительности для развертывания моделей машинного обучения. Контейнеры Docker позволяют легко упаковывать и развертывать эти модели в согласованном виде. По завершении этого проекта вы поймете, как настроить базовую модель машинного обучения в TensorFlow, экспортировать ее для развертывания и развернуть с использованием TensorFlow Serving внутри контейнера Docker.

👀 Предварительный просмотр

## Отправить запрос на предсказание в контейнер TensorFlow Serving
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

Вывод:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

🎯 Задачи

В этом проекте вы научитесь:

  • Устанавливать зависимости TensorFlow и TensorFlow Serving
  • Создавать простую модель TensorFlow для базовых арифметических операций
  • Экспортировать модель в формате, подходящем для развертывания с использованием TensorFlow Serving
  • Развертывать модель с использованием Docker и TensorFlow Serving
  • Отправлять запросы на предсказание в развернутую модель и получать предсказания

🏆 Достижения

После завершения этого проекта вы сможете:

  • Настроить базовую модель машинного обучения в TensorFlow
  • Экспортировать модель TensorFlow для развертывания
  • Развернуть модель TensorFlow с использованием Docker и TensorFlow Serving
  • Отправлять запросы на предсказание в развернутую модель и наблюдать за результатами

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/save("Save Image") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} docker/ps -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} docker/exec -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} docker/pull -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} docker/save -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} docker/volume -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} docker/build -.-> lab-298840{{"Развертывание простой модели TensorFlow"}} end

Установка зависимостей

Перед началом работы вам необходимо установить TensorFlow в своей среде. Кроме того, вы должны скачать образ TensorFlow Serving с Docker Hub, чтобы подготовиться к развертыванию вашей модели в контейнеризованной среде. Выполните следующие команды в терминале.

Установка TensorFlow:

## Install TensorFlow
pip install tensorflow==2.14.0
## Downgrade numpy to 1.26.4 to avoid compatibility issues with TensorFlow
pip install numpy==1.26.4

Скачивание Docker-образа TensorFlow Serving:

## Pull TensorFlow Serving image from Docker Hub
docker pull tensorflow/serving

На этом шаге вы установили TensorFlow, мощную библиотеку для численных вычислений и машинного обучения, а затем скачали Docker-образ TensorFlow Serving.

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

Создание и экспорт модели

На этом шаге вы определите простую модель TensorFlow, которая выполняет базовую арифметическую операцию: умножает входные данные на 0,5 и затем прибавляет 2. После определения модели вы экспортируете ее в формат, который может использовать TensorFlow Serving.

Создайте и экспортируйте модель в файле ~/project/half_plus_two.py:

## Import TensorFlow
import tensorflow as tf

## Define a simple Sequential model
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1], use_bias=True)
])

## Set the weights to achieve the "multiply by 0.5 and add 2" functionality
weights = [tf.constant([[0.5]]), tf.constant([2.0])]
model.set_weights(weights)

## Compile the model (required even if not training)
model.compile(optimizer='sgd', loss='mean_squared_error')

## Export the model to a SavedModel
export_path = './saved_model_half_plus_two/1'
tf.saved_model.save(model, export_path)

На этом шаге определяется модель TensorFlow, которая выполняет простую операцию над входными данными: умножает на 0,5 и прибавляет 2. Затем модель экспортируется в формат, подходящий для развертывания.

  • Модель определяется с использованием Keras API TensorFlow, который представляет собой высокоуровневый API для создания и обучения глубоких нейронных сетей. Модель состоит из одного полносвязного слоя (dense layer), который представляет собой полностью связанный слой нейронной сети.
  • Веса модели вручную настраиваются для выполнения желаемой операции (умножение на 0,5 и прибавление 2).
  • Несмотря на то, что эта модель не будет дополнительно обучаться, она компилируется для завершения ее структуры, что является обязательным шагом в TensorFlow.
  • Наконец, модель сохраняется в формате TensorFlow SavedModel, который представляет собой директорию, содержащую файл protobuf и контрольную точку TensorFlow с весами модели. Этот формат необходим для развертывания модели с использованием TensorFlow Serving.

Для экспорта модели запустите скрипт в терминале:

python half_plus_two.py

Модель сохраняется в директории ~/project/saved_model_half_plus_two, и структура файлов выглядит следующим образом:

.
└── saved_model_half_plus_two
└── 1
├── assets
├── fingerprint.pb
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
✨ Проверить решение и практиковаться

Развертывание модели с использованием Docker и TensorFlow Serving

После экспорта модели следующим шагом является ее развертывание с использованием TensorFlow Serving внутри контейнера Docker. Это позволяет сделать модель доступной по сети и отвечать на запросы на предсказание.

Разверните модель с использованием Docker в терминале:

## Serve the model using TensorFlow Serving in a Docker container
docker run -t --rm -p 9500:8500 -p 9501:8501 \
  -v "/home/labex/project/saved_model_half_plus_two:/models/half_plus_two" \
  -e MODEL_NAME=half_plus_two \
  tensorflow/serving

На этом шаге экспортированная модель развертывается с использованием TensorFlow Serving внутри контейнера Docker. Команда docker run запускает экземпляр TensorFlow Serving и делает модель доступной для запросов на инференс.

  • Флаги -p сопоставляют порты контейнера Docker с портами на вашем хост-машине, позволяя отправлять запросы на сервер модели TensorFlow Serving с вашего локального компьютера.
  • Флаг -v монтирует том с вашего хост-машины в контейнер Docker, делая экспортированную модель доступной для TensorFlow Serving.
  • Переменная окружения -e MODEL_NAME сообщает TensorFlow Serving имя модели, которую нужно развернуть.

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

Отправка запроса на предсказание в модель

Наконец, вы протестируете развернутую модель, отправив запрос на предсказание. Этот запрос попросит модель применить свою логику (умножить на 0,5 и прибавить 2) к набору входных значений.

Отправьте запрос на предсказание в другом новом терминале:

## Send a prediction request to the TensorFlow Serving container
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

Вывод:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

Этот последний шаг включает в себя тестирование развернутой модели путем отправки HTTP POST-запроса. Этот запрос содержит JSON-данные с примерами, для которых нужны предсказания.

  • Команда curl используется для отправки POST-запроса на сервер TensorFlow Serving. URL-адрес указывает модель и конечную точку API для предсказания.
  • Флаг -d предоставляет данные для запроса на предсказание в формате JSON. Ключ signature_name указывает сигнатуру развертывания, которую нужно использовать, что является способом сообщить TensorFlow Serving, какой вычислительный граф нужно выполнить. Ключ instances содержит входные данные для предсказания.

Ответ от сервера содержит предсказания, сделанные моделью для предоставленных входных примеров, что демонстрирует, что модель успешно развернута и выполняет предсказания.

Итог

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