I/O ปัญหาในการโหลดมาหลายใหญ่ H5PY แฟ้ม(Pytorch)

0

คำถาม

ฉันเจอปัญหา!

เมื่อเร็วๆนี้ฉันจะได้เจอกับปัญหาของฉัน/โอเหมือนไม่มีปัญหาอยู่เลยสินะ เป้าหมายและนำเข้าข้อมูลจะถูกจัดเก็บไว้กับ h5py งแฟ้ม แต่ละแฟ้มเป้าหมายเป็น 2.6 กิกะไบต์ ในขณะที่แต่ละแฟ้มนำเข้าเป็น 10.2 กิกะไบต์. ฉันมี 5 ข้อมูล datasets และ 5 เป้าหมาย datasets ในทั้งหมด

ฉันสร้างเป็นวันที่กำหนดเองฟังก์ชันสำหรับแต่ละ h5py แฟ้มแล้วก็ใช้ ข้อมูลConcatDataset ชั้นเรียนต้องเชื่อมโยงทั้งหมด datasets. ที่กำหนดวันที่งานคือ:

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 แฟ้มชิง i/O ความเร็วเป็นธรรมดาและทุกอย่างไปล่ะ อย่างไรก็ตามเมื่อ 5 แฟ้มยังคงใช้การฝึกความเร็วเป็น gradually decreasing(5 ทำซ้ำ/วินาทีที่ 1 การทำซ้ำ/วินาที). ฉันเปลี่ยน num_worker และปัญหาของยังคงอยู่ก่อนแล้ว

อาจจะมีคนให้ฉันใช่ไหม ฉันควรผนวกรวมหลาย h5py องแฟ้มเข้าไปในที่ยิ่งใหญ่กว่าหนึ่ง? หรืออื่นวิธีการของ? ขอบคุณล่วงหน้า!

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

คำตอบที่ดีที่สุด

1

พ่อต้องปรับปรุงการแสดงต้องการเวลา benchmarks. ต้องทำอย่างนั้นคุณต้องการที่จะระบุตัวศักยภาพแล้วก็เป็นตรอกแคบๆเข้าและที่เกี่ยวข้องซ้อมกัน. คุณบอกว่า"กับ 2-3 แฟ้มที่ฉัน/O ความเร็วเป็นธรรมดา"และ"เมื่อ 5 แฟ้มยังคงใช้การฝึกความเร็ว gradually decreases". ดังนั้น,คือการแสดงของเธอเรื่อง i/O ความเร็วหรือการฝึกความเร็ว? หรือคุณรู้ไหม? ถ้าคุณไม่รู้จักคุณต้องแยกเพื่อเปรียบเทียบหาอายุของฉัน/โอนการแสดงและการฝึกการแสดงไว้แยกสำหรับคน 2 เหตุการณ์จำลอง.
หรือจะพูดอีกอย่างเพื่อเลือกแบบเส้นต่อเนื่องฉัน/โอนการแสดง(เท่านั้น)คุณต้องการจะปกครองตามการทดสอบ:

  1. เวลาอ่านและ concatenate 2-3 แฟ้ม
  2. เวลาอ่านและ concatenate 5 แฟ้ม
  3. คัดลอกที่ 5 แฟ้มใน 1,และครั้งที่อ่านจากที่ถูกรวมแฟ้ม
  4. หรือ,เชื่อมโยงที่ 5 แฟ้ม 1 แฟ้มและกาลเวลา

และเพื่อแสดงถึงการฝึกความเร็ว(only)คุณต้องการที่จะเปรียบเทียบการแสดงสำหรับคนติดตามการทดสอบ:

  • ผนวกรวม 2-3 แฟ้มแล้วอ่านแล้วรถไฟจากที่ถูกรวมแฟ้ม
  • ผนวกรวมทั้ง 5 แฟ้มแล้วอ่านแล้วรถไฟจากถูกรวมแฟ้ม
  • หรือ,เชื่อมโยงที่ 5 แฟ้ม 1 แฟ้มแล้วอ่านแล้วรถไฟจากเชื่อมโยงแฟ้ม

เท่าที่จำเป็นต้องบันทึกเมื่ออยู่ในความคิดเห็นของฉัน,merging(หรือที่เชื่อมโยง)หลาย HDF5 องแฟ้มเข้าไปในหนึ่งคือเรื่องง่ายถ้าทั้งหมด datasets อยู่ในรากของระดับและทั้งหมดวันที่ชื่อเปลี่ยนไปราตรีสวัสดิ์นะ ฉันเพิ่มเว็บเบราว์เซอร์ภายนอกที่เชื่อมโยงวิธีการเพราะมันอาจจะให้เหมือนกันการแสดงโดยไม่มี 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

หลังจากโพสองรหัสนั่นสำเนาทุก datasets ที่ 1 แฟ้ม,ฉันรู้ว่างเว็บเบราว์เซอร์ภายนอกที่อยู่เชื่อมโยงอาจจะดีกว่าทางออกหรอกนะ พวกเขากำจัด duplicated สำเนาของข้อมูลออกมา คำถามเดียวคือการแสดง. รหัสเชื่อมต่อคืนเกือบจะเหมือนกันเป๊ะ ฉันมีการแก้ไขคำตอบของฉันและรหัสเพื่อให้แสดงทั้งสองวิธีการของ.
kcw78

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่