试用TensorFlow Serving

限于水平,本文只依据TensorFlow官方教程作简单的操作性介绍,不对示例的源代码(第2、4部分)作详细分析。
测试环境:Win10Pro + PyCharm,Win10子系统Ubuntu16 + Serving。
这种搭配,如果对Linxu命令不熟悉,可以很好地利用Win10的图形界面进行操作。Ubuntu子系统在Win10中的路径为C:\Users\un\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu***\LocalState\rootfs。不过要注意,用Win10图形界面操作子系统文件时,需要重启Ubuntu命令窗口且修改相应文件的权限。

1 配置环境

TensorFlow Serving的编译依赖于Google的开源编译工具Bazel;gRPC用作客户端访问Serving服务的通道;Serving,或ModelServer将模型以服务暴露出去。如果不使用Bazel编译源代码,可以不用安装,后续的py代码执行只需tensorflow-serving-api

1.1 Bazel

可以安装二进制文件,也可以从源码安装。此处选择前者。
下载Bazel的二进制文件https://github.com/bazelbuild/bazel/releases。
放置到Ubuntu子系统后要修改该文件的权限,然后才能安装:

chmod +x bazel-0.5.4-installer-linux-x86_64.sh
./bazel-0.15.2-installer-linux-x86_64.sh --user

配置环境,把export PATH="$PATH:$HOME/bin"放到~/.bashrc中。

1.2 gRPC

可以从PyPI安装,也可以从源码安装,此处选择前者。
安装gRPC(locally):

pip3 install grpcio

或者system wide:

sudo pip3 install grpcio

1.3 Serving

安装TensorFlow Serving依赖的库:

sudo apt-get update && sudo apt-get install -y \
        automake \
        build-essential \
        curl \
        libcurl3-dev \
        git \
        libtool \
        libfreetype6-dev \
        libpng12-dev \
        libzmq3-dev \
        pkg-config \
        python3-dev \
        python3-numpy \
        python3-pip \
        software-properties-common \
        swig \
        zip \
        zlib1g-dev

安装tensorflow-serving-api,无需Bazel即可运行Python客户端:

pip3 install tensorflow-serving-api

对于Serving,可以安装二进制文件,也可以从源码安装。此处选择前者。
TensorFlow Serving ModelServer有两个版本,即tensorflow-model-server和tensorflow-model-server-universal,其中前者针对SSE4和AVX之类的指令集进行了优化,但对老机器支持不好。前者不可行,即处理器不支持AVX指令集,则安装后者。

sudo apt-get remove tensorflow-model-server
# 把Serving的发行URI添加为package源
echo "deb [arch=amd64] http://storage.googleapis.com/tensorflow-serving-apt stable tensorflow-model-server tensorflow-model-server-universal" | sudo tee /etc/apt/sources.list.d/tensorflow-serving.list
curl https://storage.googleapis.com/tensorflow-serving-apt/tensorflow-serving.release.pub.gpg | sudo apt-key add -
# 安装更新,之后即可通过tensorflow_model_server命令调用
sudo apt-get update && sudo apt-get install tensorflow-model-server

以后可以通过以下方式把ModelServer升级到指定版本:

sudo apt-get upgrade tensorflow-model-server

2 获取模型

此处使用TensorFlow Serving提供的示例mnist_saved_mdoel.py,其源码可从此处获取https://github.com/tensorflow/serving。导入Win10的PyCharm后,运行serving/tensorflow_serving/example/mnist_saved_model.py,注意是通过CMD运行、且要输入参数,比如:

python mnist_saved_model.py --training_iteration=1000 --model_version=2 tmp

三个参数依次是迭代轮数、模型版本号、输出路径。程序会在tmp目录下生成以版本号命名的文件夹,并在其中存放导出模型pb文件。

3 部署模型

将上述版本号文件夹复制到Ubuntu的Serving工作目录,比如/home/un/serving/mnist/下。
在Ubuntu下运行Serving服务:

# 最后一个参数要是绝对路径
tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/home/un/serving/model/mnist

如成功运行会打印如下日志:

2018-08-02 10:45:53.322984: I tensorflow_serving/model_servers/main.cc:323] Running ModelServer at 0.0.0.0:9000 ...

4 创建客户端

TensorFlow Serving的mnist_client.py示例即为客户端。在Win10的PyCharm命令窗口下运行该客户端py文件:

python mnist_client.py --num_tests=10000 --server=localhost:9000

其中参数num_tests测试次数可置为其他值。由于Win10与子系统的IP地址相同,所以可以使用localhost作为服务器。
然后命令窗口输出的日志中会给出错误率。

至此,Serving试用完成。关于模型导出、客户端发送请求的代码实现,以及gRPC的工作原理,还有很多内容需要讨论。争取以后补充吧。

参考文献

  1. TensorFlow。TensorFlow Serving Installation。https://www.tensorflow.org/serving/setup。
  2. grpc。gRPC Python。https://github.com/grpc/grpc/tree/master/src/python/grpcio。
  3. TensorFlow。Serving a TensorFlow Model。https://www.tensorflow.org/serving/serving_basic。
  4. AngelaBitTiger。TensorFlow Serving 尝尝鲜。https://zhuanlan.zhihu.com/p/23361413。

你可能感兴趣的:(试用TensorFlow Serving)