Я нахожусь в среде 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 обрабатывать данные и вычисления, когда это необходимо?