给算法模型做后端的 flask 在生产部署时是否还需要 Gunicorn+ Gevent - V2EX
Oilybear
V2EX    Flask

给算法模型做后端的 flask 在生产部署时是否还需要 Gunicorn+ Gevent

  •  
  •   Oilybear Mar 21, 2023 4837 views
    This topic created in 1148 days ago, the information mentioned may be changed or developed.

    RT, flask 时一个通常情况下是一个单进单线框架,所以生产一般会还会套一层 Gunicorn + Gevent 来满足并发需求,但是最近在给模型封装 webapi 的时候我萌生疑问:

    1. 对于计算密集型的服务是否还需要 Gunicorn+ Gevent
    2. 对于问题 1 是否需要区分 gpu 部署场景和 cpu 部署场景
    11 replies    2024-03-19 09:39:30 +08:00
    yinmin
        1
    yinmin  
       Mar 21, 2023
    Gunicorn 是一定要用的,Gevent 要具体分析。Gevent 是基于协程的,需要连续 2 次 IO(例如:数据库、redis 、文件等)之间没有长时间的密集计算,否则会卡卡的。如果有长时间封闭式密集计算,Gunicorn+thread 更好些。
    对于第二个问题,Gevent 模式不区分 gpu 和 cpu ,只考虑协程模式下,多协程能否有效运行。
    yinmin
        2
    yinmin  
       Mar 21, 2023   1
    使用 Gunicorn + Gevent ,如果长时间无 io 的密集计算,需要定期运行 gevent.sleep(),把控制权交回 gevent 的事件循环,允许其他协程运行。同时,启用多个 workers 来提升并发量。
    Oilybear
        3
    Oilybear  
    OP
       Mar 21, 2023
    @yinmin 很感谢回复,可能我这个问题的核心确实应该是问 “是否还需要 gevent” 更合适一些,因为目前的服务为纯计算服务,慢 IO 我想应该只有异常日志会触发磁盘 IO ,所以想来可能确实不需要 gevent
    Oilybear
        4
    Oilybear  
    OP
       Mar 21, 2023
    另外还想向大家咨询,如果服务器上 GPU 不支持 VM 的话,使用 docker 部署多个容器使用同一块 GPU 是否类似于抢占式的场景,还是类似多线或者多进程并行场景
    yinmin
        5
    yinmin  
       Mar 21, 2023
    @Oilybear Gunicorn+gthread 更合适。
    yinmin
        6
    yinmin  
       Mar 21, 2023
    @Oilybear 不需要 gevent
    so1n
        7
    so1n  
       Mar 21, 2023
    如果给算法模型做 gateway 没有 IO 操作 gevent 可以不要
    hsfzxjy
        8
    hsfzxjy  
       Mar 21, 2023 via Android
    @Oilybear #4 类似于多进程
    chenzi0103
        9
    chenzi0103  
       Mar 21, 2023
    用 ray 来实现
    dayeye2006199
        10
    dayeye2006199  
       Mar 22, 2023
    gthread ,甚至流量不大的时候 sync 模式都可以。
    online inference 一般不会上 GPU ,因为往 GPU 上面来回搬数据也是有 overhead 的。特别是你自己写的服务,没有做 batching 的话,就是不断的搬很小的 tensor ,做很简单的运算。这个时候这个 IO 开销会超过运算开销。

    如果是做批量 inference (比如在数据管道里),可以考虑上 GPU 。

    几个程序一起用 GPU 我记得默认和多进程模型类似,timesharing 模式,不同进程切分为 time slices ,上 GPU 执行,CUDA 里面有个中央的调度器。
    nvidia 也有更高级的执行模式(可能要收费的),可以几个 kernel 一起上 GPU 并行执行,这样程序就不用中断。
    但这个 schedule 算法是闭源的,谁也说不清楚是咋弄的,
    zeromovie
        11
    zeromovie  
       Mar 19, 2024
    我是用 fastapi 加上 uvicorn 做算法的封装,配合 asyncio ,也能满足异步需求
    About     Help     Advertise     Blog     API     FAQ     Solana     3051 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 15:13 PVG 23:13 LAX 08:13 JFK 11:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86