如何选择python并行化库?

计算科学 Python 并行计算
2021-12-09 22:11:29

我想使用 python 预处理一个相对较大的数据集。我实现了一些 Dask 并行化,并被时间缩短惊呆了。我认为我可以使用其他库或框架:多处理、Numba、joblib,甚至可能是 PyOpenCL(我没有 CUDA GPU)……

这些库是彼此的替代品,还是可以通过将它们全部混合来获得显着的改进?是否有关于何时使用其中一种的通用准则?

我已经读过混合 Dask 和 Numba 比使用它们中的任何一个都更有效。

1个回答

Dask 跨进程和跨节点调度任务,因此适合在单台计算机、超级计算机或云上使用。Dask 还提供了专门的数据结构来帮助实现这一点。

多处理仅在一台计算机内管理任务。对于某些任务,它可能比 Dask 更易于使用,但灵活性和可扩展性较差。如果你使用 Dask,你可能不想要多处理。两者会互相干扰。

Numba 是 Python 的即时编译器,可以显着加速代码。如果您的大部分工作都在 Numpy 中,那么这不太可能提供太多优势,因为 Numpy 已经高度优化。如果您使用 Python for 循环或其他高级解释语言功能来完成大部分计算,那么 Numba 非常适合您。

joblib 与 Dask 有很多重叠,但如果您使用大量递归,您可能会受益于它的记忆功能。

PyOpenCL 将数组计算卸载到 GPU。这可能可以与 Dask 和 Numba 结合使用;但是,您可能每台机器只有一个 GPU,因此不分青红皂白地使用 PyOpenCL 会为该 GPU 造成争用,并且本质上将您限制为每个节点只有几个进程。