使用 Python Ray 进行并行处理时 CPU 未完全使用

问题描述

第一次在这里发帖,所以首先非常感谢这个非常有帮助的社区!

我正在使用 Ray 和 Python 3.6 运行并行生物信息学计算。 我已将其设置为在 Ubuntu 18 上的具有 64 个内核的 AWS EC2 实例上运行。我必须补充一点,我对 Python 尤其是 Ray 还很陌生。

代码是:

    @ray.remote
    def calculate_stuff(sequence): # computationally intensive function calling on external SWIG wrapped C-Code
        fc = external_function(sequence)
        return fc

    ray.init()
    result_ids = []
    
    for i in permutlist: # permutlist is large list containing large strings (300 - 1000 chars)
        result_ids.append(calculate_stuff.remote(i))
    
    allmfe = ray.get(result_ids)

这段代码运行了好几个小时,一个calculate_stuff循环需要大约1s。

我使用 tmux 运行脚本,当我离开会话并使用 mpstat -P ALL 检查 cpu 使用率 输出是:

09:37:22     cpu    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:37:22     all   62.16    0.00    0.26    0.00    0.00    0.01    0.00    0.00   0.00   37.56
09:37:22       0   62.28    0.00    0.26    0.00    0.00    0.05    0.00    0.00   0.00   37.41
09:37:22       1   62.22    0.00    0.25    0.00    0.00    0.02    0.00    0.00   0.00   37.51
09:37:22       2   62.24    0.00    0.26    0.00    0.00    0.01    0.00    0.00   0.00   37.48
09:37:22       3   62.27    0.00    0.26    0.00    0.00    0.01    0.00    0.00   0.00   37.46
09:37:22       4   62.37    0.00    0.29    0.00    0.00    0.01    0.00    0.00   0.00   37.33
09:37:22       5   62.23    0.00    0.28    0.00    0.00    0.01    0.00    0.00   0.00   37.48
09:37:22       6   62.24    0.00    0.27    0.00    0.00    0.01    0.00    0.00   0.00   37.48

对于所有 64 个内核,这看起来都一样。

我现在的问题:为什么我的 cpu 使用率只有 2/3,而在空闲时浪费了 1/3?

任何可以帮助我节省时间和金钱的人都非常受欢迎。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)