配置工作人员如何在多个任务之间切换?

时间:2018-10-02 23:20:53

标签: dask dask-distributed

我们从dask分布式调度程序中看到了一些奇怪的行为。

我们有200个工作人员,分配了1200个基本相同的任务,这些任务是很长的任务,它们在受CPU和IO约束之间交替。每个工作人员被分配4-7个任务。

我们看到的行为是,每当IO操作开始时,每个工作人员将在花费时间执行每个任务之间交替。这似乎正在导致每个工作者上存储大量内存,我们怀疑这会导致向硬盘驱动器的转储,从而大大降低了运行速度。

在测试中,我们发现(使用与基准测试相同的任务),如果我们为每个工作人员分配〜2个任务,则不会降低速度。但是,每个工人大约要执行5项任务,因此速度会大大降低。事实是,工作人员从一个任务切换到另一个任务的时间实际上很少。

我们如何使每个工作人员按顺序完成任务?我们希望工作人员一次完成一项任务,以避免大量的RAM使用。

感觉就像我们可以编写一个包装器来一次将n * 2个任务(其中n =工人数)馈送给调度程序,但是肯定有一种方法可以配置此行为吗?

早期版本

0.19.1

Kubectl版本

Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.6", GitTreeState:"clean", BuildDate:"2018-03-21T15:21:50Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.2", GitCommit:"5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState:"clean", BuildDate:"2018-01-18T09:42:01Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

client.scheduler_info()输出

{'type': 'Scheduler',
 'id': 'Scheduler-4b3d7cac-d536-4f66-b0bd-22d9ae19b260',
 'address': 'tcp://192.168.152.162:8786',
 'services': {'bokeh': 8787},
 'workers': {'tcp://192.168.148.132:32860': {'type': 'Worker',
   'id': 'tcp://192.168.148.132:32860',
   'host': '192.168.148.132',
   'resources': {},
   'local_directory': '/dask-worker-space/worker-7nzwyqd6',
   'name': 'tcp://192.168.148.132:32860',
   'ncores': 1,
   'memory_limit': 3500000000,
   'last_seen': 1538522342.4690368,
   'services': {'nanny': 44983},
   'metrics': {'cpu': 2.0,
    'memory': 42975232,
    'time': 1538522342.0465984,
    'read_bytes': 0.0,
    'write_bytes': 0.0,
    'num_fds': 25,
    'executing': 0,
    'in_memory': 0,
    'ready': 0,
    'in_flight': 0}},
  'tcp://192.168.148.147:35760': {'type': 'Worker',
   'id': 'tcp://192.168.148.147:35760',
   'host': '192.168.148.147',
   'resources': {},
   'local_directory': '/dask-worker-space/worker-yuh3l9uh',
   'name': 'tcp://192.168.148.147:35760',
   'ncores': 1,
   'memory_limit': 3500000000,
   'last_seen': 1538522342.4663892,
   'services': {'nanny': 38760},
   'metrics': {'cpu': 2.0,
    'memory': 42905600,
    'time': 1538522342.0460682,
    'read_bytes': 0.0,
    'write_bytes': 0.0,
    'num_fds': 25,
    'executing': 0,
    'in_memory': 0,
    'ready': 0,
    'in_flight': 0}},
  (then there's a bunch more workers)

让我知道我是否可以提供任何特定的配置信息。

1 个答案:

答案 0 :(得分:1)

我只给每个工人一个线程

dask-worker  ... --nthreads 1

您可能希望查看dask-worker的帮助字符串

dask-worker --help
相关问题