使用 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.devel
或 Dockerfile.devel-gpu
檔案建構 Docker 映像檔時,ModelServer 二進位檔將使用旗標 -march=native
建構。這會導致 Bazel 建構 ModelServer 二進位檔,其中包含您建構 Docker 映像檔的主機支援的所有 CPU 最佳化。
如要建立針對您的主機完全最佳化的伺服映像檔,只需
複製 TensorFlow Serving 專案
git clone https://github.com/tensorflow/serving cd serving
使用最佳化的 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 .
使用開發映像檔做為基礎,建構伺服映像檔
適用於 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
映像檔一樣使用。