Разработка с помощью Docker
Получение образа разработки
Для среды разработки, в которой вы можете создать TensorFlow Serving, вы можете попробовать:
docker pull tensorflow/serving:latest-devel
Для среды разработки, в которой вы можете создать TensorFlow Serving с поддержкой графического процессора, используйте:
docker pull tensorflow/serving:latest-devel-gpu
Другие версии изображений, которые вы можете получить, см. в репозитории тензорного потока/обслуживания Docker Hub.
Пример разработки
После получения одного из образов Docker для разработки вы можете запустить его, открыв порт gRPC (8500):
docker run -it -p 8500:8500 --gpus all tensorflow/serving:latest-devel
Тестирование среды разработки
Чтобы протестировать модель, изнутри контейнера попробуйте:
# train the mnist model
python tensorflow_serving/example/mnist_saved_model.py /tmp/mnist_model
# serve the model
tensorflow_model_server --port=8500 --model_name=mnist --model_base_path=/tmp/mnist_model/ &
# test the client
python tensorflow_serving/example/mnist_client.py --num_tests=1000 --server=localhost:8500
Докерфайлы
В настоящее время мы поддерживаем следующие файлы Dockerfile:
Dockerfile
— минимальная виртуальная машина с установленным TensorFlow Serving.Dockerfile.gpu
— минимальная виртуальная машина с обслуживанием TensorFlow и поддержкой графического процессора, которая будет использоваться сnvidia-docker
.Dockerfile.devel
— минимальная виртуальная машина со всеми зависимостями, необходимыми для сборки TensorFlow Serving.Dockerfile.devel-gpu
— минимальная виртуальная машина со всеми зависимостями, необходимыми для создания сервиса TensorFlow с поддержкой графического процессора.
Создание контейнера из Dockerfile
Если вы хотите создать собственный образ Docker из файла Dockerfile, вы можете сделать это, выполнив команду сборки Docker:
Dockerfile
:
docker build --pull -t $USER/tensorflow-serving .
Dockerfile.gpu
:
docker build --pull -t $USER/tensorflow-serving-gpu -f Dockerfile.gpu .
Dockerfile.devel
:
docker build --pull -t $USER/tensorflow-serving-devel -f Dockerfile.devel .
Dockerfile.devel-gpu
:
docker build --pull -t $USER/tensorflow-serving-devel-gpu -f Dockerfile.devel-gpu .
СОВЕТ: Прежде чем пытаться создать образ, проверьте репозиторий тензорного потока/обслуживания Docker Hub, чтобы убедиться, что образ, соответствующий вашим потребностям, еще не существует.
Сборка из исходников потребляет много оперативной памяти. Если ОЗУ является проблемой в вашей системе, вы можете ограничить использование ОЗУ, указав --local_ram_resources=2048
при вызове Bazel. Дополнительную информацию см. в документации Bazel . Вы можете использовать этот же механизм для настройки оптимизаций, с помощью которых вы создаете TensorFlow Serving. Например:
docker build --pull --build-arg TF_SERVING_BUILD_OPTIONS="--copt=-mavx \
--cxxopt=-D_GLIBCXX_USE_CXX11_ABI=0 --local_ram_resources=2048" -t \
$USER/tensorflow-serving-devel -f Dockerfile.devel .
Запуск контейнера
Предполагается, что вы создали контейнер Dockerfile.devel
.
Чтобы запустить контейнер, открыв порт gRPC (8500):
docker run -it -p 8500:8500 $USER/tensorflow-serving-devel
СОВЕТ: Если вы используете образ графического процессора, обязательно используйте среду выполнения NVIDIA --runtime=nvidia
.
Отсюда вы можете следовать инструкциям по тестированию среды разработки .
Создание оптимизированного двоичного файла обслуживания
При запуске ModelServer TensorFlow Serving вы можете заметить сообщение журнала, которое выглядит следующим образом:
I external/org_tensorflow/tensorflow/core/platform/cpu_feature_guard.cc:141]
Your CPU supports instructions that this TensorFlow binary was not compiled to
use: AVX2 FMA
Это означает, что ваш двоичный файл ModelServer не полностью оптимизирован для процессора, на котором он работает. В зависимости от модели, которую вы обслуживаете, дальнейшая оптимизация может не потребоваться. Однако создать оптимизированный двоичный файл очень просто.
При создании образа Docker из предоставленных файлов Dockerfile.devel
или Dockerfile.devel-gpu
двоичный файл ModelServer будет создан с флагом -march=native
. Это заставит Bazel собрать двоичный файл ModelServer со всеми оптимизациями ЦП, которые поддерживает хост, на котором вы создаете образ Docker.
Чтобы создать изображение, полностью оптимизированное для вашего хоста, просто:
Клонируйте проект обслуживания TensorFlow.
git clone https://github.com/tensorflow/serving cd serving
Создайте изображение с помощью оптимизированного ModelServer.
Для процессора:
docker build --pull -t $USER/tensorflow-serving-devel \ -f tensorflow_serving/tools/docker/Dockerfile.devel .
Для графического процессора: `
docker build --pull -t $USER/tensorflow-serving-devel-gpu \ -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
Создайте образ обслуживания, взяв за основу образ разработки.
Для процессора:
docker build -t $USER/tensorflow-serving \ --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel \ -f tensorflow_serving/tools/docker/Dockerfile .
Ваше новое оптимизированное изображение Docker теперь называется
$USER/tensorflow-serving
, которое вы можете использовать так же, как стандартное изображениеtensorflow/serving:latest
.Для графического процессора:
docker build -t $USER/tensorflow-serving-gpu \ --build-arg TF_SERVING_BUILD_IMAGE=$USER/tensorflow-serving-devel-gpu \ -f tensorflow_serving/tools/docker/Dockerfile.gpu .
Ваш новый оптимизированный образ Docker теперь называется
$USER/tensorflow-serving-gpu
, который вы можете использовать так же, как стандартный образtensorflow/serving:latest-gpu
.