我有一个任务,我需要在许多不同的熊猫数据帧上运行相同的函数。我将所有数据帧加载到一个列表中,然后使用 multiprocessing
模块将其传递给Pool.map
。函数代码本身已尽可能矢量化,包含一些 if/else 子句,没有矩阵运算。
我目前正在使用 10 核至强,并希望加快速度,理想情况下是从 Pool(10)
传递到 Pool(xxx)
.我看到两种可能性:
-
图形处理。从我所读到的内容来看,我不确定我是否可以实现我想要的,并且在任何情况下都需要大量的代码修改。
-
至强披。我知道它正在停产,但据说代码改编更容易,如果真的是这样,我很乐意得到一个。
我应该专注于哪条路?还有其他选择吗?
软件:Ubuntu 18.04,Python 3.7。硬件:X99芯片组,10核至强(无HT(
花了一段时间,但在将其全部更改为 numpy 并实现更多矢量化后,我设法将速度提高了 20 倍以上 - 所以谢谢保罗。max9111 也谢谢,我会看看 numba。
您可以信赖新的英特尔 2066 平台或至强。使用最新的AVX512,他们大大加快了numpy处理速度(numpy是熊猫的基础(。检查:https://software.intel.com/en-us/articles/the-inside-scoop-on-how-we-accelerated-numpy-umath-functions
首先,尝试切换到基于 numpy 的计算(即使是序列上的简单 .values(,它也可以将处理速度提高到 10 倍
您也可以尝试获取 2 个 CPU 主板并获得更多的并行化进行计算。
在大多数情况下,瓶颈不是数据处理,而是 IO 操作 - 从驱动器读取到内存。这也将是使用 GPU 的问题。