मैं/हे मुद्दों में लोड हो रहा है कई बड़े H5PY फ़ाइलें (Pytorch)

0

सवाल

मैं एक समस्या से मुलाकात की!

हाल ही में मैं एक समस्या है मैं/ओ के मुद्दे. लक्ष्य और इनपुट डेटा संग्रहित कर रहे हैं के साथ h5py फ़ाइलें. प्रत्येक लक्ष्य फ़ाइल है 2.6 GB जबकि प्रत्येक इनपुट फ़ाइल 10.2 GB. मैं 5 इनपुट डेटासेट और 5 लक्ष्य डेटासेट में कुल.

मैं बनाया एक कस्टम डेटासेट समारोह के लिए प्रत्येक h5py फिर फ़ाइल और उपयोग डेटा.ConcatDataset वर्ग लिंक करने के लिए सभी डेटासेट. कस्टम डेटासेट समारोह है:

class MydataSet(Dataset):
def __init__(self, indx=1, root_path='./xxx', tar_size=128, data_aug=True, train=True):
    self.train = train
    if self.train:
        self.in_file = pth.join(root_path, 'train', 'train_noisy_%d.h5' % indx)
        self.tar_file = pth.join(root_path, 'train', 'train_clean_%d.h5' % indx)
    else:
        self.in_file = pth.join(root_path, 'test', 'test_noisy.h5')
        self.tar_file = pth.join(root_path, 'test', 'test_clean.h5')
    self.h5f_n = h5py.File(self.in_file, 'r', driver='core')
    self.h5f_c = h5py.File(self.tar_file, 'r')
    self.keys_n = list(self.h5f_n.keys())
    self.keys_c = list(self.h5f_c.keys())
    # h5f_n.close()
    # h5f_c.close()

    self.tar_size = tar_size
    self.data_aug = data_aug

def __len__(self):
    return len(self.keys_n)

def __del__(self):
    self.h5f_n.close()
    self.h5f_c.close()

def __getitem__(self, index):
    keyn = self.keys_n[index]
    keyc = self.keys_c[index]
    datan = np.array(self.h5f_n[keyn])
    datac = np.array(self.h5f_c[keyc])
    datan_tensor = torch.from_numpy(datan).unsqueeze(0)
    datac_tensor = torch.from_numpy(datac)
    if self.data_aug and np.random.randint(2, size=1)[0] == 1: # horizontal flip
        datan_tensor = torch.flip(datan_tensor,dims=[2]) # c h w
        datac_tensor = torch.flip(datac_tensor,dims=[2])

तो मैं का उपयोग करें dataset_train = data.ConcatDataset([MydataSet(indx=index, train=True) for index in range(1, 6)]) प्रशिक्षण के लिए. जब केवल 2-3 h5py फ़ाइलों को इस्तेमाल कर रहे हैं, मैं/हे गति सामान्य है और सब कुछ ठीक हो जाता है. हालांकि, जब 5 फाइलें इस्तेमाल कर रहे हैं, प्रशिक्षण की गति धीरे-धीरे कम (5 पुनरावृत्तियों/एस के लिए 1 पुनरावृत्तियों/एस). मैं बदल num_worker और समस्या अभी भी मौजूद है ।

सकता है किसी को मुझे एक समाधान दे? चाहिए मैं मर्ज कई h5py फ़ाइलों को एक बड़ा एक में? या अन्य तरीकों? अग्रिम में धन्यवाद!

h5py python pytorch pytorch-dataloader
2021-11-24 02:02:17
1

सबसे अच्छा जवाब

1

