flask快速搭建tensorflow http服务

tensorflow是目前最受欢迎的deep learning框架之一,在学术界和产业界都有广泛的使用。在如何部署tensorflow模型提供远程调用服务方面官方提供了tensorflow serving框架,详细的介绍可以参考官网资料:https://tensorflow.github.io/serving/。本文主要介绍另一条部署服务的途径:利用flask快速搭建tensorflow http服务。

        对于使用Python的同学来说,用flask搭建tensorflow http服务非常方便,而且不需要依赖太多的第三方插件。下面以一个简单的例子介绍具体的步骤:

1、 非阻塞异步flask服务:

import os
from gevent import monkey
monkey.patch_all()
from flask import Flask, request
from gevent import 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]。

你可能感兴趣的:(深度学习)