结合并行处理和 dask 阵列来处理多个图像堆栈

Combination of parallel processing and dask arrays to process multiple image stacks

我有一个包含 n h5 文件的目录,每个文件都有 m 个要过滤的图像堆栈。对于每张图像,我将使用 dask 并行阵列 运行 过滤(高斯和拉普拉斯)以加快处理速度 (Ref to Dask)。我将通过 scikit-image 中的 apply_parallel() 函数使用 dask 数组。
我将 运行 使用 20 cpus 在小型服务器上处理。

我想获得有关使用哪种并行策略更有意义的建议:

1) h5文件的顺序处理和dask处理的所有cpu
2) 使用 x 个核心并行处理 h5 文件,并使用剩余的 20-x 来进行粗略处理。
3)分配资源并并行处理h5文件,每个h5文件中的图像和dask的剩余资源。

感谢您的帮助!

使用 make 进行并行化。

使用 make -j20 你可以告诉 make 到 运行 20 个并行进程。

通过使用多个进程,您可以避免 "global interpreter lock" 的成本。对于independent任务,使用多个独立进程效率更高(benchmark如有疑问)。 Make 非常适合处理整个文件夹,您需要对每个文件应用相同的命令 - 它传统上用于编译源代码,但它可用于 运行 任意命令。

最好以最简单的方式进行并行化。如果您有多个文件并且只想对每个文件进行 运行 相同的计算,那么这几乎可以肯定是最简单的方法。如果这会使您的计算资源饱和,那么您可以停在这里,而无需深入研究更复杂的方法。

如果这确实是您的情况,那么您可以使用 daskmakeconcurrent.futures 或任何其他库进行并行化。

如果还有其他问题,例如尝试并行化操作本身或确保您不会 运行 内存不足,那么您将被迫进入更复杂的系统,如 dask,但这可能不是案例.