Загрузка больших наборов данных с помощью dask - PullRequest
0 голосов
/ 11 июня 2018

Я нахожусь в среде HPC с кластерами, тесно связанными межсоединениями и резервной копией файловых систем Luster.Мы изучали, как использовать Dask не только для обеспечения вычислений, но и для работы в качестве распределенного кэша для ускорения наших рабочих процессов.Наш собственный формат данных является n-мерным и регулярным, и мы кодировали ленивого читателя для перехода к методам from_array / from_delayed.

У нас возникли некоторые проблемы с загрузкой и сохранением наборов данных, превышающих объем памяти, по всемуDask cluster.

Пример с hdf5:

# Dask scheduler has been started and connected to 8 workers
# spread out on 8 machines, each with --memory-limit=150e9.
# File locking for reading hdf5 is also turned off
from dask.distributed import Client
c = Client({ip_of_scheduler})
import dask.array as da
import h5py
hf = h5py.File('path_to_600GB_hdf5_file', 'r')
ds = hf[hf.keys()[0]]
x = da.from_array(ds, chunks=(100, -1, -1))
x = c.persist(x) # takes 40 minutes, far below network and filesystem capabilities
print x[300000,:,:].compute() # works as expected

Мы также загрузили наборы данных (используя slicing, dask.delayed и from_delayed) из некоторых наших собственных форматов файлов и увиделианалогичное снижение производительности при увеличении размера файла.

Мои вопросы: Существуют ли узкие места в использовании Dask в качестве распределенного кэша?Будут ли все данные переданы через планировщик?Могут ли работники воспользоваться преимуществами Luster, или функции и / или функции ввода / вывода как-то сериализованы?Если это так, будет ли эффективнее не вызывать постоянство для массивных наборов данных и просто позволить Dask обрабатывать данные и вычисления, когда это необходимо?

1 Ответ

0 голосов
/ 12 июня 2018
  • Существуют ли узкие места в использовании Dask в качестве распределенного кэша?

    Есть узкие места в каждой системе, но, похоже, вы не близки кстолкнуться с узкими местами, которые я ожидал от Даск.Я подозреваю, что вы столкнулись с чем-то другим.

  • Будут ли все данные принудительно перенаправляться через планировщик?

    Нет, рабочие могутвыполнять функции, которые загружают данные самостоятельно.Эти данные затем останутся на рабочих.

  • Могут ли рабочие воспользоваться преимуществами Luster, или функции и / или функции ввода-вывода сериализированы каким-либо образом?

    Рабочие - это просто процессы Python, поэтому, если процессы Python, работающие в вашем кластере, могут использовать преимущества Luster (это почти наверняка так), то да, Dask Workers могут использовать преимущества Luster.

  • Если это так, то будет ли эффективнее не вызывать persist для массивных наборов данных и просто позволить Dask обрабатывать данные и вычисления, когда это необходимо?

    Этоэто конечно распространено.Здесь компромисс между распределенной пропускной способностью вашей NFS и доступностью распределенной памяти.

На вашем месте я бы использовал диагностику Dask, чтобы выяснить, что занимает так много времени.Возможно, вы захотите прочитать документацию по с пониманием производительности и, в частности, раздел по сводной панели .В этом разделе есть видео, которое может быть особенно полезным.Я хотел бы задать два вопроса:

  1. Работники все время выполняют задачи?(страница состояния, график потока задач)
  2. Что занимает в этих задачах время?(страница профиля)
...