Dask - 如何将任务分配给特定的 CPU
Dask - how to assign task to the specific CPU
我正在使用 Dask 处理研究批次,这些批次非常繁重(从几分钟到几小时不等)。任务之间没有通信,它们只产生副结果。我使用的机器已经虚拟化了它下面的资源(~ 30 CPUs),所以我只是 运行 LocalCluster
。有什么方法可以将特定的 CPU 分配给任务吗?在 docs 中只有 gpu 和内存的例子。
我试过以类似的方式分配 CPU,但任务甚至不会开始处理。
client.submit(process, d, resources={'CPU': 1}) for d in data]
我怀疑最好通过限制工人的数量来实现(cluster.scale(3)
) and setting their process niceness
CPU分时真的是由操作系统管理的
您指定时任务没有开始的可能原因
client.submit(process, d, resources={'CPU': 1}) for d in data]
集群是在没有指定每个工作人员都拥有该资源的情况下启动的(这必须在工作人员启动时完成)。以下是确保工作人员拥有该资源的方法:
from dask.distributed import Client, LocalCluster
cluster = LocalCluster(resources={'CPU': 1})
client = Client(cluster)
为了更细粒度的控制,可以将任务分配给特定的工作人员。首先,获取每个工人的地址
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]
我正在使用 Dask 处理研究批次,这些批次非常繁重(从几分钟到几小时不等)。任务之间没有通信,它们只产生副结果。我使用的机器已经虚拟化了它下面的资源(~ 30 CPUs),所以我只是 运行 LocalCluster
。有什么方法可以将特定的 CPU 分配给任务吗?在 docs 中只有 gpu 和内存的例子。
我试过以类似的方式分配 CPU,但任务甚至不会开始处理。
client.submit(process, d, resources={'CPU': 1}) for d in data]
我怀疑最好通过限制工人的数量来实现(cluster.scale(3)
) and setting their process niceness
CPU分时真的是由操作系统管理的
您指定时任务没有开始的可能原因
client.submit(process, d, resources={'CPU': 1}) for d in data]
集群是在没有指定每个工作人员都拥有该资源的情况下启动的(这必须在工作人员启动时完成)。以下是确保工作人员拥有该资源的方法:
from dask.distributed import Client, LocalCluster
cluster = LocalCluster(resources={'CPU': 1})
client = Client(cluster)
为了更细粒度的控制,可以将任务分配给特定的工作人员。首先,获取每个工人的地址
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]