使用 Docker 開發

提取開發映像檔

如需可用於建構 TensorFlow Serving 的開發環境,您可以嘗試

docker pull tensorflow/serving:latest-devel

如需可用於建構具備 GPU 支援的 TensorFlow Serving 的開發環境,請使用

docker pull tensorflow/serving:latest-devel-gpu

如需您可以提取的其他映像檔版本,請參閱 Docker Hub tensorflow/serving repo

開發範例

提取其中一個開發 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

Dockerfiles

我們目前維護下列 Dockerfiles

  • Dockerfile,這是安裝 TensorFlow Serving 的最小 VM。

  • Dockerfile.gpu,這是具備 GPU 支援的 TensorFlow Serving 最小 VM,可搭配 nvidia-docker 使用。

  • Dockerfile.devel,這是具備建構 TensorFlow Serving 所需所有依附元件的最小 VM。

  • Dockerfile.devel-gpu,這是具備建構具備 GPU 支援的 TensorFlow Serving 所需所有依附元件的最小 VM。

從 Dockerfile 建構容器

如果您想要從 Dockerfile 建構自己的 Docker 映像檔,可以執行 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 tensorflow/serving repo,確認是否已有符合您需求的映像檔。

從來源建構會耗用大量 RAM。如果您的系統有 RAM 問題,您可以在叫用 Bazel 時指定 --local_ram_resources=2048,藉此限制 RAM 用量。詳情請參閱 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

提示:如果您執行的是 GPU 映像檔,請務必使用 NVIDIA 執行階段 --runtime=nvidia 執行。

從這裡開始,您可以按照 測試開發環境 的操作說明進行。

建構最佳化伺服二進位檔

執行 TensorFlow Serving 的 ModelServer 時,您可能會注意到類似這樣的記錄訊息

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 二進位檔未針對其執行的 CPU 完全最佳化。視您提供的模型而定,可能不需要進一步最佳化。不過,建構最佳化二進位檔很簡單。

從提供的 Dockerfile.develDockerfile.devel-gpu 檔案建構 Docker 映像檔時,ModelServer 二進位檔將使用旗標 -march=native 建構。這會導致 Bazel 建構 ModelServer 二進位檔,其中包含您建構 Docker 映像檔的主機支援的所有 CPU 最佳化。

如要建立針對您的主機完全最佳化的伺服映像檔,只需

  1. 複製 TensorFlow Serving 專案

    git clone https://github.com/tensorflow/serving
    cd serving
    
  2. 使用最佳化的 ModelServer 建構映像檔

    • 適用於 CPU

      docker build --pull -t $USER/tensorflow-serving-devel \
        -f tensorflow_serving/tools/docker/Dockerfile.devel .
      
    • 適用於 GPU:`

      docker build --pull -t $USER/tensorflow-serving-devel-gpu \
        -f tensorflow_serving/tools/docker/Dockerfile.devel-gpu .
      
  3. 使用開發映像檔做為基礎,建構伺服映像檔

    • 適用於 CPU

      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 映像檔一樣使用

    • 適用於 GPU

      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 映像檔一樣使用