是否可以将 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 个内核的 Datalab 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
并行化
我尝试使用 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 个内核的 Datalab 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 并行化