TensorFlow Lite 智能回复运行时的 Python 绑定。
项目描述
Py-Smartreply
用于 Google 智能回复 Tensorflow Lite 模型的 Python 绑定。这是我之前构建的更简洁且易于部署的Smartreply版本。
特征:
- Python 包,可以端到端使用,无需任何依赖。
- 使用 CMake 构建系统,构建 C++ 代码库(早期存储库使用 bazel)
- 自定义 Tensorflow Lite op-resolver,它在编译时将 C++ 运算符绑定到有向无环图。
- 用 Flask 编写的 Web 服务器,它通过 REST API 为模型提供推理服务。
- 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. 您可以按如下方式构建和运行:
- 建造:
cd web-server
docker build . -t smartreply:latest
- 运行: 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 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 7bd4ea6ac8dd6f2d71c078245aac3e987c4aab3a9749bab29eef94a0402f5491 |
|
| MD5 | 7742f9cac4f4d4a1d76d8ff75c11411b |
|
| 布莱克2-256 | 9050ad59228bfcd141567d364d25f9fdbf5e3fd126d703c75690c41347c5e4bd |
py_smartreply -0.0.1-cp36-cp36m-manylinux2010_x86_64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 17ee1a36e0fb21515856c266b86906a44e88df5655d26c1185fb01e410cb9f2a |
|
| MD5 | 9540e9d792a1946b6c40556debebb22c |
|
| 布莱克2-256 | 047a009d8ad36d3390de758468b40523be888731b8aa85e1f45216936d8fe9bf |