【问题标题】:strategies for avoiding io with dask opportunistic caching (or other)使用 dask 机会性缓存(或其他)避免 io 的策略
【发布时间】:2019-11-17 16:25:38
【问题描述】:

我有一个关于在索引到一个 dask 数组时减少文件 io 的问题,该数组由一个加载了 dask.delayed 的 3D tiffs 文件夹构建,几乎完全是 as described in the docs,并且类似于 dask-image 方法:我的 4D (tzyx) dask.array<stack, shape=(600, 65, 512, 512), dtype=uint16, chunksize=(1, 65, 512, 512), chunktype=numpy.ndarray> 是由一堆读取 3D tiff 堆栈的 dask.delayed(skimage.io.imread) 调用构成的。

使用机会缓存,我可以最小化 完整 3D 视图上的 io 事件(即多次调用 stack[0].compute() 只会读取一次 tiff 文件),但如果我以不同的顺序依次索引到该堆栈平面,就像更改 z 位置时所做的那样(例如 stack[0,1].compute() ... stack[0,2].compute() ... ),然后 z 堆栈的每个“平面”都会产生新的读取。我想知道最好的解决方案是否可能是创建一个不同的dask.delayed 图像阅读器函数,它有自己的简单缓存机制来重新传递最近读取的文件(例如,使用cachey.memoize),或者我是否通常可以更好地使用 dask.array API 来避免多次读取。

(无论如何,我的应用程序正在使用napari 图像查看器)。

感谢您的任何建议!

【问题讨论】:

    标签: dask


    【解决方案1】:

    我怀疑这是 Dask 的优化策略阻碍的一个案例。我鼓励您在每种情况下都尝试.compute(optimize_graph=False),看看是否会有所不同。

    【讨论】:

    • 会尝试让您知道。感谢您的快速回复!
    • 使用stack[0].compute(optimize_graph=False),它最终会读取 dask 数组中的每个文件...
    • 啊,确实,我们不剔除东西。那么,我没有快速的解决方案给你。您可能需要更深入地研究并自己弄清楚发生了什么。
    • 没问题!我很感激你的时间。如果我找到一个好的解决方案,我会在这里更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多