python的深度学习模型使用flask部署时不同部署方式的性能差距

经常我们使用python训练得到了一个深度学习模型,前向计算的代码都是python编写的。虽然可以将前向计算的代码转为c++编写,提供模型部署的sdk,但这种做法需要专门的部署工程师来实现,比较费时。如果要尽快实际使用模型测试效果的话,使用web服务封装后提供推理能力也是比较常见的做法。

个人一般习惯使用flask来搭建这种简易的web服务,因为使用比较简单。

基于flask的程序写好后,需要部署服务。因为flask自带的app.run()方法是不能实际使用的(因为flask自带的WSGI服务器性能很差)。

需要测试下不同的部署方式之间的差异,不然随便选择一种不太严谨。

所有的程序都运行在同一个docker容器中,局域网内另一台机器用ab客户端。

机器性能

cpu: i7-6800K CPU @ 3.40GHz

内存:32G

使用apache ab作为测试工具,测试命令为

ab -n 100000 -c 1000 http://192.168.20.216:5001/

模拟的是10万请求,1000并发,测试全部完成时间。

测试了几种部署方式,最终发现,gunicorn + meinheld的方式最好。

cb6276ccde1fff5e038c29ca3d6259c9.jpeg

最简单的flask代码,

flask_app.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

如果只使用gevent来部署的话,代码flask_gevent_app.py为

from gevent import monkey
# 下面这句不加也能启动服务,但是你会发现Flask还是阻塞式单线程,在一个请求未返回时,
# 其他请求也会阻塞,所以请添加这句变成协程异步操作,可以单线程同时处理多个请求
monkey.patch_all()

from gevent.pywsgi import WSGIServer
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__=="__main__":
    server = WSGIServer(('0.0.0.0', 7770), app)
    server.serve_forever()

服务启动命令为

python flask_gevent_app.py

使用gunicorn加gevent的方式,服务启动命令为

gunicorn -w 1 -k gevent -b 0.0.0.0:7770 flask_app:app

如果只使用meinheld来部署的话,代码flask_meinheld_app.py为

from meinheld import server
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == "__main__":
    server.listen(("0.0.0.0", 7770))
    server.run(app)

服务启动命令为

python flask_meinheld_app.py


使用gunicorn加meinheld的方式,服务启动命令为

gunicorn -w 1 --worker-class=“egg:meinheld#gunicorn_worker” -b 0.0.0.0:7770 flask_app:app。

————————————————

版权声明:本文为CSDN博主「MC-Zhang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:python的深度学习模型使用flask部署时不同部署方式的性能差距_BlowfishKing的博客-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值