Dask - 独家资源访问?
Dask - exclusive resource access?
某些资源(如 GPU 或某些数据存储)最好单独使用,即一次一个客户端。
Dask 支持按名称 1(别名)选择工作人员子集,因此我可以将 GPU 工作限制为 GPU 工作人员。
在这种情况下,我将如何锁定资源? IE。给定的工作人员一次只能 运行 一个任务,即使两个不同的客户提交工作也是如此。
今天处理这个问题的最佳方法是为每个 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
这在几个方面不太理想:
- 我们将不必要地跨进程边界移动数据以到达拥有 GPU 的特殊进程。追踪 dask/distributed #400 应该最终解决这个问题。
- 您必须自己维护一个 gpu-workers 列表。跟踪 dask/distributed #505 应该可以解决此问题
某些资源(如 GPU 或某些数据存储)最好单独使用,即一次一个客户端。
Dask 支持按名称 1(别名)选择工作人员子集,因此我可以将 GPU 工作限制为 GPU 工作人员。
在这种情况下,我将如何锁定资源? IE。给定的工作人员一次只能 运行 一个任务,即使两个不同的客户提交工作也是如此。
今天处理这个问题的最佳方法是为每个 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
这在几个方面不太理想:
- 我们将不必要地跨进程边界移动数据以到达拥有 GPU 的特殊进程。追踪 dask/distributed #400 应该最终解决这个问题。
- 您必须自己维护一个 gpu-workers 列表。跟踪 dask/distributed #505 应该可以解决此问题