【问题标题】:Configuring how workers switch between multiple tasks?配置工作人员如何在多个任务之间切换?
【发布时间】:2018-10-02 23:20:52
【问题描述】:

我们看到 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)

如果我可以提供任何特定的配置信息,请告诉我。

【问题讨论】:

  • 能否请您提供一个信息更丰富/更具体的标题,以便未来的读者更容易找到您的问题?

标签: dask dask-distributed


【解决方案1】:

我会给每个工人一个线程

dask-worker  ... --nthreads 1

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

dask-worker --help

【讨论】:

  • 您介意解释一下我在使用 kubectl 管理集群时如何做到这一点吗?我似乎没有任何方法可以访问 dask-worker 命令行工具。
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 2018-01-17
相关资源
最近更新 更多