【python error】cannot import name ‘TorchDispatchMode‘ from ‘torch.utils._python_dispatch‘

报错:

cannot import name ‘TorchDispatchMode’ from ‘torch.utils._python_dispatch’ (/home/nvidia/.conda/envs/pytorch/lib/python3.8/site-packages/torch/utils/_python_dispatch.py)

File “/media/nvidia/Ubuntu/xxxxx/evalue.py”, line 24, in from ptflops import get_model_complexity_info ImportError: cannot import name ‘TorchDispatchMode’ from ‘torch.utils._python_dispatch’ (/home/nvidia/.conda/envs/env_name/lib/python3.8/site-packages/torch/utils/_python_dispatch.py)

AI的思路

这个错误提示表明尝试从 torch.utils._python_dispatch 模块中导入 TorchDispatchMode,但是在 PyTorch 安装版本中找不到这个名称。这可能是因为以下几个原因:

  1. 版本不兼容:你使用的 PyTorch 版本可能不包含 TorchDispatchMode。这个类或功能可能是在后续版本中引入的,或者已经在新版本中被重命名或移除。

  2. 内部API的使用torch.utils._python_dispatch 是一个内部模块,通常不建议直接使用内部API,因为它们可能会在不通知的情况下更改或删除。

  3. 安装问题:有可能是 PyTorch 没有正确安装或者安装的是一个损坏的版本。

解决步骤

  1. 检查 PyTorch 版本
    查看你当前安装的 PyTorch 版本,并确认是否支持你尝试使用的功能。可以通过以下命令查看版本:

    python -c "import torch; print(torch.__version__)"
    
  2. 查阅文档
    访问 PyTorch 的官方文档或 GitHub 仓库,查找 TorchDispatchMode 或相关功能的信息。确认该功能是否存在于你的 PyTorch 版本中,或者是否有替代的实现方式。

  3. 更新 PyTorch
    如果你的 PyTorch 版本较旧,尝试更新到最新版本。可以使用以下命令更新 PyTorch(假设你使用的是 Conda):

    conda update pytorch torchvision torchaudio cudatoolkit=xx.x -c pytorch
    

    其中 xx.x 应替换为你需要的 CUDA 版本号(如果你使用的是 GPU 版本)。

  4. 避免使用内部API
    如果可能,避免使用 PyTorch 的内部模块和API。这些API通常不稳定,可能会在将来的版本中更改或删除。

  5. 寻求社区帮助
    如果以上步骤都不能解决问题,你可以在 PyTorch 的 GitHub 仓库、Stack Overflow 或 PyTorch 社区论坛中寻求帮助。

通过以上步骤,应该能够解决导入错误的问题,或者找到替代的实现方法。


我的做法

是上面分析的思路的,由于pytorch1.x里面不包含这个,我的是torch1.12.0,版本不能换,所以要找替换方案。

参考解决办法:https://github.com/sovrasov/flops-counter.pytorch/issues/137

@euminds please upgrade your torch version to 2.x if possible, or downgrade ptflops. torch 1.x does not support TorchDispatchMode

pip install ptflops==0.7.2.2

useful!(btw, with torch==1.11.0)

$ pip install ptflops==0.7.2.2
Requirement already satisfied: ptflops==0.7.2.2 in /home/nvidia/.conda/envs/env_name/lib/python3.8/site-packages (0.7.2.2)
Requirement already satisfied: torch in /home/nvidia/.conda/envs/env_name/lib/python3.8/site-packages (from ptflops==0.7.2.2) (1.12.0a0+2c916ef.nv22.3)
Requirement already satisfied: typing-extensions in /home/nvidia/.conda/envs/env_name/lib/python3.8/site-packages (from torch->ptflops==0.7.2.2) (4.12.2)

作者:Eternal-Student

物联沃分享整理
物联沃-IOTWORD物联网 » 【python error】cannot import name ‘TorchDispatchMode‘ from ‘torch.utils._python_dispatch‘

发表回复