上篇主要介绍Pytorch转ONNX,由于业务需求暂时不在离线手机/车机端嵌入式,因此暂时对ONNX2NCNN不继续深入。既然ONNX model支持c,c++,java调用,那么serving的高效部署还是可行的。
这里选择了python简单调用的Flask部署ONNX模型。要注意的是本文的涉及的Flask仅供调试以保证模型转化和调用可行性,需要生产环境调用参考Deploying a Flask server in production
既然是python调用,那么Torch模型不用转换也可以尝试Flask部署。只是在实际应用中我们不需要任何“训练”,简而言之,只需要inference过程。那么显然直接用pytorch模型的意义不大,并且会导致效率低下。因此,一般来说需要转torchscript或者ONNX,或者其他inference 引擎支持的格式。
这里选用了ONNX, 本文默认模型已经成功打包成.onnx格式。Torch2ONNX转换可以参考上文 Pytorch 模型部署I—Torch2ONNX, 或者以下官方文档:
参考链接:
Pytorch 官方文档系列:torch.onnx,Pytorch2onnx and using onnxruntime
ONNX 模型压缩和可视化:onnx-simplifier,可视化 Netron
Flask调用pytorch模型官方文档: Deplying Pytorch in Python via flask
完整代码: Flask基于onnx模型调用
安装flask 和 简单flask脚本
安装
1 | pip install Flask==1.0.3 torchvision |
app.py
1 | from flask import Flask |
然后运行:1
python app.py
用浏览器打开 https://localhost:5000/ 就可以看到Hello World!
调用pytorch或者onnx模型,直接用地址获取输入语句
这里有两个小的改动:1
2
3
# and
input_sentence = request.args.get('text')
第一个将我们的功能,定义到端口 https://localhost:5000/query 下触发。第二个,制定输入语句为”text=“后面的内容。比如要检测”我想去机场“,就需要输入 https://localhost:5000/query?text=我想去机场。
至于中间模型初始化(读取模型),和模型预测(test)部分,直接用python代码即可
1 | from flask import Flask, render_template, request, redirect, jsonify |
让同一网络下的小伙伴测试你的服务
修改最后的app.run部分为:1
2if __name__ == '__main__':
app.run(debug=True, port=5000,host='0.0.0.0')
自己调用时还是和上面一致,使用localhost开头的即可。小伙伴需要用 https://yourip:5000/query?text=随便输入什么
只是想趁热打铁写一下自己的坑……