当调用另一个库来 dask 时,例如 scikit 图像对比度拉伸,我意识到 dask 正在为每个块创建一个结果,存储在内存中或单独溢出到磁盘。然后它尝试合并所有结果。如果您在集群或单台计算机上并且阵列的数据集很小,那很好,一切都得到了相当的控制。当您使用比 RAM 或磁盘大得多的数据集时,问题就会开始出现。有没有办法缓解这种情况或使用 zarr 文件格式来保存更新值?可能是太天真了。购买更多内存条的任何其他想法都会有所帮助。
编辑
我正在查看有关 dask 的文档以及有关 dask 块大小的建议,大约是 100MB。我最终从这个数量显着减少到 30-70MB,具体取决于文件大小。然后我运行了一个对比度拉伸(不是来自库,而是使用 numpy unfunc,我没有任何问题!事实上,我使用了计算完成的方式。因为我从一个 uint8 3dim 数组开始,当乘以对比度时拉伸我不可避免地将数组块增加到float64数组。这会占用大量内存和计算量。所以我所做的是将da.array视为np.asarray(float64)但仅在乘以浮点数之前. 然后返回到 uint8 完成计算。对于 20GB 的文件,拉伸时间已减少到不到 5 分钟。所以我认为这是一个积极的步骤。
我正在构建的图像处理管道将不可避免地用于大约 250-300GB 的合并数据集(绝对超出我笔记本电脑的限制)。我也没有时间掌握云或云中的并行处理。那是几个月后的事情。现在它试图通过这个分析。