web-dev-qa-db-ja.com

Daskを使用してすべてのCPUコアを使用する方法

pandas 35000行を超えるシリーズがあります。daskを使用してより効率的にしたいのですが、daskコードとpandasコードの両方を使用しています同じ時間がかかっています。最初は "ser"はpandas series and fun1およびfun2は、シリーズの個々の行でパターン一致を実行する基本的な関数です。
パンダ
ser = ser.apply(fun1).apply(fun2)

Dask
ser = dd.from_pandas(ser, npartitions = 16) ser = ser.apply(fun1).apply(fun2)

CPUのコアのステータスを確認したところ、すべてのコアが使用されているわけではありませんでした。 1つのコアのみが100%に慣れていました。

Daskを使用してシリーズコードを高速化したり、Dask操作を連続して実行しながらCPUのすべてのコアを利用したりする方法はありますか?

8
ANKIT JHA

参照 http://dask.pydata.org/en/latest/scheduler-overview.html

呼び出している関数は純粋なpythonである可能性が高いため、GILを要求します。これは、スレッド内で一度に1つのpython命令のみが実行されることを保証するロックです。この場合、並列処理を確認するには、別のプロセスで関数を実行する必要があります。これは、マルチプロセススケジューラを使用して実行できます。

ser = ser.apply(fun1).apply(fun2).compute(scheduler='processes')

または、分散スケジューラを使用します(単一のマシンで正常に動作し、実際にはステータスダッシュボードなどの次世代のメリットがいくつかあります)。最も単純なデフォルトのケースでは、クライアントを作成するだけで十分です。

client = dask.distributed.Client()

しかし、あなたは読むべきです ドキュメント

15
mdurant