Dask - 独家资源访问?

时间:2016-11-03 14:05:10

标签: dask

某些资源(如GPU或某些数据存储)最好独占使用,即一次只使用一个客户端。

Dask支持按名称1(别名)选择工作人员子集,因此我可以将GPU工作限制为GPU工作人员。

在这种情况下,我将如何锁定资源?即即使两个独立的客户提交工作,一个给定的工人也应该一次只能运行一个任务。

1 个答案:

答案 0 :(得分:0)

今天处理此问题的最佳方法是为每个GPU创建一个单独线程的单独工作者

user@host1$ dask-worker scheduler:8786
user@host1$ dask-worker scheduler:8786 --nthreads 1 --name gpu-1

user@host2$ dask-worker scheduler:8786
user@host2$ dask-worker scheduler:8786 --nthreads 1 --name gpu-2

user@host3$ dask-worker scheduler:8786
user@host3$ dask-worker scheduler:8786 --nthreads 1 --name gpu-3

将一些任务提交给整个群集,并将其他任务提交给那些GPU工作者

>>> gpu_workers = ['gpu-1', 'gpu-2', 'gpu-3']

>>> client = Client('scheduler:8786')

>>> data = client.map(load, filenames)
>>> futures = client.map(process, data, workers=gpu_workers)

(有关向某些计算机提交任务的更多方法,请参阅data locality docs

这在某些方面不太理想:

  1. 我们将不必要地跨越流程边界移动数据以进入特殊的GPU拥有流程。跟踪最终解决此问题的dask/distributed #400
  2. 你必须自己维护一份gpu-worker列表。跟踪应解决此问题的dask/distributed #505