Разработка с помощью 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 Serving и поддержкой графического процессора, которая будет использоваться с 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.

Чтобы создать изображение, полностью оптимизированное для вашего хоста, просто:

  1. Клонируйте проект обслуживания TensorFlow.

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. Создайте изображение с помощью оптимизированного 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 .
      
  3. Создайте образ обслуживания, взяв за основу образ разработки.

    • Для процессора:

      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 .