5

関数 apply_ufuncのxarray ドキュメントには、次のように書かれています。

dask: ‘forbidden’, ‘allowed’ or ‘parallelized’, optional

    How to handle applying to objects containing lazy data in the form of dask arrays:

    ‘forbidden’ (default): raise an error if a dask array is encountered.
    ‘allowed’: pass dask arrays directly on to func.
    ‘parallelized’: automatically parallelize func if any of the inputs are a dask array. 
                    If used, the output_dtypes argument must also be provided. 
                    Multiple output arguments are not yet supported.

並列コンピューティングに関するドキュメントのページには、次の注意事項があります。

dask によって既にラップされている NumPy 関数の大部分については、既存の xarray メソッドを使用するか、dask='allowed' を指定した apply_ufunc() を使用して、既存の dask.array 関数を使用することをお勧めします。dask='parallelized' によって提供される一般的な高速化とは異なり、Dask は多くの場合、問題の特殊な構造を利用するより効率的な実装を持つことができます。

ただし、これら 2 つのオプションの違いが何であるかについては、まだ明確ではありません。allowedメモリ使用量を下げるために、まだチャンクを 1 つずつ操作しますか? 適用された ufunc がdaskallowed操作のみを使用する場合でも並列化しますか? ufunc の出力 (つまり、引数, )parallelizedについてより多くの情報を提供する必要があるのはなぜですか?output_dtypesoutput_sizesallowed

4

1 に答える 1

4

dask='allowed'は、dask 配列の処理方法を既に知っている関数を適用していることを意味します。たとえば、dask.array操作に関して記述された関数です。ほとんどの場合、実際には、関数がチャンクを 1 つずつ操作してメモリ使用量を減らし、計算を並列に適用することを意味します。

dask='parallelized'のような低レベルの dask.array 関数を使用して、提供された関数が dask 配列に作用できるようにする独自のラッパーを作成するため、ユーザーからのより多くの情報が必要atopです。を使用dask='parallelized'すると、NumPy 配列の処理方法のみを知っている関数を提供でき、xarray.apply_ufuncdask 配列も処理するように拡張できます。

于 2018-08-14T00:37:36.080 に答える