Skip to main content

TensorFlow Lite 智能回复运行时的 Python 绑定。

项目描述

Py-Smartreply

用于 Google 智能回复 Tensorflow Lite 模型的 Python 绑定。这是我之前构建的更简洁且易于部署的Smartreply版本。

特征:

  1. Python 包,可以端到端使用,无需任何依赖。
  2. 使用 CMake 构建系统,构建 C++ 代码库(早期存储库使用 bazel)
  3. 自定义 Tensorflow Lite op-resolver,它在编译时将 C++ 运算符绑定到有向无环图。
  4. 用 Flask 编写的 Web 服务器,它通过 REST API 为模型提供推理服务。
  5. Kubernetes 部署配置。

为什么另一个存储库?

早期版本使用bazel构建系统,这导致了许多构建问题。Bazel 与 Python 构建系统的互操作性很差。以自动化、轻松的方式即时构建和部署 python 包实际上是不可能的。较新版本的 Smartreply 使用CMake,这使得与 python 构建系统集成变得容易,现在构建是自动化的,不需要任何干预(或中间的手动步骤),这允许我们使用 GitHub 操作编写 CI/CD 管道并自动化整个代码-测试-包-部署周期。早期版本还依赖于一个名为RegisterSelectedOps,这是一个在编译时动态生成的函数(作为头文件),谷歌以某种方式使用 Bazel 将其自动化,这在 CMake 中是不可能的,因此较新的版本删除了它的依赖关系并引入了它自己的 op-resolver 函数,它硬编码运算符而不是生成一个函数并在编译时动态链接它。

如何构建:

要构建此软件包,您可能需要CMake并且skbuild易于安装。安装这些软件包后,运行:

python3 setup.py bdist_wheel

使用 PyPI 中的包:

你可以通过 pip 安装这个包,如下:

pip install py_smartreply

用法

下面的示例显示了用法:

from smartreply import SmartReplyRuntime

#create SmartReplyRuntime() object, you can specify your own model path as an argument, or default provided 
#model will be used, ex : SmartReplyRuntime('mymodel.tflite')
rt = SmartReplyRuntime()

#Prediction on a single string
single = rt.predict("hi")
print(single)

#Prediction on multiple strings, runs in a loop
multi = rt.predictMultiple(["hello", "i am happy", "great"])
print(multi)

#Prediction on multiple strings, exploits batching capability of tflite
multiBatch = rt.predictMultiple(["hello", "i am happy", "see me tomorrow"], batch = True)
print(multiBatch)

使用 REST API

正常启动服务器,如下:

python3 web-server/app.py

这将在 PORT 上启动服务器8000,然后您可以使用 curl 进行测试:

单输入请求:

curl -d '{"input" : "Hello"}' -H "Content-Type:application/json" http://localhost:8000/api/inference

输出:

{"result":{"Hi, how are you doing?":1.0899782180786133,"How are you sir?":1.4489225149154663,"I do not understand":1.1177111864089966,"No pictures":0.4019201695919037,"Sending now":0.4459223747253418,"So how did it go?":1.0521267652511597},"success":true}

多输入请求:

curl -d '{"input" : ["Hello", "hi", "I am happy"]}' -H "Content-Type:application/json" http://localhost:8000/api/inference

使用 Dockerfile

Dockerfile可以在web-server/Dockerfile. 您可以按如下方式构建和运行:

  1. 建造:
cd web-server
docker build . -t smartreply:latest
  1. 运行: docker run --rm -ti -p 8000:8000 smartreply:latest

部署在 K8s 上

deplpyment 文件位于web-server/kubernetes/deploy.yaml. 如果你有 K8s 集群并kubectl安装,你可以尝试:

kubectl create -f web-server/kubernetes/deploy.yaml

运行测试:

该项目pytest用于测试功能,测试可以在tests/test_smartreply.py. 您可以按如下方式运行测试套件:

pytest tests/

贡献:

任何形式的贡献总是受欢迎的。如果您发现某些东西可以更好或需要添加任何可以帮助他人的功能,您可以直接提出问题、建议功能或制作 PR。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置发行版

py_smartreply-0.0.1-cp37-cp37m-manylinux2010_x86_64.whl (7.9 MB 查看哈希

已上传 cp37

py_smartreply-0.0.1-cp36-cp36m-manylinux2010_x86_64.whl (7.9 MB 查看哈希

已上传 cp36