如何在Python lambda中适合TensorFlow Serving Client API?

时间:2018-12-20 22:30:25

标签: python tensorflow lambda data-science tensorflow-serving

我正在尝试构建Python Lambda,以将图像发送到TensorFlow Serving进行推理。我至少有两个依赖项:CV2和tensorflow_serving.apis。我已经运行了多个教程,显示可以在lambda中运行tensorflow,但是它们提供了要安装的软件包,并且没有说明如何使它适应未压缩的小于256MB的限制。

我尝试遵循official instructions进行打包,但是下载了475MB的依赖项:

$ python -m pip install tensorflow-serving-api --target .
Collecting tensorflow-serving-api
  Downloading https://files.pythonhosted.org/packages/79/69/1e724c0d98f12b12f9ad583a3df7750e14ec5f06069aa4be8d75a2ab9bb8/tensorflow_serving_api-1.12.0-py2.py3-none-any.whl
...
$ du -hs .
475M    .

我看到其他人已经与这条龙作战,并通过扭曲从所有依赖项中剔除所有未使用的库或从头开始编译而赢得了(1)(2)。但是,在一个数据科学和lambda几乎成为主流的世界中,这种极端情况令我感到复杂而过时。确实有这么少的人正在使用TensorFlow Serving with Python,而我不得不跳过这样的障碍才能使它作为Lambda工作吗?还是有更简单的方法?

1 个答案:

答案 0 :(得分:0)

目标是实际上不在客户端使用张量流,因为它占用了大量空间,但实际上并不需要推理。不幸的是tensorflow-serving-api需要整个tensorflow程序包,它本身太大而不能放入lambda。

您可以做的是建立自己的客户端,而不是使用该软件包。这涉及使用grpcio-tools包进行protobuf通信,以及使用tensorflow和tensorflow服务中的各种.proto文件。

特别是您要打包这些文件-

tensorflow/serving/  
  tensorflow_serving/apis/model.proto
  tensorflow_serving/apis/predict.proto
  tensorflow_serving/apis/prediction_service.proto
tensorflow/tensorflow/  
  tensorflow/core/framework/resource_handle.proto
  tensorflow/core/framework/tensor_shape.proto
  tensorflow/core/framework/tensor.proto
  tensorflow/core/framework/types.proto

从那里您可以生成python protobuf文件。