2017-07-12 6 views
3

私は非常に新しいdistributed pythonライブラリを使用しています。私は4人の従業員を抱えており、各従業員に14のコア(利用可能な16の中から)を使用して並列実行を成功させ、4 * 14 = 56のタスクを並行して実行します。Dask Distributed - 作業者ごとに1つのタスクを実行し、その作業をすべてのコアで実行して作業者に提供する方法?

しかし、一人の作業者だけで一度に1つの作業をしたい場合は、どのように進めるか。このようにして、14のコアを同時に使用する1つのタスクがワーカーに期待されます。

答えて

2

Daskワーカーは、タスクの起動に使用する単一のスレッドプールを維持します。各タスクは常にこのプールから1つのスレッドを消費します。このプールから多くのスレッドを取得するようにタスクに指示することはできません。

しかし、daskワーカー内で並行性を制御および制限する他の方法があります。あなたの場合、worker resourcesを定義することを検討するかもしれません。これにより、多くの大きなタスクが同じワーカーで同時に実行されるのを防ぐことができます。

以下の例では、各ワーカーが1つのFooリソースを持ち、各タスクが実行するには1つずつFooが必要であると定義しています。これにより、2つのタスクが同じワーカーで同時に実行されなくなります。

dask-worker scheduler-address:8786 --resources Foo=1 
dask-worker scheduler-address:8786 --resources Foo=1 

from dask.distributed import Client 
client = Client('scheduler-address:8786') 
futures = client.map(my_expensive_function, ..., resources={'Foo': 1}) 
関連する問題