Numpy 在pytorch dataloader中使用多个worker从.npz文件读取密钥?
我有一个.npz文件,其中存储了一本字典。字典有一些键,值是numpy数组。我想在dataloader的getitem()方法中阅读字典。当我将dataloadernum_workers设置为1时,一切正常。但当我增加num workers时,从该npz文件读取数据时会抛出以下错误:Numpy 在pytorch dataloader中使用多个worker从.npz文件读取密钥?,numpy,multiprocessing,pytorch,python-multiprocessing,Numpy,Multiprocessing,Pytorch,Python Multiprocessing,我有一个.npz文件,其中存储了一本字典。字典有一些键,值是numpy数组。我想在dataloader的getitem()方法中阅读字典。当我将dataloadernum_workers设置为1时,一切正常。但当我增加num workers时,从该npz文件读取数据时会抛出以下错误: Traceback (most recent call last): File "scripts/train.py", line 235, in <module>
Traceback (most recent call last):
File "scripts/train.py", line 235, in <module>
train(args)
File "scripts/train.py", line 186, in train
solver(args.epoch, args.verbose)
File "/local-scratch/codebase/cap/lib/solver.py", line 174, in __call__
self._feed(self.dataloader["train"], "train", epoch_id)
File "/local-scratch/codebase/cap/lib/solver.py", line 366, in _feed
for data_dict in dataloader:
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 819, in __next__
return self._process_data(data)
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 846, in _process_data
data.reraise()
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/torch/_utils.py", line 369, in reraise
raise self.exc_type(msg)
zipfile.BadZipFile: Caught BadZipFile in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/torch/utils/data/_utils/worker.py", line 178, in _worker_loop
data = fetcher.fetch(index)
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/torch/utils/data/_utils/fetch.py", line 44, in <listcomp>
data = [self.dataset[idx] for idx in possibly_batched_index]
File "/local-scratch/codebase/cap/lib/dataset.py", line 947, in __getitem__
other_bbox_feat = self.box_features['{}-{}_{}.{}'.format(scene_id, target_object_id, ann_id, object_id)]
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/numpy/lib/npyio.py", line 255, in __getitem__
pickle_kwargs=self.pickle_kwargs)
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/numpy/lib/format.py", line 763, in read_array
data = _read_bytes(fp, read_size, "array data")
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/site-packages/numpy/lib/format.py", line 892, in _read_bytes
r = fp.read(size - len(data))
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/zipfile.py", line 872, in read
data = self._read1(n)
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/zipfile.py", line 962, in _read1
self._update_crc(data)
File "/local-scratch/anaconda3/envs/scanenv/lib/python3.6/zipfile.py", line 890, in _update_crc
raise BadZipFile("Bad CRC-32 for file %r" % self.name)
zipfile.BadZipFile: Bad CRC-32 for file 'scene0519_00-13_1.0.npy'
回溯(最近一次呼叫最后一次):
文件“scripts/train.py”,第235行,在
列车(args)
文件“scripts/train.py”,第186行,列车中
解算器(args.epoch,args.verbose)
文件“/local scratch/codebase/cap/lib/solver.py”,第174行,在调用中__
self.\u提要(self.dataloader[“train”],“train”,epoch\u id)
文件“/local scratch/codebase/cap/lib/solver.py”,第366行,输入
对于dataloader中的数据目录:
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/torch/utils/data/dataloader.py”,第819行,下一页__
返回自处理数据(数据)
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/torch/utils/data/dataloader.py”,第846行,进程数据中
data.reraise()
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/torch/_utils.py”,第369行,重新登录
提升自我执行类型(msg)
zipfile.BadZipFile:在DataLoader工作进程0中捕获了BadZipFile。
原始回溯(最近一次呼叫最后一次):
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/torch/utils/data/_-utils/worker.py”,第178行,在“worker”循环中
data=fetcher.fetch(索引)
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/torch/utils/data/_utils/fetch.py”,第44行,fetch中
data=[self.dataset[idx]用于可能的批处理索引中的idx]
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/torch/utils/data/_utils/fetch.py”,第44行,在
data=[self.dataset[idx]用于可能的批处理索引中的idx]
文件“/local scratch/codebase/cap/lib/dataset.py”,第947行,在__
other_bbox_feat=self.box_功能['{}-{}}{}.{}'。格式(场景id、目标对象id、安id、对象id)]
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/numpy/lib/npyio.py”,第255行,在__
pickle_-kwargs=self.pickle_-kwargs)
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/numpy/lib/format.py”,第763行,以只读数组形式
数据=_读取字节(fp,读取大小,“数组数据”)
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/site packages/numpy/lib/format.py”,第892行,以字节为单位
r=fp.read(大小-长度(数据))
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/zipfile.py”,第872行,已读
数据=self.\u read1(n)
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/zipfile.py”,第962行,在_read1中
自我更新crc(数据)
文件“/local scratch/anaconda3/envs/scannev/lib/python3.6/zipfile.py”,第890行,在crc更新中
raise BadZipFile(“文件%r”%self.name的错误CRC-32)
zipfile.BadZipFile:scene0519_00-13_1.0.npy文件的错误CRC-32
据我所知,pytorch dataloader使用多处理来进行数据加载。可能问题在于多处理和.npz文件。非常感谢您的帮助。数据加载器
dataloader
可以在不进行多处理的情况下处理这些npz
文件吗。我不知道pytorch
如何处理这些文件。它们是zip
档案,其中每个文件都是npy
。这些文件通常使用np.load
加载,它检测存档性质,并返回类似字典的对象。@hpaulj我认为npz文件指针可能有问题。似乎只能有一个指针同时读取npz文件。@hpaulj您对我应该使用什么文件类型来存储numpy数组字典有什么建议吗?我也遇到过同样的问题,它似乎只在使用小数据集运行时才会影响我。当我增加数据集时,工作人员不会同时访问npz文件。所以我认为并发访问numpy或zipfile中的npz文件是一个bug,我选择忽略它并在更大的数据上进行测试!dataloader
是否可以在不进行多处理的情况下处理这些npz
文件。我不知道pytorch
如何处理这些文件。它们是zip
档案,其中每个文件都是npy
。这些文件通常使用np.load
加载,它检测存档性质,并返回类似字典的对象。@hpaulj我认为npz文件指针可能有问题。似乎只能有一个指针同时读取npz文件。@hpaulj您对我应该使用什么文件类型来存储numpy数组字典有什么建议吗?我也遇到过同样的问题,它似乎只在使用小数据集运行时才会影响我。当我增加数据集时,工作人员不会同时访问npz文件。所以我认为并发访问numpy或zipfile中的npz文件是一个bug,我选择忽略它并在更大的数据上进行测试!