Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 在pytorch dataloader中使用多个worker从.npz文件读取密钥?_Numpy_Multiprocessing_Pytorch_Python Multiprocessing - Fatal编程技术网

Numpy 在pytorch dataloader中使用多个worker从.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>

我有一个.npz文件,其中存储了一本字典。字典有一些键,值是numpy数组。我想在dataloader的getitem()方法中阅读字典。当我将dataloadernum_workers设置为1时,一切正常。但当我增加num workers时,从该npz文件读取数据时会抛出以下错误:

   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,我选择忽略它并在更大的数据上进行测试!