Один из самых простых способов , чтобы начать использовать TensorFlow сервировки с Докер .
# Download the TensorFlow Serving Docker image and repodocker pull tensorflow/serving
git clone https://github.com/tensorflow/serving
# Location of demo modelsTESTDATA="$(pwd)/serving/tensorflow_serving/servables/tensorflow/testdata"
# Start TensorFlow Serving container and open the REST API portdocker run -t --rm -p 8501:8501 \ -v "$TESTDATA/saved_model_half_plus_two_cpu:/models/half_plus_two" \ -e MODEL_NAME=half_plus_two \ tensorflow/serving &
# Query the model using the predict APIcurl -d '{"instances": [1.0, 2.0, 5.0]}' \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
# Returns => { "predictions": [2.5, 3.0, 4.5] }
Для дополнительных обслуживающих конечных точек, см API клиента REST .
Установить Docker
Общие инструкции по установке находятся на сайте Докер , но мы даем некоторые быстрые ссылки здесь:
- Докер для macOS
- Docker для Windows , для Windows , 10 Pro или более поздней версии
- Docker Toolbox для более старых версий MacOS, или версии Windows , до того Windows 10 Pro
Работа с Docker
Вытягивание обслуживающего изображения
После установки Docker вы можете загрузить последний образ докера TensorFlow Serving, выполнив:
docker pull tensorflow/serving
Это приведет к загрузке минимального образа Docker с установленным TensorFlow Serving.
См Docker концентратор tensorflow / служащий репо для других версий изображений , которые можно тянуть.
Запуск обслуживающего изображения
Обслуживающие образы (как CPU, так и GPU) имеют следующие свойства:
- Порт 8500 открыт для gRPC
- Порт 8501 открыт для REST API
- Дополнительно переменная окружения
MODEL_NAME
( по умолчаниюmodel
) - Переменная окружения Опция
MODEL_BASE_PATH
( по умолчанию/models
)
Когда обслуживающий образ запускает ModelServer, он запускает его следующим образом:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=${MODEL_NAME} --model_base_path=${MODEL_BASE_PATH}/${MODEL_NAME}
Для работы с Docker вам понадобятся:
- Открытый порт на вашем хосте для обслуживания
- Сохраненная модель для обслуживания
- Название вашей модели, на которое будет ссылаться ваш клиент.
Что вы будете делать это запустить Docker контейнер, публиковать порты контейнера в порты вашего хозяина, и монтажный путь вашего хозяина к SavedModel, где контейнер ожидает модель.
Давайте посмотрим на пример:
docker run -p 8501:8501 \
--mount type=bind,source=/path/to/my_model/,target=/models/my_model \
-e MODEL_NAME=my_model -t tensorflow/serving
В этом случае, мы начали контейнер Docker, опубликовали REST API порта 8501 к порту нашего хозяина 8501 и взяли модель мы назвали my_model
и сковали его модель по умолчанию базового пути к ( ${MODEL_BASE_PATH}/${MODEL_NAME}
= /models/my_model
). Наконец, мы заполнили переменное окружение MODEL_NAME
с my_model
и оставили MODEL_BASE_PATH
значения по умолчанию.
Это будет работать в контейнере:
tensorflow_model_server --port=8500 --rest_api_port=8501 \
--model_name=my_model --model_base_path=/models/my_model
Если бы мы хотели опубликовать порт КПГР, мы будем использовать -p 8500:8500
. Вы можете открыть оба порта API gRPC и REST одновременно или выбрать открытие только одного или другого.
Передача дополнительных аргументов
tensorflow_model_server
поддерживает множество дополнительных аргументов , которые вы могли бы перейти к порционным емкостям докеров. Например, если мы хотим передать файл конфигурации модели вместо указания имени модели, мы могли бы сделать следующее:
docker run -p 8500:8500 -p 8501:8501 \
--mount type=bind,source=/path/to/my_model/,target=/models/my_model \
--mount type=bind,source=/path/to/my/models.config,target=/models/models.config \
-t tensorflow/serving --model_config_file=/models/models.config
Этот подход работает для любых других аргументов командной строки , которая tensorflow_model_server
подставок.
Создание собственного имиджа сервировки
Если вам нужен обслуживающий образ, в контейнер которого встроена ваша модель, вы можете создать свой собственный образ.
Сначала запустите обслуживающий образ как демон:
docker run -d --name serving_base tensorflow/serving
Затем скопируйте SavedModel в папку модели контейнера:
docker cp models/<my model> serving_base:/models/<my model>
И, наконец, совершить контейнер , который подают вашу модель, изменяя MODEL_NAME
, чтобы соответствовать имени вашей модели `
docker commit --change "ENV MODEL_NAME <my model>" serving_base <my container>
Теперь вы можете остановить serving_base
docker kill serving_base
Это оставит вас с Докерами изображением под названием <my container>
, который можно развернуть и загрузить свою модель для обслуживания при запуске.
Пример подачи
Давайте рассмотрим полный пример, в котором мы загружаем SavedModel и вызываем его с помощью REST API. Сначала потяните изображение сервировки:
docker pull tensorflow/serving
Будет получен последний образ обслуживания TensorFlow с установленным ModelServer.
Далее, мы будем использовать игрушечную модель под названием Half Plus Two
, который генерирует 0.5 * x + 2
для значений x
мы обеспечиваем для прогнозирования.
Чтобы получить эту модель, сначала клонируйте репозиторий TensorFlow Serving.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
Затем запустите контейнер TensorFlow Serving, указав его на эту модель и открыв порт REST API (8501):
docker run -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving &
Это запустит контейнер докеров и запустит сервер модели обслуживания TensorFlow, привяжет порт 8501 REST API и сопоставит нашу желаемую модель с нашего хоста туда, где модели ожидаются в контейнере. Мы также передаем имя модели в качестве переменной среды, что будет важно при запросе модели.
Чтобы запросить модель с помощью API прогнозирования, вы можете запустить
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
Это должно вернуть набор значений:
{ "predictions": [2.5, 3.0, 4.5] }
Более подробная информация об использовании RESTful API можно найти здесь .
Работа с Docker с использованием вашего графического процессора
Установите nvidia-docker
Перед подачей на стол с GPU, в дополнение к установке Docker , вам потребуется:
- До современных драйверов NVIDIA для вашей системы
-
nvidia-docker
: Вы можете следовать инструкциям по установке здесь
Запуск графического процессора, обслуживающего образ
Запуск образа, обслуживающего GPU, идентичен запуску образа CPU. Для получения более подробной информации см работают обслуживающее изображение .
Пример обслуживания GPU
Давайте рассмотрим полный пример, в котором мы загружаем модель с операциями, привязанными к графическому процессору, и вызываем ее с помощью REST API.
Сначала установите nvidia-docker
. Затем вы можете загрузить последний образ докера TensorFlow Serving GPU, выполнив:
docker pull tensorflow/serving:latest-gpu
Это приведет к получению минимального образа Docker с ModelServer, созданным для работы на установленных графических процессорах.
Далее, мы будем использовать игрушечную модель под названием Half Plus Two
, который генерирует 0.5 * x + 2
для значений x
мы обеспечиваем для прогнозирования. Эта модель будет иметь операции, привязанные к устройству GPU, и не будет работать на CPU.
Чтобы получить эту модель, сначала клонируйте репозиторий TensorFlow Serving.
mkdir -p /tmp/tfserving
cd /tmp/tfserving
git clone https://github.com/tensorflow/serving
Затем запустите контейнер TensorFlow Serving, указав его на эту модель и открыв порт REST API (8501):
docker run --gpus all -p 8501:8501 \
--mount type=bind,\
source=/tmp/tfserving/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\
target=/models/half_plus_two \
-e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &
Это запустит контейнер докеров, запустит сервер модели обслуживания TensorFlow, привяжет порт 8501 REST API и сопоставит желаемую модель с нашего хоста туда, где модели ожидаются в контейнере. Мы также передаем имя модели в качестве переменной среды, что будет важно при запросе модели.
СОВЕТ: Прежде чем запрашивать модель, обязательно дождитесь появления следующего сообщения, указывающего, что сервер готов принимать запросы:
2018-07-27 00:07:20.773693: I tensorflow_serving/model_servers/main.cc:333]
Exporting HTTP/REST API at:localhost:8501 ...
Чтобы запросить модель с помощью API прогнозирования, вы можете запустить
curl -d '{"instances": [1.0, 2.0, 5.0]}' \
-X POST http://localhost:8501/v1/models/half_plus_two:predict
Это должно вернуть набор значений:
{ "predictions": [2.5, 3.0, 4.5] }
СОВЕТ: Попытка запустить модель графического процессора на машине без графического процессора или без работающей сборки графического процессора TensorFlow Model Server приведет к ошибке, которая выглядит следующим образом:
Cannot assign a device for operation 'a': Operation was explicitly assigned to /device:GPU:0
Более подробная информация об использовании RESTful API можно найти здесь .
Разработка с помощью Docker
Инструкции о том , как строить и развивать Tensorflow Отбывание, пожалуйста , обратитесь к разработке с Докер руководства .