#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 часов!