python docker 多进程提供 稳定tensorflow gpu 线上服务

Posted python_boy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python docker 多进程提供 稳定tensorflow gpu 线上服务相关的知识,希望对你有一定的参考价值。

 

 

  尝试了太多的python多进程的服务,在tensorflow 的线上GPU服务中总是不理想。tensorlfow serving docker服务这些也有些不便。

  今天抽空给大家分享一个成功的经验。失败的坑就太多了,不扯了。包括mutiprocess 和gevent,都不太理想。

  1、使用gunicorn。怎么使用的自己查一下。

  2、gunicorn --bind 0.0.0.0:10010 -w 3  app_×××:app

  3、在docker里这样启动后,虽然是多进程,但是速度并没有加快。怎么办?非常简单启动命令加上 --worker-class gevent。

  gunicorn --bind 0.0.0.0:10010 -w 3  --worker-class gevent app_***:app

  了解gunicorn的详情的可以参看下面的文字:

一、

创建flask应用

文件名 abc.py

# -*- coding:utf-8 -*-

from flask import Flask
import time

app = Flask(__name__)

@app.route(‘/‘)
def index():
    time.sleep(0.01) # 模拟程序阻塞
    return ‘hello world!‘

if __name__ == ‘__main__‘:
    app.run()


二、

执行命令

  gunicorn --bind 0.0.0.0:10010 -w 3  --worker-class gevent abc:app

#gunicorn --workers 3 --bind unix:myproject.sock --daemon -m 007 --user www-data --worker-class gevent wsgi:app

--worker-class 进行工作模式,默认是sync,会造成程序阻塞,这里使用gevent。
--workers 指定启动多少个进程,根据机器cpu核数来定。
--bind 指定通讯绑定到哪个.sock文件上。
--daemon 指定后台启动。
--user 指定用哪个用户启动这个进程,由于ubuntu采用apt-get安装的nginx默认启动用户是www-data,所以这里使用www-data,以免nginx没有权限访问.sock文件。
可使用top指令查看gunicorn程序启动情况:


参考:

https://www.jianshu.com/p/f5c271d95e39

 











以上是关于python docker 多进程提供 稳定tensorflow gpu 线上服务的主要内容,如果未能解决你的问题,请参考以下文章

为啥线程中的 python asyncio 进程在 Linux 上似乎不稳定?

Python多进程vs多线程

python多进程

Python并发复习3 - 多进程模块 multiprocessing

python基础 - 多进程

python多进程实例详解