Можно ли использовать Datalab с многопроцессорной обработкой для масштабирования преобразований Pandas?

Я пытаюсь использовать Google Cloud Datalab для масштабирования преобразования данных в Pandas.

На моей машине все отлично работает с небольшими файлами (сохраняя первые 100000 строк моего файла), но работа с полным входным CSV-файлом 8G приводила к ошибке памяти.

Я думал, что виртуальная машина Datalab поможет мне. Сначала я попытался использовать виртуальную машину с Highmem, доведя до 120 ГБ памяти. Там я продолжаю получать сообщение об ошибке: ядро ​​​​похоже, умерло. Он перезапустится автоматически. Я нашел кое-что здесь: https://serverfault.com/questions/900052/datalab-crashing-несмотря на высокую память-и-процессор Но я не использую TensorFlow, так что это не сильно помогло.

Поэтому я попробовал другой подход, обработку фрагментов и распараллеливание на большем количестве ядер. Он хорошо работает на моей машине (4 ядра, 12 Гб оперативной памяти), но требует многочасовых вычислений.

Поэтому я хотел использовать виртуальную машину Datalab с 32 ядрами для ускорения работы, но тут через 5 часов первые потоки так и не завершились, когда на моей локальной машине уже завершено 10.

Так очень просто:

Можно ли использовать Datalab как способ масштабирования преобразований Pandas? Почему я получаю худшие результаты с теоретически намного лучшей виртуальной машиной, чем моя локальная машина?

Некоторый код:

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.

Спасибо за любой совет, альтернативу или лучший практический совет, который вы могли бы мне дать!

1
0
120
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, что GCP Datalab не поддерживает многопоточность:

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

Дополнительную информацию вы можете найти здесь

Год спустя я узнал несколько полезных передовых практик:

  • Используйте Google AI Platform, выберите для создания виртуальной машины с необходимым количеством процессоров.
  • Используйте Даск для многопоточности
  • С Pandas есть возможность распараллелить .apply() с пандараллель

Другие вопросы по теме