Можно ли выполнять параллельное чтение одного файла h5py с использованием многопроцессорной обработки?

Я пытаюсь ускорить процесс чтения фрагментов (загрузить их в оперативную память) из файла набора данных h5py. Прямо сейчас я пытаюсь сделать это через библиотеку многопроцессорности.

pool = mp.Pool(NUM_PROCESSES)
gen = pool.imap(loader, indices)

Где функция загрузчика выглядит примерно так:

def loader(indices):
    with h5py.File("location", 'r') as dataset:
        x = dataset["name"][indices]

Это на самом деле иногда работает (имеется в виду, что ожидаемое время загрузки делится на количество процессов и, таким образом, распараллеливается). Однако в большинстве случаев это не так, и время загрузки остается таким же высоким, как и при последовательной загрузке данных. Могу ли я что-нибудь сделать, чтобы исправить это? Я знаю, что h5py поддерживает параллельное чтение/запись через mpi4py, но я просто хотел бы знать, действительно ли это необходимо только для чтения.


person Baptist    schedule 25.03.2015    source источник
comment
Я также использовал пул и pyspark, чтобы включить параллельный ввод-вывод с HDF5, я не понимаю, почему для этого требуется несколько вызовов h5py.File. Почему бы не вызвать h5py.File только один раз вне функции загрузчика, а затем распараллелить процесс чтения данных?   -  person American curl    schedule 26.08.2016


Ответы (1)


Параллельное чтение нормально с h5py, нет необходимости в версии MPI. Но почему вы ожидаете ускорения здесь? Ваша работа почти полностью связана с вводом-выводом, а не с процессором. Параллельные процессы не помогут, потому что узким местом является ваш жесткий диск, а не процессор. Меня не удивит, если распараллеливание в этом случае даже замедлит всю операцию чтения. Другие мнения?

person weatherfrog    schedule 27.03.2015
comment
Спасибо, да, похоже на это, но меня просто смущает тот факт, что иногда (в основном в начале) кажется, что он распараллеливается. Однако через некоторое время это действительно занимает немного больше времени, чем последовательное чтение. - person Baptist; 30.03.2015
comment
Возможно, кэширование и/или разбиение на фрагменты играют роль. Но это всего лишь предположение. - person weatherfrog; 01.04.2015
comment
Я только что понял, что могу столкнуться с той же проблемой здесь .. это возможно? ^^ - person Stefan Falk; 27.03.2017
comment
Как уже упоминалось, вы, скорее всего, связаны с вводом-выводом, а случайное увеличение производительности связано с кэшированием. Если вы включите сжатие (например, lzf), это может помочь, если действительно скорость диска является ограничивающим фактором. - person Matthew; 29.12.2017