Dask -如何将任务分配给特定的CPU



我正在使用Dask来处理研究批,这相当繁重(从几分钟到几个小时)。任务之间没有交流,它们只产生副作用。我使用的机器已经虚拟化了它下面的资源(大约30个cpu),所以我只运行LocalCluster。是否有办法为任务分配特定的CPU ?文档中只有gpu和内存的例子。

我已经尝试用类似的方式分配CPU,但是任务甚至不会开始处理。

client.submit(process, d, resources={'CPU': 1}) for d in data]

指定

时任务未启动的可能原因
client.submit(process, d, resources={'CPU': 1}) for d in data]

表示集群被启动时没有指定每个worker都拥有该资源(这必须在worker启动时完成)。下面是确保worker拥有该资源的方法:

from dask.distributed import Client, LocalCluster
cluster = LocalCluster(resources={'CPU': 1})
client = Client(cluster)

对于细粒度控制,可以将任务分配给特定的工作人员。首先,使用

获取每个worker的地址
list_workers = list(client.scheduler_info()['workers'])

然后指定哪个工人可以完成任务:

# submit for completion only by the first worker in the list
results_specific_worker = [client.submit(process, d, workers=list_workers[0]) for d in data]
# submit for completion by the first two workers
results_specific_workers = [client.submit(process, d, workers=list_workers[0:2]) for d in data]

我认为这最好通过限制工人的数量(cluster.scale(3))和设置他们的过程良好度

来实现。CPU分时实际上是由操作系统管理的

最新更新