각종 에러들을 해결 해 보자

torch | attributeerror: 'upsample' object has no attribute 'recompute_scale_factor'

토오오끼 2022. 7. 4. 21:42
728x90
반응형

 

우분투를 다시 한번 싹- 밀고 날 것 그 자체의 환경에서

이전에 개발했던 객체 검출 모델을 사용한 코드의 동작 테스트를 진행하던 중 아래와 같은 에러를 마주했다.

 attributeerror: 'upsample' object has no attribute 'recompute_scale_factor'

 

File /usr/local/lib/python3.8/site-packages/torch/nn/modules/upsampling.py:154, in Upsample.forward(self, input)
    152 def forward(self, input: Tensor) -> Tensor:
    153     return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
--> 154                          recompute_scale_factor=self.recompute_scale_factor)

File /usr/local/lib/python3.8/site-packages/torch/nn/modules/module.py:1185, in Module.__getattr__(self, name)
   1183     if name in modules:
   1184         return modules[name]
-> 1185 raise AttributeError("'{}' object has no attribute '{}'".format(
   1186     type(self).__name__, name))

AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'

위의 두 부분 말고도 더 많은 문구가 있었지만 가장 핵심인 부분만 가져와 넣었다.

 

해당 코드를 동작시키는 환경은 RTX3080, CUDA 11.1, CUDNN 8.0.5, python 3.8,

cudatoolkit==10.2, torch==1.11.0, torchvision==0.10.0, torchaudio==1.12.1이다.

 

처음엔 torch 버전을 잘못 설치한 것 같아서 이전에 작성했던

https://iambeginnerdeveloper.tistory.com/176?category=916615 

 

CUDA | RuntimeError: CUDA error: no kernel image is available for execution on the device

pc에 문제가 생겨서 우분투를 한번 싹 밀고(사실 한 번이 아님.. ㅠ...) 새로 Ubuntu 20.04 LST를 설치하고 아나콘다, vscode, nvidia-driver, CUDA 설치까지 마친 후에 Yolo v5 모델을 사용하려는데 아래와 같은..

iambeginnerdeveloper.tistory.com

 

해당 글을 보고 torch를 재 설치하였으나 해결이 되지 않았다.

 

그래서 에러 문구를 내 뱉은 코드를 하나씩 들어가 보았고 

File /usr/local/lib/python3.8/site-packages/torch/nn/modules/upsampling.py:154, in Upsample.forward(self, input)
    152 def forward(self, input: Tensor) -> Tensor:
    153     return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
--> 154                          recompute_scale_factor=self.recompute_scale_factor)

해당 upsampling.py 코드에서 154번째 줄에서 에러가 발생하였기에 열심히 구글링을 해 보았다.

 

찾아보니까 python 3.8 환경에서 torch 버전이 1.10.0보다 높을 때 발생하는 에러같았고 torch 버전을 1.10.0보다 낮추거나 해당 부분을 주석처리하면 해결된다는 것이다.

 

그래서 아래와 같이 umsampling.py에서 해당 부분을 주석처리하고

다시 코드를 작동 시켰더니 에러가 발생하지 않고 제대로 작동하였다.

def forward(self, input: Tensor) -> Tensor:
    return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
                         # recompute_scale_factor=self.recompute_scale_factor
                         )

 

 


+)

주석처리만으로도 해결이 된다는 찝찝함에 torch 버전을 낮추자니 설치된 cuda 버전이랑 torch 버전이 안맞으면 cuda runtime error가 발생해서 선택권이 없었다.

주석처리가 가장 좋은 방법인 건 맞는지 의문이지만 열심히 구글링 해 본 결과 주석처리가 최선인 것 같긴 하다....

728x90
반응형