从 pandas 转移到 dask 以利用所有本地 cpu 核心
move from pandas to dask to utilize all local cpu cores
最近我偶然发现http://dask.pydata.org/en/latest/
由于我有一些 pandas 代码仅在单个内核上运行,所以我想知道如何利用我的其他 CPU 内核。
dask 是否可以很好地使用所有(本地)CPU 核心?如果是,它与 pandas 的兼容性如何?
我可以将多个 CPU 与 pandas 一起使用吗?到目前为止,我阅读了有关发布 GIL 的信息,但一切似乎都相当复杂。
Would dask work well to use all (local) CPU cores?
是的。
how compatible is it to pandas?
相当兼容。不是 100%。如果需要,您可以将 Pandas 和 NumPy 甚至纯粹的 Python 东西与 Dask 混合。
Could I use multiple CPUs with pandas?
你可以。最简单的方法是使用 multiprocessing
并将数据分开——如果可以高效地执行,则让每个作业独立地从磁盘读取和写入磁盘。一个明显更困难的方法是使用 mpi4py
,如果你有一个多计算机环境和一个专业的管理员,这是最有用的。
Dask 在其数据帧中实现了 pandas API 的 large fraction。这些操作在整个数据帧的块上调用完全相同的 pandas 函数,因此您应该期望它们完全兼容。
结果计算可以是 运行 在任何可用的 schedulers 中,允许您选择是 运行 低开销线程还是更复杂的线程。分布式调度程序使您可以完全控制线程和进程之间的拆分,具有更多功能,并且可以在以后跨集群扩展,因此越来越成为首选,即使对于简单的单机任务也是如此。
许多 pandas 操作确实释放了 GIL,因此可以有效地与线程一起工作。此外,许多 pandas 操作可以很容易地分解为并行块 - 但有些不能并且会变慢(例如需要随机播放的连接),或者根本不起作用(例如多索引)。找出答案的最好方法是试一试!
最近我偶然发现http://dask.pydata.org/en/latest/ 由于我有一些 pandas 代码仅在单个内核上运行,所以我想知道如何利用我的其他 CPU 内核。 dask 是否可以很好地使用所有(本地)CPU 核心?如果是,它与 pandas 的兼容性如何?
我可以将多个 CPU 与 pandas 一起使用吗?到目前为止,我阅读了有关发布 GIL 的信息,但一切似乎都相当复杂。
Would dask work well to use all (local) CPU cores?
是的。
how compatible is it to pandas?
相当兼容。不是 100%。如果需要,您可以将 Pandas 和 NumPy 甚至纯粹的 Python 东西与 Dask 混合。
Could I use multiple CPUs with pandas?
你可以。最简单的方法是使用 multiprocessing
并将数据分开——如果可以高效地执行,则让每个作业独立地从磁盘读取和写入磁盘。一个明显更困难的方法是使用 mpi4py
,如果你有一个多计算机环境和一个专业的管理员,这是最有用的。
Dask 在其数据帧中实现了 pandas API 的 large fraction。这些操作在整个数据帧的块上调用完全相同的 pandas 函数,因此您应该期望它们完全兼容。
结果计算可以是 运行 在任何可用的 schedulers 中,允许您选择是 运行 低开销线程还是更复杂的线程。分布式调度程序使您可以完全控制线程和进程之间的拆分,具有更多功能,并且可以在以后跨集群扩展,因此越来越成为首选,即使对于简单的单机任务也是如此。
许多 pandas 操作确实释放了 GIL,因此可以有效地与线程一起工作。此外,许多 pandas 操作可以很容易地分解为并行块 - 但有些不能并且会变慢(例如需要随机播放的连接),或者根本不起作用(例如多索引)。找出答案的最好方法是试一试!