【问题标题】:Tasks taking much longer then expected to complete任务花费的时间比预期完成的时间长
【发布时间】:2017-04-05 19:23:12
【问题描述】:

我注意到,使用两个 worker 进行分布式运行时,每个 worker 只使用一个核心。

以下面的脚本为例,获取times2 需要大约20 秒,获取times 需要5 秒。

这意味着每个工作人员使用单个内核执行 4 个任务,而不是使用所有 4 个内核并行执行。我还确认使用资源监视器,每个工作人员只使用一个核心。

为什么分布式只使用一个核心作为worker而不是并行执行任务?

【问题讨论】:

    标签: python


    【解决方案1】:

    因为您的函数是纯 Python,所以它可能受 GIL 约束。我建议更改您的工作人员,以便他们使用多个进程而不是多个线程。例如,如果您运行 dask-worker 进程的机器有四个内核,那么您可以按如下方式启动 dask-worker 进程:

    dask-worker scheduler-address:8786 --nprocs 4 --nthreads 1
    

    【讨论】:

    • 确认,如果在 4 核 8 线程 cpu 上执行,启动命令是:dask-worker scheduler-address:8786 --nprocs 4 --nthreads 8
    • 我们一般每个核心启动一个线程。 --nthreads 应该改名为--threads-per-process
    • 这是否意味着 --memory-limit 设置也是每个内核的?
    • 目前 --memory-limit 的值在所有进程之间分割
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多