प्रदर्शन में सुधार की आवश्यकता है समय मानक है. ऐसा करने के लिए आप की जरूरत है कि पहचान करने के लिए संभावित बाधाओं और संबंधित स्थितियों. आप ने कहा कि "के साथ 2-3 फाइल मैं/हे गति सामान्य है" और "जब 5 फाइलें इस्तेमाल कर रहे हैं, प्रशिक्षण की गति धीरे-धीरे कम हो जाती है". तो, अपने प्रदर्शन मुद्दा मैं/हे गति, या प्रशिक्षण की गति? या क्या तुम जानते हो? यदि आप नहीं जानते हैं, आप को अलग करने की जरूरत है और की तुलना में मैं/हे प्रदर्शन और प्रशिक्षण के प्रदर्शन के लिए अलग से 2 परिदृश्यों.
अन्य शब्दों में, को मापने के लिए मैं/हे प्रदर्शन (केवल) आप की जरूरत है चलाने के लिए निम्न परीक्षण:

  1. समय पढ़ने के लिए और जुटना 2-3 फ़ाइलें,
  2. समय पढ़ने के लिए और जुटना 5 फाइलें,
  3. कॉपी 5 फाइलें 1, और समय से पढ़ने के लिए मर्ज किए गए फ़ाइल,
  4. या, लिंक के 5 फाइलें 1 करने के लिए फ़ाइल है, और समय.

और उपाय करने के लिए प्रशिक्षण की गति (केवल) आप की जरूरत की तुलना करने के लिए प्रदर्शन के लिए निम्न परीक्षण:

  • विलय 2-3 फ़ाइलें, तो पढ़ें और ट्रेन से विलय कर दिया फ़ाइल.
  • सभी मर्ज 5 फाइलें, तो पढ़ें और ट्रेन से विलय कर दिया फ़ाइल.
  • या, लिंक के 5 फाइलें 1 करने के लिए फ़ाइल है, तो पढ़ने के लिए और ट्रेन से जुड़ी फाइल.

के रूप में विख्यात मेरी टिप्पणी, विलय (या जोड़ने) कई HDF5 फ़ाइलें एक में आसान है, तो सभी डेटासेट कर रहे हैं रूट स्तर पर और सभी डेटासेट के नाम अद्वितीय हैं. मैं बाहरी लिंक विधि क्योंकि यह प्रदान हो सकता है एक ही प्रदर्शन, duplicating के बिना बड़े डेटा फ़ाइलें.

नीचे दिए गए कोड से पता चलता है कि दोनों तरीकों में है. स्थानापन्न अपनी फ़ाइल के नाम में fnames सूची, और यह तैयार किया जाना चाहिए चलाने के लिए. यदि आपके डेटासेट के नाम अद्वितीय नहीं होते हैं, आप की आवश्यकता होगी बनाने के लिए एक अनूठा नाम है, और असाइन में h5fr.copy() -- इस तरह: h5fr.copy(h5fr[ds],h5fw,'unique_dataset_name')

कोड विलय करने के लिए -या - लिंक फ़ाइलें :
(टिप्पणी लाइनों के रूप में उपयुक्त)

import h5py
fnames = ['file_1.h5','file_2.h5','file_3.h5']
# consider changing filename to 'linked_' when using links:
with h5py.File(f'merge_{len(fnames)}.h5','w') as h5fw:      
    for fname in fnames:
        with h5py.File(fname,'r') as h5fr:
            for ds in h5fr.keys():
                # To copy datasets into 1 file use:
                h5fr.copy(h5fr[ds],h5fw)
                # to link datasets to 1 file use:
                # h5fw[ds] = h5py.ExternalLink(fname,ds)
2021-11-25 15:23:04

पोस्टिंग के बाद कोड है कि प्रतियां सभी डेटासेट के लिए 1 फ़ाइल, मुझे एहसास हुआ कि बाहरी लिंक हो सकता है एक बेहतर समाधान है । वे खत्म दोहराया प्रतियां से डेटा. केवल सवाल यह है कि प्रदर्शन. कोड से लिंक करने के लिए लगभग समान है । मैं संशोधित मेरा जवाब और कोड को दिखाने के लिए दोनों तरीकों में है.
kcw78

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में