PyTorch,属性错误:模块'torch'没有属性'_utils_internal'。

3

我需要在没有GPU的环境下测试一些fastai模型,特别是在Windows服务器上。我在Google Colab中训练了一些fastai模型,现在需要实时测试这些模型,与工业流程连接。然而,我的硬件受限。

在Google Colab中,我使用了这个配置。

from fastai.vision import *
from fastai.metrics import error_rate
from PIL import Image as PImage
import numpy as np
import cv2
import os
import pandas as pd

第一行是唯一有问题的行,我遇到了这个错误:

  ~\.conda\envs\fastai_1\lib\site-packages\fastai\vision\__init__.py", line 3, in <module>
    from .learner import *

  ~\.conda\envs\fastai_1\lib\site-packages\fastai\vision\learner.py", line 6, in <module>
    from . import models

  ~\.conda\envs\fastai_1\lib\site-packages\fastai\vision\models\__init__.py", line 2, in <module>
    from torchvision.models import ResNet,resnet18,resnet34,resnet50,resnet101,resnet152

  ~\.conda\envs\fastai_1\lib\site-packages\torchvision\__init__.py", line 4, in <module>
    from .extension import _HAS_OPS

  ~\.conda\envs\fastai_1\lib\site-packages\torchvision\extension.py", line 51, in <module>
    _register_extensions()

  ~\.conda\envs\fastai_1\lib\site-packages\torchvision\extension.py", line 47, in _register_extensions
    torch.ops.load_library(ext_specs.origin)

  ~\.conda\envs\fastai_1\lib\site-packages\torch\_ops.py", line 99, in load_library
    path = torch._utils_internal.resolve_library_path(path)

AttributeError: module 'torch' has no attribute '_utils_internal'

我需要按照pytorch本地安装的建议通过conda安装Pytorchhttps://pytorch.org/get-started/locally/,但是为了使用fastai,我需要使用pip安装。由于我的服务器硬件受限,无法使用conda。

# for Pytorch
conda install pytorch torchvision torchaudio cpuonly -c pytorch
# for fastai
python -m pip install fastai==1.0.61

我的torch版本是1.9.0 我的python版本是3.7.7

我查看了几个类似的线程,都涉及到特定错误而不是“_utils_internal”这个属性未找到的问题。

感谢任何帮助。


1
你找到答案了吗?我也遇到了同样的问题。 - Sanchay Kasturey
当我尝试使用 torchmetrics 时,遇到了这个确切的错误。将版本从0.9.3降级到0.7.0对我来说很有效。 - Kraigolas
1个回答

0
我遇到了同样的问题(Pytorch 1.11.0,Torchvision 0.12.0,CUDA 11.3,Python 3.10),并想出了一个有点“hacky”的解决方法。
首先,我检查了给定位置中的文件_ops.py,它确实包含了语句和函数:
import torch._utils_internal
...
path = torch._utils_internal.resolve_library_path(path)

同时 _utils_internal.py 可用,其中包含以下语句和函数:

import os
...
def resolve_library_path(path: str) -> str:
    return os.path.realpath(path)

由于我并没有真正理解问题所在,所以我决定将返回的表达式复制到 _ops.py 文件中,并添加 os 导入。因此现在它包含:

import os
...
path = os.path.realpath(path)

它有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接