经常我们使用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的方式最好。
部署方式 | QPS | Time per request |
---|---|---|
gevent | 2332.71 | 428.687 |
gunicorn+genvent(worker:1) | 2010.75 | 497.327 |
gunicorn+genvent(worker:2) | 3737.34 | 267.57 |
gunicorn+genvent(worker:4) | 6508.4 | 153.648 |
meinheld | 2922.66 | 342.154 |
gunicorn+meinheld(worker:1) | 4192.53 | 238.519 |
gunicorn+meinheld(worker:2) | 7566.64 | 13 |