HDF5数据加载非常慢。在GPU中导致零%的波动性

问题描述 投票:0回答:1

我正在使用自定义PyTorch数据类从我创建的H5数据集中加载实例。但是,加载样品时它似乎非常慢。在处理大型HDF5数据集时,我遵循了一些建议,但是我想知道我是否正在做某些明显错误的事情。如果可以,我将在Linux上部署我的代码。我正在4个GPU上运行代码,并为模型建立了nn.dataparallel。由于数据加载非常缓慢,因此GPU波动率为0%。这是我的数据类加载器:

import h5py
from torch.utils import data

class Features_Dataset(data.Dataset):
    def __init__(self, archive, phase):
        self.archive = archive
        self.phase = phase

    def __getitem__(self, index):
        with h5py.File(self.archive, 'r', libver='latest', swmr=True) as archive:
            datum = archive[str(self.phase) + '_all_arrays'][index]
            label = archive[str(self.phase) + '_labels'][index]
            path = archive[str(self.phase) +  '_img_paths'][index]
            return datum, label, path

    def __len__(self):
        with h5py.File(self.archive, 'r', libver='latest', swmr=True) as archive:
            datum = archive[str(self.phase) + '_all_arrays']
            return len(datum)


if __name__ == '__main__':
    train_dataset = Features_Dataset(archive= "featuresdata/train.hdf5", phase= 'train')
    trainloader = data.DataLoader(train_dataset, num_workers=8, batch_size=128)
    print(len(trainloader))
    for i, (data, label, path) in enumerate(trainloader):
        print(path)


我缺少明显的东西吗?有没有更好的方法来快速加载实例?

python linux pytorch gpu hdf5
1个回答
0
投票

您是否不能在init中一次打开文件并存储文件处理程序?当前,无论何时调用get item或len,您将始终在每次调用时打开文件。

© www.soinside.com 2019 - 2024. All rights reserved.