使用 Docker 开发
拉取开发镜像
对于可以构建 TensorFlow Serving 的开发环境,您可以尝试
docker pull tensorflow/serving:latest-devel
对于可以构建支持 GPU 的 TensorFlow Serving 的开发环境,请使用
docker pull tensorflow/serving:latest-devel-gpu
查看 Docker Hub tensorflow/serving 仓库 以了解您可以拉取的其他镜像版本。
开发示例
拉取其中一个开发 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
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 build 命令来实现
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 仓库,确保不存在满足您需求的镜像。
从源代码构建会消耗大量内存。如果您的系统内存不足,可以通过在调用 Bazel 时指定 --local_ram_resources=2048
来限制内存使用。有关更多信息,请参阅 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 构建一个支持您构建 Docker 镜像的主机的所有 CPU 优化的 ModelServer 二进制文件。
要创建针对您的主机完全优化的服务镜像,只需
克隆 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
镜像一样。