2016-11-03 74 views
1

某些資源(如GPU或某些數據存儲區)最好是獨佔使用,即一次只有一個客戶端。Dask - 獨家資源訪問?

DASK支持按名稱選擇工人的子集1(別名),所以我可以限制GPU工作GPU的工人。

在這種情況下,我將如何鎖定資源?即即使兩個獨立的客戶提交工作,一個給定的工作人員也應該一次只執行一項任務。

回答

0

來處理今天這個最好的方法是創建一個線程一個單獨的工作人員爲每個GPU

[email protected]$ dask-worker scheduler:8786 
[email protected]$ dask-worker scheduler:8786 --nthreads 1 --name gpu-1 

[email protected]$ dask-worker scheduler:8786 
[email protected]$ dask-worker scheduler:8786 --nthreads 1 --name gpu-2 

[email protected]$ dask-worker scheduler:8786 
[email protected]$ 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-workers列表。軌道dask/distributed #505這應該解決這個