是否可以将 Datalab 与多处理一起用作扩展 Pandas 转换的一种方式?

Is it possible to use Datalab with multiprocessing as a way to scale Pandas transformations?

我尝试使用 Google Cloud Datalab 在 Pandas 中扩展数据转换。

在我的机器上,小文件一切正常(保留我文件的前 100000 行),但使用完整的 8G 输入 csv 文件导致内存错误。

我认为 Datalab 虚拟机可以帮助我。我首先尝试使用带有 Highmem 的 VM,最高可达 120 G 或内存。 在那里,我不断收到错误消息:内核似乎已经死了。它会自动重启。 我在这里找到了一些东西: https://serverfault.com/questions/900052/datalab-crashing-despite-high-memory-and-cpu 但我没有使用 TensorFlow,所以它没有太大帮助。

所以我尝试了一种不同的方法,块处理和在更多内核上并行化。它在我的机器(4 核,12 G 内存)上运行良好,但仍然需要数小时的计算。

所以我想使用具有 32 个内核的 D​​atalab VM 来加快速度,但是在 5 小时后,第一个线程仍然没有完成,而在我的本地机器上已经完成了 10 个。

非常简单:

是否可以使用 Datalab 来扩展 Pandas 转换? 为什么我使用理论上比本地计算机好得多的 VM 时会得到最坏的结果?

一些代码:

import pandas as pd
import numpy as np
from OOS_Case.create_features_v2 import process
from multiprocessing.dummy import Pool as ThreadPool 



df_pb = pd.read_csv('---.csv')
list_df = []
for i in range(-) :
    df = df_pb.loc[---]
    list_df.append(df)



pool = ThreadPool(4) 
pool.map(process, list_df)

我的流程函数中的所有操作都是纯 Pandas 和 Numpy 操作

感谢您给我的任何提示、替代或最佳实践建议!

GCP Datalab 好像还没有支持多线程:

Each kernel is single threaded. Unless you are running multiple notebooks at the same time, multiple cores may not provide significant benefit.

您可以找到更多信息here

一年后,我学到了一些有用的最佳实践:

  • 使用 Google AI Platform,select 构建具有所需 CPU 数量的 VM
  • 对多线程使用Dask
  • 使用 Pandas,可以将 .apply() 与 pandarallel
  • 并行化