Trouble/Python, Pytorch 12

pytorch lightning 사용 시 RuntimeError: Trying to resize storage that is not resizable 문제

제목 그대로 pytorch lightning을 사용하다 보면 갑자기 듣도 보도 못한 에러를 만날 때가 있다. RuntimeError: Trying to resize storage that is not resizable 에러의 기본적인 의미는 사용하는 torch tensor가 numpy array랑 메모리를 공유하도록 되어있어서 tensor를 함부로 resize할 수 없다는 뜻인데 일반적인 상황에서 torch.from_numpy() 같은 걸 썼다면 단순히 끝에 .clone()을 붙여주면 해결되는 문제다. (아니면 numpy array를 깊은 복사해서 사용하거나) 근데 pytorch lightning이랑 사용할 때는 문제가 감추어져 있더라. pytroch lightning은 데이터셋만 정의하면 나머지 로딩은..

c++ 모듈 compile 시 numpy 못 찾는 문제

triangle_hash.cpp:1253:10: fatal error: numpy/arrayobject.h: No such file or directory 1253 | #include "numpy/arrayobject.h" | ^~~~~~~~~~~~~~~~~~~~~compilation terminated.error: command '/usr/bin/g++' failed with exit code 1 최근 voxelize하는 cpp module을 컴파일하던 도중에 numpy를 못찾는 문제가 발생했다. 검색해보면 numpy 버전 문제를 언급하는 경우가 많은데, 버전 교체로 효과를 못봐서 조금 고생했다.  해결법은 명시적으로 numpy 어딨다고 export 해주면 된다.  해결법imp..

ImportError: ../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found

pytorch 쓸 때도 위와 같은 오류가 발견되곤 한다고 하는데, 나는 Instant-ngp를 사용하는 과정에서 위 오류를 만났다.  pyngp_path = '/home/jseob/Desktop/yjs/codes/instant-ngp/build'sys.path.append(pyngp_path)import pyngp as ngp 위와 같이 instant-ngp build가 완료되면 pyngp.cpython-38-x86_64-linux-gnu.so 와 같은 파일이 생긴 build 폴더가 생기고, 그 경로를 환경 변수에 넣어준다면 ngp가 정상적으로 import 되어야 한다. (No module named pyngp 오류가 난다면 그건 build가 잘못된 것. 아마 build할 때 환경과 사용하는 환경의 py..

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..