我正在尝试使用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上进行处理,那将有所不同-但我不相信有。

10-04 13:20