我正在将Flask与Gunicorn结合使用以实现AI服务器。服务器接收http请求并调用AI算法(由pytorch
构建)。计算在nvidia GPU上运行。我正在使用的驱动程序界面为pycuda
。我需要一些有关在这种情况下如何实现并发/并行的信息。该机器通常具有8个或更多GPU。每个人都可以运行多种算法。
具体的问题是,哪种Gunicorn工作者类(或说Python的并发库)最适合此类任务?
我知道常见的策略是:
如果应用程序受I / O限制,请选择“伪线程”,例如gevent
。
如果应用程序受CPU限制,请使用Python的GIL来实现并行处理。
如果担心内存占用量,请使用gthread
或gevent
来代替进程工作者。
about陈述可能并不十分准确,但我认为它可以作为一般指导原则。
但是,对于GPU任务,我不确定是否应该将它们视为CPU受限的情况,还是有特殊之处?如果我使用GIL
而不是进程,GPU计算会受到gthreads
的影响吗?