Чтение нескольких файлов с помощью Dask - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь выполнить простое смущающее параллельное чтение 24 файлов научных данных, каждый размером ~ 250 МБ, то есть всего ~ 6 ГБ.Данные представлены в формате 2D-массива.Он хранится в параллельной файловой системе и считывается из кластера, хотя сейчас я читаю только с одного узла.Данные в формате, аналогичном HDF5 (называется Adios), и считываются аналогично пакету h5py.Каждый файл занимает около 4 секунд для чтения.Я следую примеру лыжного мага, который читается здесь (http://docs.dask.org/en/latest/array-creation.html). Однако, я никогда не набираю скорость, независимо от того, сколько рабочих. Я подумал, что, возможно, я использовал это неправильно, и, возможно, использовал только 1 работника, нокогда я заполняю его, кажется, что там 24 работника. Как мне ускорить чтение этих данных? dask_profile

import adios as ad
import numpy as np
import dask.array as da
import dask

bpread = dask.delayed(lambda f: ad.file(f)['data'][...],pure=True)
lazy_datas = [bpread(path) for path in paths]
sample = lazy_datas[0].compute()

#read in data
arrays = [da.from_delayed(lazy_data,dtype=sample.dtype,shape=sample.shape) for lazy_data in lazy_datas]
datas = da.stack(arrays,axis=0)
datas2 = datas.compute(scheduler='processes',num_workers=24)

1 Ответ

0 голосов
/ 06 октября 2018

Я рекомендую посмотреть на вкладку /profile на панели управления планировщика.Это скажет вам, какие строки кода занимают больше всего времени.

Мое первое предположение состоит в том, что вы уже максимизируете способность вашего диска предоставлять вам данные.Вы не привязаны к процессору, поэтому добавление большего количества ядер не поможет.Хотя это всего лишь предположение, как всегда, вам придется профилировать и исследовать ситуацию, чтобы точно знать.

...