我正在使用Dask进行实验,这有点复杂,因此我无法真正提供代码段。本实验使用仅具有一个线程('single-thread'
)的dask线程调度程序,从单个hdf5
文件中加载大小约为5GB的数组,并使用dask array的npy
方法将其写回到50 to_npy_stack
文件中。我分两部分进行操作,一个加载2.5GB的缓冲区,第二个加载2.5GB的缓冲区。读写是在HDD上完成的,因此我选择使用一个线程。正如我们在下图所看到的,模糊的诊断程序告诉我,黄色的写入时间(在一个numpy文件中每次写入一个任务)比读取部分(两个蓝色的任务)要长得多。
有人知道为什么阅读时间比书写时间快得多吗?从底部的图表可以看出,我正在缓存上加载2.5GB,因此hdf5文件的解压缩似乎没有延迟。 to_numpy_stack
功能是否可能没有得到很好的优化?
PS:是的,我的诊断失败在中间图上失败,我不知道为什么这取决于我将其放在代码中的位置。但是无论如何...
编辑:这似乎是numpy文件的通常写入时间,所以也许即使没有压缩,使用hdf5也会大大提高读取速度?
您可能正在对numpy文件(例如gzip)使用慢速压缩。我建议对代码进行性能分析,以便您了解导致速度下降的原因。
因为使用单线程调度程序,所以任何传统的Python分析工具(例如cProfile)都可以正常工作。