2016-12-28 2 views
2

В моем коде я сохраняю несколько обработанных изображений (массивы numpy) параллельно в файле hdf5 с помощью mpi (mpi4py/h5py). Для этого файл нужно открыть с помощью опции driver=mpio.dask и parallel hdf5 writing

import h5py 
from mpi4py import MPI 
file_hdl=h5py.File(file_lath,'r+',driver='mpio', comm=MPI.COMM_WORLD) 

Я хотел бы отойти от mpi и использовать dask для распараллеливания. Можно ли использовать параллельный hdf5 в dask? Должен ли я все еще полагаться на mpi? Если это лучший способ хранения данных? Thanks

ответ

2

Это сложный и сложный вопрос.

Как правило, HDF5 оптимизирован для параллельного чтения и записи MPI. Трудно получить такой же уровень поддержки вне MPI.

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

Dask обычно обрабатывает параллельные операции чтения и записи на HDF5 с помощью замков. Если вы находитесь в одном процессе, это обычный объект threading.Lock. Как правило, это не сильно влияет на производительность, потому что чтение из файлов HDF5 часто связано с вводом-выводом, а не с ЦП. Есть немного разногласий, но беспокоиться не о чем.

В распределенной настройке мы используем сериализуемые блокировки, которые защищают от многопоточного параллельного доступа в любом конкретном процессе, но не останавливают два процесса от столкновения друг с другом. Обычно это не проблема, потому что столкновение с чтением прекрасно, если вы не в одном процессе, и люди обычно пишут целые куски, которые выравниваются с кусками HDF5.

Люди счастливо используют HDF5 параллельно с Dask.array каждый день. Однако я не уверен, что все беззащитно. Я подозреваю, что можно было бы разработать разборный случай.

(Кроме того, этот аспект быстро развивается. Этот ответ может быстро устареть)

https://github.com/pydata/xarray/issues/798