共享内存和Pytorch中的Dataloader结合

dataloader中通常使用num_workers来指定多线程来进行数据的读取。可以使用共享内存进行加速。
代码地址:https://github.com/POSTECH-CVLab/point-transformer/blob/master/util/s3dis.py

1. 共享内存和dataloader结合

class S3DIS(Dataset):
    def __init__(self, split='train', data_root='trainval', test_area=5, voxel_size=0.04, voxel_max=None, transform=None, shuffle_index=False, loop=1):
        super().__init__()
        self.split, self.voxel_size, self.transform, self.voxel_max, self.shuffle_index, self.loop = split, voxel_size, transform, voxel_max, shuffle_index, loop
        data_list = sorted(os.listdir(data_root))
        data_list = [item[:-4] for item in data_list if 'Area_' in item]
        if split == 'train':
            self.data_list = [item for item in data_list if not 'Area_{}'.format(test_area) in item]
        else:
            self.data_list = [item for item in data_list if 'Area_{}'.format(test_area) in item]
        for item in self.data_list:
            if not os.path.exists("/dev/shm/{}".format(item)):
                data_path = os.path.join(data_root, item + '.npy')
                data = np.load(data_path)  # xyzrgbl, N*7
                sa_create("shm://{}".format(item), data)
        self.data_idx = np.arange(len(self.data_list))
        print("Totally {} samples in {} set.".format(len(self.data_idx), split))

    def __getitem__(self, idx):
        data_idx = self.data_idx[idx % len(self.data_idx)]
        data = SA.attach("shm://{}".format(self.data_list[data_idx])).copy()
        coord, feat, label = data[:, 0:3], data[:, 3:6], data[:, 6]
        coord, feat, label = data_prepare(coord, feat, label, self.split, self.voxel_size, self.voxel_max, self.transform, self.shuffle_index)
        return coord, feat, label

    def __len__(self):
        return len(self.data_idx) * self.loop

1.1 在init中把所有的data存储到共享内存中

for item in self.data_list:
    if not os.path.exists("/dev/shm/{}".format(item)):
        data_path = os.path.join(data_root, item + '.npy')
        data = np.load(data_path)  # xyzrgbl, N*7
        sa_create("shm://{}".format(item), data)

key就是文件名,存储在self.data_list中

1.2 在getitem从共享内存中读出data

data = SA.attach("shm://{}".format(self.data_list[data_idx])).copy()

2. 怎么查询key在不在共享内存中

os.path.exists(“/dev/shm/{}”.format(item))能够查询该key在不在共享内存中。

3. 共享内存的地址是什么,怎么查看

$ ls /dev/shm  
Area_5_hallway

通过/dev/shm地址访问,但是这部分数据存储在内存中。

4. 共享内存有多大

$ df -h   
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           7.8G   44M  7.8G   1% /dev/shm

大小是物理内存的一半

5. 共享怎么删除

SA.delete("shm://{}".format('Area_5_hallway'))

SA.delete删除key

相关推荐

  1. 共享内存PytorchDataloader结合

    2024-04-14 22:08:03       13 阅读
  2. PyTorch Dataset、DataLoader enumerate()

    2024-04-14 22:08:03       40 阅读
  3. pytorchdatasetdataloader

    2024-04-14 22:08:03       19 阅读
  4. pytorch学习3-torchvisinDataloader使用

    2024-04-14 22:08:03       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 22:08:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 22:08:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 22:08:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 22:08:03       20 阅读

热门阅读

  1. 反转字符串中的单词(力扣151)

    2024-04-14 22:08:03       14 阅读
  2. 【云原生篇】深入理解K8S CNI、CRI 和 CSI

    2024-04-14 22:08:03       13 阅读
  3. 【嵌入式DIY实例】-能耗检测仪

    2024-04-14 22:08:03       14 阅读
  4. P8685 [蓝桥杯 2019 省 A] 外卖店优先级

    2024-04-14 22:08:03       12 阅读
  5. <script setup>组件内的路由守卫

    2024-04-14 22:08:03       14 阅读
  6. C语言入门算法——车站

    2024-04-14 22:08:03       12 阅读
  7. 函数(2)

    2024-04-14 22:08:03       10 阅读