【发布时间】: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