我们从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)
让我知道我是否可以提供任何特定的配置信息。
答案 0 :(得分:1)
我只给每个工人一个线程
dask-worker ... --nthreads 1
您可能希望查看dask-worker的帮助字符串
dask-worker --help