我正在尝试使用dask将大型dask数组(46 GB的124-370 MB块)写入一个zarr文件中。如果我的dask数组被命名为dask_data
,那么一个简单的dask_data.to_zarr("my_zarr.zarr")
就可以了。但是据我了解,这是一个同步的,受CPU限制的过程。
我想做的是将并行处理与分配给Quadro GV100 GPU的大部分工作结合使用。我试图通过dask_data_cupy = dask_data.map_blocks(cupy.asarray)
将numpy.ndarray转换为cupy.ndarray并将其写到一个zarr文件中,但是我收到了:ValueError: object __array__ method not producing an array
(坦率地说,我也看不到性能提升)。
如何使用GPU并行将dask数组写入zarr文件?
谢谢!
最佳答案
但是据我了解,这是一个同步的,受CPU限制的过程。
这可能不是事实,您的瓶颈可能是存储设备。无论如何,每个块都将写入一个单独的文件中,并跨线程和/或进程并行写入(取决于您的设置)。这就是zarr设计的全部要点,即应用程序可以独立地与每个块进行交互。
如果选择使用各种压缩编码,则可能会受到CPU的限制。但是,这些不一定适合GPU操作。
简而言之,除非您的数据已经在GPU上生成,否则如果将它写入文件之前将其传输到GPU进行处理,我会感到惊讶。如果有一个功能可以直接读取/写入cupy数组以达到惊人的效果,并且您也在GPU上进行处理,那将有所不同-但我不相信有。