Trouble/Python, Pytorch 9

Pycharm 에서 matplotlib.pyplot 사용 시, module 'backend_interagg' has no attribute 'FigureCanvas' 문제

pycharm과 matplotlib.pyplot 둘 다 python 코딩할 때 굉장히 많이 쓰는데 특정 조합에서 다음과 같은 에러가 났었다. AttributeError: module 'backend_interagg' has no attribute 'FigureCanvas' 나 같은 경우, pycharm 2020 + matplotlib 3.8.2로 사용했을 때 위 오류가 났다. 위 에러는 site-packages/matplotlib.pyplot.py, line 343 에서 발생한 오류라서 matplotlib 자체 오류이고 뭔가 코딩을 잘못해서 그런 것은 아니다. 원인 이런 오류의 대부분은 버전 문제이듯이, 이 문제도 기본적으로 버전 문제가 맞다. FigureCanvas는 버전 3.6에서 deprecated..

ERROR:optimizer got an empty parameter list

최근 python으로 최적화 코드를 짜던 와중 발견한 오류다. pytorch의 nn.Parameter를 이용해서 짜거나 CVPR2023에 공개된 pypose (https://github.com/pypose/pypose) 의 pp.Parameter를 이용해서 짤 때 발견된다. 참고로 pypose는 pytorch와 호환되도록 짜여져있어서 똑같은 에러가 발생했다. 오류명에서도 알 수 있다시피 pytorch optimizer나 pypose optimizer 모두 optimzier 에게 최적화 대상이 되는 Neural network model 혹은 Error model의 파라미터를 넘겨주어야 하는데 이게 없다는 소리다. 즉, optmizer(model)로 초기화를 할 때 model.parameters()가 호출되..

numpy.ndarray size changed, may indicate binary incompatibility 문제

numpy.ndarray size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject SDK를 사용하거나 다른 코드를 가져와 사용할 때 위와 같은 오류를 볼 수 있다. 이름에서 알 수 있다시피 numpy와 관련된 호환성 문제라는 것을 알 수 있다. 뒤에 96, 88과 같은 숫자가 사용하려는 SDK 및 코드들과 numpy의 버전을 암시하는 숫자인데 이를 알 필욘없다. 해결 방법은 가장 단순하게 numpy를 다시 깔아주는 것이 좋다. pip uninstall numpy pip install numpy ----- pip install --upgrade numpy 만약 최신 버전으로 업그레이드해서..

RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method

torch로 학습 코드 작성 중에 제목 혹은 위와 같은 에러가 났다. 오류명에 적혀있듯이, multiprocessing을 사용하고자 하는 과정에 발생하는 에러인데 대놓고 torch.multiprocessing을 사용한 적이 없음에도 오류가 났다. 간단히 찾아보니 대부분 torch DataLoader 클래스 사용 시 num_workers를 지정해서 데이터를 불러올 때 그런다고 한다. 내부적으로 torch.multiprocessing을 사용하기 때문인데 해결 방법은 다음과 같다. torch.multiprocessing.set_start_method('spawn') 코드 도입부에 위와 같은 설정을 선언해주면 된다. 간단하다.

PyCharm 사용시, module 'io' has no attribute 'OpenWrapper' 문제

열심히 코딩하던 중 다음과 같은 오류가 나면서 파이참이 멈췄다. Fatal Python error: init_sys_streams: can't initialize sys standard streams Python runtime state: core initialized AttributeError: module 'io' has no attribute 'OpenWrapper' Current thread 0x00007fcc72266740 (most recent call first): 구글링했을 때 PYTHONPATH가 어쩌구 저쩌구 나오는데 원인은 단순하다. 현재 프로젝트 내에 io 라는 이름의 폴더나 파일이 있기 때문이다. 해당 파일을 Refactor 해주면 간단히 해결된다. 한참 시간 쓴게 허무하다.

torch.cdist 사용 시 유의점

torch.cdist 는 document에 따르면 다음과 같은 기능을 한다. 요약하자면, tensor와 tensor 간의 distance matrix를 반환해주는 함수라고 할 수 있다. 대표적으로 3D points 간 거리 계산에 유용하게 쓰인다. x,y,z로 표현 되는 3D point 집합 X와 Y가 있고 각각 N개, M개의 3D point로 구성되어 있다고 했을 때, X와 Y 집합 간 서로 최단 거리로 이웃한 점들을 선별할 때나 특정 거리 이내의 이웃한 점들은 선별할 때 자주 사용하게 된다. 하지만, 가끔 제대로 기능하지 않는 듯한 모습을 보일 때가 있어 이를 정리하고자 한다. "가끔 제대로 기능하지 않는 듯한 모습"은 크기가 25 이상인 경우에 발생했다. 위 document에 따르면 P나 R이 25..

torch_geometric/pyg 사용 시 propagate 혹은 forward 오류 해결법

Graph neural network 구현을 용이하도록 개발된 torch_geometric 혹은 요즘 새로운 이름 pyg를 사용할 때, 모든 오류를 고쳐서 가까스로 import 했더니 propagate나 forward 에서 터져버리는 오류가 날 때가 있다. 온갖 구글링 결과, 같은 상황으로 고통받던 한 사람이 단순히 open3d와 torch의 import 순서를 바꿨더니 해결했다는 말이 있었다. 다시 말하면, 왜 그런지 모르겠는데 open3d가 torch 이전에 import 되어있을 때 났다 import open3d import torch # this order causes torch_geometric error 위와 같은 순서로 하면 오류가 나고 import torch import open3d # th..

RTX 3090 GPU pytorch error : cuda 사용 안되는 문제

RTX 3090 GPU를 장착한 컴퓨터에서 conda나 pip로 pytorch를 그냥 설치할 경우, 아래와 같이 cuda 사용이 안된다는 오류가 뜰 때가 있다. RTX A6000 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the RTX A6000 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/ 이유는 적혀있는대..