当调用dask的另一个库时,例如scikit图像对比度拉伸,我意识到dask正在为每个块创建一个结果,分别存储在内存中或溢出到磁盘。然后,它尝试合并所有结果。如果您在集群或单台计算机上,并且阵列的数据集很小,那么这是很好的,一切都是相当可控的。当您使用比RAM或磁盘大得多的数据集时,问题就会开始发生。有没有办法缓解这种情况,或者使用zarr文件格式来保存更新的值呢?也许这太过天马行空了。任何其他想法吧买更多的公羊将是有帮助的。
编辑
我看了关于dask的文档和关于dask的块大小的建议,大约是100MB。根据文件大小的不同,我最终将这个大小显著减少到了30-70MB。然后我运行了一个对比伸展(不是从库中,而是使用numpy unfunc,我没有任何问题!)事实上,我玩弄了计算的方式。由于我从uint8 3dim数组开始,当乘以对比度拉伸的比率时,我不可避免地将数组块增加到float64数组。这占用了大量的内存和计算。所以我一直在做的是把da.array当作np.asarray(float64),但只是在乘以一个浮点数之前。然后返回到uint8完成计算。对于一个20 to的文件,扩展时间已减少到不到5分钟。所以我认为这是积极的一步。只是意味着图像处理没有库,我会看看rechunker。
我正在构建的图像处理流水线将不可避免地用于大约250-300 my的合并数据集(绝对超出了我的笔记本电脑的限制)。我也没有时间去掌握云或云中的parralell处理。这是几个月后的事了。现在,它正在努力完成这一分析。
发布于 2020-07-28 23:53:28
是的,你可以做你正在谈论的那种事情。我鼓励您查看rechunker项目,该项目专门针对更改zarr存储中的数据布局,但展示了如何保存临时中介体,以减轻内存和通信问题。
https://stackoverflow.com/questions/63048743
复制相似问题