Понимание использования памяти в поддельном наборе данных с помощью Parquet на ноутбуке (разделы 1 ГБ, необходимо 9 ГБ) - PullRequest
0 голосов
/ 24 апреля 2020

Я выполняю некоторый бенчмаркинг, чтобы понять, чем отличаются Даск и Модин. Я хотел бы понять, что происходит, когда я загружаю набор паркетных (случайно сгенерированных) разделов в Dask на одном 32-ГБ ноутбуке, требования к ОЗУ выше, чем я ожидал.

Я сгенерировал 100 Разделы * 1 ГБ, каждый раздел представляет собой Pandas DataFrame с 2 * float64 и 1 * bool столбцами, занимающими около 900 МБ в ОЗУ в I Python, информационные кадры сохраняются с использованием pyarrow в файлах с параметрами по умолчанию , На диске они около 800 МБ каждый.

В Dask с использованием значения по умолчанию Client() мои операции не выполняются. Моя самая простая операция - ddf.max(), которая даст максимум для каждого из a, b, c. Сбои выглядят как distributed.nanny - WARNING - Worker exceeded 95% memory budget. Restarting. Это Client имеет 4 процесса, 2 потока каждый, 8 ГБ на процесс. Если я попытаюсь Client(n_workers=2, threads_per_worker=1, memory_limit='8GB'), то это также не удастся с OOM (так что это не тот случай, когда у самого ноутбука не хватает оперативной памяти).

Если я настрою Client(n_workers=2, threads_per_worker=1, memory_limit='9GB') (т.е. добавлю + 1 ГБ), то max код работает. Операция max предположительно просто отслеживает одно максимальное значение, которое агрегируется. У меня также есть несколько более сложных случаев, но я хотел бы сначала понять базовый случай (они работают, например, с работниками 12–16 ГБ).

Я был удивлен, что мне нужно 9 ГБ на каждого работника для набора данных 1 ГБ перегородки. Работники 9 ГБ работают нормально для 30 или 100 разделов данных, но 8 ГБ (по умолчанию на моем ноутбуке) приводят к сбою.

Может кто-нибудь объяснить, что происходит, исходные кадры данных 1 ГБ требуют по меньшей мере 95% от 9 ГБ из ОЗУ (я полагаю, использование 95% является триггером события OOM)? Я искренне озадачен тем, как 1 ГБ данных может расшириться до гораздо большего количества ГБ на одного работника, и у меня нет ментальной модели того, что происходит внутри!

Я думаю типичный Совет в этом сценарии, предполагая, что у нас есть контроль над процессом генерации данных, всегда делать больше и меньше файлов Parquet (например, 200 * 0,5 ГБ в моем случае), чтобы снизить требования к оперативной памяти для рабочего процесса. Это разумный совет?

...