tensorflow是目前最受欢迎的deep learning框架之一,在学术界和产业界都有广泛的使用。在如何部署tensorflow模型提供远程调用服务方面官方提供了tensorflow serving框架,详细的介绍可以参考官网资料:https://tensorflow.github.io/serving/。本文主要介绍另一条部署服务的途径:利用flask快速搭建tensorflow http服务。
对于使用Python的同学来说,用flask搭建tensorflow http服务非常方便,而且不需要依赖太多的第三方插件。以前一个资料现在版本gevent有点问题,现在新版将wsgi 调整为pywsgi,本文进行调整,感谢那位朋友的整理,本文环境是python3.6 下面以一个简单的例子介绍具体的步骤:
1、 非阻塞异步flask服务:
import os
from gevent import monkey
monkey.patch_all()
from flask import Flask, request
# from gevent import wsgi
from gevent import pywsgi as wsgi
import tensorflow as tf
os.environ["CUDA_VISIBLE_DEVICES"] = "" #不使用GPU
a = tf.placeholder(tf.int32, shape=(), name="input")
asquare = tf.multiply(a, a, name="output")
sess = tf.Session() # 创建tensorflow session,也可以在这里载入tensorflow模型
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello World'
@app.route('/hello')
def response_request():
num = request.args.get('num')
for i in range (100):
ret = sess.run([asquare], feed_dict={a: num}) #运行tensorflow模型
return str(ret)
if __name__ == "__main__":
server = wsgi.WSGIServer(('127.0.0.1', 19877), app)
server.serve_forever()
2、gunicorn配置文件:如果只需要提供单线程http服务,直接运行上面那段代码即可,但是如果要运行多进程,则需要用gunicorn来启动多个进程,gunicorn配置文件模板如下:
import os
bind = '0.0.0.0:19879' #绑定的ip及端口号,0.0.0.0表示接收任意ip的http请求
workers = 10 #进程数
backlog = 2048 #监听队列
worker_class = "gevent" #使用gevent模式,还可以使用sync 模式,默认的是sync模式
debug = True
chdir = '/.../test'#你项目的根目录,比如我的app.py文件在/home/ubuntu/app目录下,就填写'/home/ubuntu/app'
proc_name = 'gunicorn.proc'
3、 启动多进程服务:
gunicorn -k gevent -c gun_basic.conf gevent_basic:app
其中:
gun_basic.conf:gunicorn配置文件
gevent_basic:启动gevent服务python文件
app:Flask实例
在浏览器中输入 127.0.0.1:19879/hello?num=10 可以看到返回结果 [100]。