已关闭
[Bug]: AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_in_order' #1533
@逆光飞翔创建于  2月2日关闭于  3月18日
@逆光飞翔
@逆光飞翔
2月2日 创建

在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。

⚠️ 安全信息提醒:请仔细检查提供的文本内容,确保其不包含敏感数据信息,包括但不限于:

  • API 令牌或密钥
  • 密码或身份验证凭证
  • 私有网址或接口地址
  • 个人或机密数据
  • ...

在分享配置信息或代码示例时,请将敏感信息脱敏处理,或使用 <TOKEN> 等占位符替代原有内容。

环境信息

  • 操作系统:openEuler 22.03 (LTS-SP4)
  • 昇腾硬件信息:910B3
  • CANN软件版本:8.2.RC1
  • 安装的对应软件版本:
    image.png

🐛 问题描述

使用PyTorch原生的dataloader多进程加载数据集时触发bug,详细定位请参考该issue

Bug日志信息如下:

Traceback (most recent call last):
  File "/home/BiRefNet/air_inference.py", line 148, in <module>
    main(args)
  File "/home/BiRefNet/air_inference.py", line 122, in main
    inference(
  File "/home/BiRefNet/air_inference.py", line 42, in inference
    for batch in tqdm(data_loader_test, total=len(data_loader_test)) if 1 or config.verbose_eval else data_loader_test:
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/tqdm/std.py", line 1181, in __iter__
    for obj in iterable:
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/torch_npu/profiler/_add_mstx_patch.py", line 23, in _custom_dataloader_iter
    out_iter = original_iter(self)
               ^^^^^^^^^^^^^^^^^^^
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/torch/utils/data/dataloader.py", line 494, in __iter__
    return self._get_iterator()
           ^^^^^^^^^^^^^^^^^^^^
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/torchvision_npu/utils/_dataloader.py", line 60, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/torchvision_npu/utils/_dataloader.py", line 207, in __init__
    self._reset(loader, first_iter=True)
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/torch/utils/data/dataloader.py", line 1270, in _reset
    self._try_put_index()
  File "/root/miniforge3/envs/birefnet/lib/python3.11/site-packages/torch/utils/data/dataloader.py", line 1529, in _try_put_index
    if self._in_order:
       ^^^^^^^^^^^^^^
AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_in_order'
[ERROR] 2026-02-02-07:56:21 (PID:268950, Device:0, RankID:-1) ERR99999 UNKNOWN applicaiton exception

dataloader初始化代码如下:

# config.num_workers=4
data_loader_test = torch.utils.data.DataLoader(
            dataset=MyData(testset, data_size=config.size, is_train=False),
            batch_size=config.batch_size_valid, shuffle=False, num_workers=config.num_workers, pin_memory=True
        )

欢迎加入社区,感谢您对社区的贡献 🎉!

likedislike
ascend-robotascend-robot成员
2月2日 添加了label:bug
kuhn7成员
2月4日 评论:

感谢反馈bug, 该问题会尽快修复。

likedislike
kuhn7成员
2月4日 评论:

@m0_51146788 您当前给出的软件版本信息,torchvision_npu和torchvision并不配套。 具体配套信息可参考 https://gitcode.com/Ascend/vision/blob/master/README.md

likedislike
kuhn7成员
2月4日 评论:

@m0_51146788 此外,原生社区反馈的issue的报错调用栈和这个并不相同,看起来torch_npu和torchvision_npu都需要修复。能否提供可复现的脚本和模型文件,以便我们验证该问题是否修复。

likedislike
@逆光飞翔
@逆光飞翔
2月5日 评论:

测试环境信息:
image.png
image.png
报错日志:

Traceback (most recent call last):
  File "/home/BiRefNet/as_inference.py", line 123, in <module>
    main(args)
  File "/home/BiRefNet/as_inference.py", line 96, in main
    inference(
  File "/home/BiRefNet/as_inference.py", line 26, in inference
    for batch in tqdm(data_loader_test, total=len(data_loader_test)) if 1 or config.verbose_eval else data_loader_test:
  File "/root/miniforge3/envs/test-260/lib/python3.11/site-packages/tqdm/std.py", line 1181, in __iter__
    for obj in iterable:
  File "/root/miniforge3/envs/test-260/lib/python3.11/site-packages/torch_npu/profiler/_add_mstx_patch.py", line 28, in wrapper
    out = func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^
  File "/root/miniforge3/envs/test-260/lib/python3.11/site-packages/torch/utils/data/dataloader.py", line 708, in __next__
    data = self._next_data()
           ^^^^^^^^^^^^^^^^^
  File "/root/miniforge3/envs/test-260/lib/python3.11/site-packages/torch/utils/data/dataloader.py", line 1471, in _next_data
    if not self._in_order:
           ^^^^^^^^^^^^^^
AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_in_order'
[ERROR] 2026-02-05-06:20:48 (PID:1789665, Device:0, RankID:-1) ERR99999 UNKNOWN applicaiton exception

权重获取和推理代码:

第三方库安装

pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 torch_npu==2.6.0.post3
pip install opencv-python einops kornia huggingface_hub  timm tqdm scipy scikit-image pandas libcst prettytable jedi decorator absl-py cloudpickle ml-dtypes psutil tornado attrs protobuf av
pip install numpy==1.26.4

获取BiRefNet模型代码仓和数据集

git clone https://github.com/ZhengPeng7/BiRefNet.git
cd BiRefNet
#  下载权重
mkdir weights
wget https://github.com/ZhengPeng7/BiRefNet/releases/download/v1/BiRefNet-general-bb_swin_v1_tiny-epoch_232.pth --no-check-certificate

下载数据集并解压至datasets,数据集通过谷歌云盘下载

本次测试使用DIS-TE1

测试脚本

likedislike
kuhn7成员
2月14日 评论:

@m0_51146788
https://gitcode.com/Ascend/vision/pull/195 这个改动应该能修复你的问题,可以加上替换torchvision-npu包

likedislike
@逆光飞翔
@逆光飞翔
2月26日 评论:

好的好的,万分感谢

likedislike
Hhuangyunlong成员
3月18日 issue状态由 TODO 改变为 DONE
Hhuangyunlong成员
3月18日 关闭了 issue