Python gunicorn和gevent未使用所有资源

Python gunicorn和gevent未使用所有资源,python,gunicorn,gevent,Python,Gunicorn,Gevent,Gunicorn和gevent没有使用我告诉它的资源。当我告诉gunicorn使用一个worker时,它使用一个worker并最大化一个核心。如果我告诉它使用4个工人,它将一个核心分布在4个不同的工人身上。我希望一个工人有一个CPU。使用--threads选项时也会出现同样的问题 我有一个NER引擎,为该型号加载x MB的GPU内存。现在,我想最大化对该服务的请求数量。到目前为止,我最好的结果是使用gunicorn-t120-w4-kgevent--threads 12-b0.0.0.0:898

Gunicorn和gevent没有使用我告诉它的资源。当我告诉gunicorn使用一个worker时,它使用一个worker并最大化一个核心。如果我告诉它使用4个工人,它将一个核心分布在4个不同的工人身上。我希望一个工人有一个CPU。使用
--threads
选项时也会出现同样的问题

我有一个NER引擎,为该型号加载x MB的GPU内存。现在,我想最大化对该服务的请求数量。到目前为止,我最好的结果是使用
gunicorn-t120-w4-kgevent--threads 12-b0.0.0.0:8980 script:app
,这会导致每分钟约2.1k个请求。 在检查资源使用情况时,它似乎在加载模型时使用了很多资源,正如预期的那样。但是,当实际调用API时,它似乎没有太多用处

我想增加吞吐量。增加线程和工作线程的数量似乎并不重要

我在一台动力机器上运行,所以资源不是问题

另一方面,最好是让一个工人实际加载模型,然后让几个工人使用该模型。目前的一个大问题是,当我有+12个工作线程时,我的GPU内存不足,因为每个工作线程都必须在GPU内存中加载模型。有没有办法做到这一点?如果我理解的
gevent
正确,它应该处理这个问题吗

提前谢谢

更新
只是注意到gunicorn什么都没做。我在没有gunicorn的情况下运行该服务也会得到相同的结果。我做错了什么

通常,基于linux的系统显示的CPU利用率不是相对于总内核,而是单个内核。因此,在多核系统上,每个进程的利用率可能超过100%,100%意味着只有一个核心得到充分利用。我建议您使用一个显示CPU id的工具记录CPU利用率,然后返回您的问题并给出结果。是的,没错。这就是为什么我猜它从来没有使用过多个内核。CPU电源不是问题。我也测量过,在实际运行脚本时,从未超过10%。每个型号都需要一点内存,因为它存储在GPU内存中,但我还有很多内存要用。你确定CPU是你的限制吗?如果您受到其他因素的限制,无论是IO速度还是GPU速度,那么可能是您无法让多个核心100%的时间处于繁忙状态。永远不要实际使用多个核心100%的CPU利用率(每个进程)x 4个gunicorn workers意味着4个CPU核心被联合化。好的,谢谢。为什么只有一个实例的服务比有4个相同实例的服务效果更好?Gunicorn不应该充当4x实例的负载平衡器,并确保它们都以全速运行吗?在我的测试中,我每分钟发送约16k请求,但仅返回约2.3k请求。同样,这是一个实例。把工人增加到4个,生产量应该增加4倍,对吗?还是我完全误解了古尼康?