У меня есть генератор изображений, который читает партии трехмерных тензоров из файла HDF5 (через h5py), и он использует многопроцессорную библиотеку Python (унаследованную от Keras Sequence).
Я хотел бы понять если я делаю это правильно, и если я могу улучшить это.
У меня есть метод __getitem__
, вызванный несколькими процессами для N итераций, и каждый раз, когда этот метод вызывается, я открываю файл HDF5 и читаю пакет данных для заданного набора индексов и немедленно закрыть файл (через менеджер контекста).
def get_dataset_items(self, dataset: str, indices: np.ndarray) -> np.ndarray:
"""Get an h5py dataset items.
Arguments
---------
dataset : str
The dataset key.
indices : ndarray,
The list of current batch indices.
Returns
-------
np.ndarray
An batch of elements.
"""
with h5.File(self.src, 'r') as file:
return file[dataset][indices]
Похоже, что нет проблем с этим подходом, но я действительно не уверен. Я прочитал, что мы можем ожидать странные вещи и поврежденные данные при чтении файла из нескольких процессов.
Я вижу, что есть интерфейс MPI и режим SWMR.
Могу ли я воспользоваться одним из них функции ?