Почему скорость чтения hdf5 снижается при увеличении размера кэша?

#python #hdf5 #h5py #hdf

Вопрос:

Я пытаюсь создать набор данных, используя h5py для задачи ML. Данные большие, и для более быстрой индексации и оптимизации я подумал об изменении rdcc_nslots и rdcc_nbytes значениях при создании файла. Но когда я использую больший размер кэша и большие слоты для блоков в кэше, производительность значительно снижается.

Тезисы — это то, как я создаю свой файл h5_file:

 # Good perfomance, small cache
h5_file = h5py.File(dpath, rdcc_nslots=1e5, rdcc_nbytes=4 * (1024**2), rdcc_w0=1)
# Bad Performance, 4GB cache, 1e7 slots
h5_file = h5py.File(dpath, rdcc_nslots=1e7, rdcc_nbytes=4000 * (1024**2), rdcc_w0=1)

 
 indices = np.arange(len(h5_file["windows"]))
np.random.shuffle(indices)


# shape: (926628, 18, 1024) of float32
# The chunk size for the dataset is (100, 18, 1024).
windows_dset = h5_file['windows'] 

for idx in tqdm(indices):
    item = windows_dset[idx, :, :]
 

Небольшой файл h5_file кэша будет повторяться по набору данных за 20 секунд, к моему удивлению, что довольно быстро и почти идеально. Но больший кэш h5_file будет повторяться по набору данных за 5 часов!