Python 如何利用GPU将大型dask阵列(numpy.ndarray)写入Zarr文件?
我正在尝试使用dask将一个大型dask数组(46 GB,124--370 MB块)写入一个zarr文件。如果我的dask数组名为Python 如何利用GPU将大型dask阵列(numpy.ndarray)写入Zarr文件?,python,python-3.x,dask,cupy,zarr,Python,Python 3.x,Dask,Cupy,Zarr,我正在尝试使用dask将一个大型dask数组(46 GB,124--370 MB块)写入一个zarr文件。如果我的dask数组名为dask_data,那么一个简单的dask_data.to_zarr(“my_zarr.zarr”)就可以了。但据我所知,这是一个同步的、CPU受限的进程 我想做的是使用并行处理分配给Quadro GV100 GPU的大部分工作。我试图通过dask\u data\u cupy=dask\u data.map\u块(cupy.asarray)将numpy.ndarray
dask_data
,那么一个简单的dask_data.to_zarr(“my_zarr.zarr”)
就可以了。但据我所知,这是一个同步的、CPU受限的进程
我想做的是使用并行处理分配给Quadro GV100 GPU的大部分工作。我试图通过dask\u data\u cupy=dask\u data.map\u块(cupy.asarray)
将numpy.ndarray转换为cupy.ndarray,并将其写入一个zarr文件,但我收到:值错误:object\uu数组\uuuuuuu方法不生成数组(坦白说,我也没有看到性能提升)。
如何使用GPU并行地将dask数组写入zarr文件
谢谢 我认为在调用
到\u zarr
之前,您需要添加dask\u data.map\u块(cupy.asnumpy)
CuPy试图确保用户打算进行设备到主机的传输(因为这些传输可能很昂贵)。因此,在CuPy数组上调用
numpy.asarray
时(正如在本次编写过程中所发生的那样)会故意引发问题。我认为在调用到\u zarr
之前,您需要添加dask\u data.map\u块(CuPy.asnumpy)
CuPy试图确保用户打算进行设备到主机的传输(因为这些传输可能很昂贵)。因此,在CuPy数组上调用numpy.asarray
时,会故意引发此问题(在写入过程中会发生这种情况)
但据我所知,这是一个同步的、CPU受限的进程
这可能不是真的,您的瓶颈可能是存储设备。在任何情况下,每个块都会写入一个单独的文件,并在线程和/或进程之间并行(取决于您的设置)。这就是zarr设计的全部要点,即应用程序可以独立地与每个块交互
如果选择使用各种压缩编码,可能会受到CPU的限制;然而,这些并不一定适合GPU操作
简而言之,除非您的数据已经在GPU上生成,否则如果在写入文件之前将其传输到GPU进行处理是值得的,我会感到惊讶。如果有一个直接读/写cupy数组到zarr的函数,并且你也在GPU上处理,那就不同了——但我不相信有
但据我所知,这是一个同步的、CPU受限的进程
这可能不是真的,您的瓶颈可能是存储设备。在任何情况下,每个块都会写入一个单独的文件,并在线程和/或进程之间并行(取决于您的设置)。这就是zarr设计的全部要点,即应用程序可以独立地与每个块交互
如果选择使用各种压缩编码,可能会受到CPU的限制;然而,这些并不一定适合GPU操作
简而言之,除非您的数据已经在GPU上生成,否则如果在写入文件之前将其传输到GPU进行处理是值得的,我会感到惊讶。如果有一个直接读/写cupy数组到zarr的函数,并且你也在GPU上处理,那就不同了——但我不相信有