사소한 부분이지만 pytorch 프레임 워크를 사용하여 학습이나 GPU 연산을 할 때

torch를 매번 device에 올려주는 것이 번거로울 수 있다 

 

 

 아래는 보통 일반적으로 python에서 pytorch를 사용할 때 이미지 등의 텐서를 gpu로 설정해주는 코드이다 

 

 

 

또한 일반적으로 numpy를 torch tensor로 변형하면 아래와 같이 cpu에 로드되면서 tensor로 변형된다 

 

 

위 두가지 경우 새로운 tensor를 생성하면 cpu에 로드되며,

아래의 경우처럼  numpy 등 타 data type에서 tensor로 변형했을 시 본래의 data type을 그대로 이어받게 된다 

 

그러나 tensor 연산 시 두 텐서가 data type이 다르거나 로드되어있는 디바이스가 다르면 연산이 진행되지 않는다 

(아래는 두 tensor의 device가 다른 경우)

 


 

위와 같은 두 가지 귀찮은 경우를 방지해 주기 위해 아래와 같은 코드를 최상단에 적어주면 

tensor의 기본 device와 data type을 설정할 수 있어 보다 편리한 디버깅 및 학습이 가능하다 

 

torch.set_default_tensor_type('torch.cuda.FloatTensor')
# () 내부에 원하는 device와 data type 설정

 

 

torch 세팅 후 rand로 tensor 설정해주자 가장 첫번째 사진처럼 
torch.rand (기본 설정 data type=double)로 tensor를 생성해도 
gpu에 로드되어있는 float32타입의 tensor가 생성되는 것을 확인할 수 있다. 

 

 


소소한 기능이고 코딩 습관에 따라 오히려 불편할 수도 있겠지만, 
소소하게 편리한 학습이 가능한 코드 발견해서 로그! 😀

 

 

#Expected all tensors to be on the same deivce

#tensor device 설정

#Can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first

github 내가 자주 쓰는 커맨드들 한번 정리하긴 해야되는데...

매번 생각하면서 일단 오늘은 오늘 해결한 에러부터 아카이빙!

 

vscode에서 github을 쓰면 자동으로 commit tracking도 해주고, 

privae repository push pull할때 비번도 저장해주고 좋은 기능이 많긴한데, 

가끔은 쓸데 없이 강한 보안을 보이기도 한다...

오늘 만난 에러도 그 중 일부

 

에러메세지: 

Missing or invalid credentials.
Error: connect ECONNREFUSED /run/user/1022/vscode-git-131701c717.sock

 

 

git clone, push, pull 등등에서 요즘 반복적으로 이런 에러를 만난다. 

 

해결책1. 비슷한 권한 문제가 요즘 많이 생겨서 

git.name, email, 비번을 저장해서 일시적으로 해결했다

 

git config --global user.name {이름}
git config --global user.email {이메일}

아래는 github 계정의 토큰을 내가 사용하려는 원격저장소에 한해서 저장하는 방법이다

단, clone은 이미 진행되어서 로컬-원격이 연결된 상태에서 사용가능한다. 

git remote set-url origin https://{토큰}@github.com/{연결하려는 저장소 유저 이름}/{레파지토리}.git
# ex. git remote set-url origin https://{토큰}@github.com/Seonjipark/SNU_FaceDetection.git

# github access token을 모른다면 아래 게시글 참조해서 발급받고 저장해둘 것!

https://curryyou.tistory.com/344

 

GitHub 토큰 인증 로그인: Personal Access Token 생성 및 사용 방법

Git Hub에서 ID/PW기반의 Basic Authentication 인증을 금지하고, ID/Personal Access Token 방식의 Token Authentication 인증을 요구하고 있다. 앞으로는 소스코드를 push/clone하려고 하면, 아래와 같은 문구가 뜨면서

curryyou.tistory.com

 

 


해결책2. 근데 1번 방법으로 해결해줘도 authentic error가 계속 일어나고, 

심지어 이건 clone시에는 사용하지도 못한다

그래서 검색해본 결과 vscode가 문제라는 것을 알 수 있었고

settings에 git.terminal을 검색해서 Git:Terminal Authentication 체크박스를 해제해주면 문제가 없어진다

 

오늘도 해결완료!

세상에서 제일 짜증나는 상황 중 하나..

nvidia-smi하면 GPU util은 분명 먹고 있으나 process name에는 안잡히는 상황이 종종 생긴다 

생긴다고 듣기만 했지 내가 만난 적은 두번째였고 

첫번째는 선배가 알아서 꺼줘서 내가 해결해본적이 없어서 오늘은 내가 해결해야했다 ! 

 

일단 첫번째는 구글링 & chatGPT.. 

chatGPT의 추천대로 

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

위 커맨드로 검색하니 진짜 PID는 나온다 !! 

 

근데 PID는 뜨는데 kill -9 PID를 치면 No such process라고 뜨는 얼척 없는 상황 발생..?

 

대충 이런 상황이 내가 쓰던 메모리들이

CPU-GPU단에서 기존 프로세스 종료할 때 종료되지 않고

잔여한 상황이라는 거는 알아서 PID로 정상적으로 한번에 종료되진 않을 수도 있다고는 생각했지만

뭐라고 검색해야할 지 몰라서 막막한 상황...

 

결국 htop가 nvidia-smi보다 정확할테니 

htop로 들어간 후 MEM 기준으로 sorting하니 상위 프로세스가 떠서 

상위에 뜨는 PID들을 하나하나씩 다 삭제해주니 결국 util이 0이 되었다 

참고로 htop에 뜨는 PID들은 아주 많았고, 위 커맨드로 찾은 8292는 아니었다..

왜 그런지는 자세히는 모르고, 깔끔한 해결책을 찾은 것도 아니지만 일단 해결했으니 아카이빙 😇

 

+) 추가: 이 GPU 유령 memory 문제는 대부분 DDP module이나 dist 모듈 등 

multi GPU를 사용할 때 생기는 문제라는 거를 알아냈다

공부 참고자료: https://gaussian37.github.io/ml-concept-t_sne/

 

t-SNE 개념과 사용법

gaussian37's blog

gaussian37.github.io

 

위 글로 공부하면서 내가 필요한 포인트만 정리:

t-분포는 소표본으로 모평균을 추정하는 분포로, 

모집단이 정규분포와 유사하나, 모표준편차를 모를때 주로 사용한다 

 

일반적으로 정규분포보다 큰 표준편차를 갖는다고 가정하는데, 

이는  정규분포 상에서는 i 번째 변수와 적당히 떨어진 j, 멀리 떨어진 k의 확률이 꼬리로 갈수록 차이가 나지 않기 때문이다.

큰 표준편차를 갖는(=꼬리가 두터운) 분포를 가정하면 변수끼리의 거리가 확률의 차이에 반영된다. 

 

 

 

 

t-sne는 비선형적 방법 / PCA는 선형적 방법이다 

t-sne는 iterative한 방법으로 feature 집단을 계산하고 sklearn을 이용하는 방법은 아래 매뉴얼을 따라하면 된다

https://scikit-learn.org/stable/modules/generated/sklearn.manifold.TSNE.html 

'딥러닝 공부 > 짧은 AI' 카테고리의 다른 글

어쩌다보니 공부한 domain adaptation  (0) 2023.01.09
Representation Learning  (0) 2022.08.18

문득 카페에서 t-sne 사용법을 위해 PCA에 대해 공부를 다시 하다가 

학습을 전달하는 교육자나 학습을 받아들이는 학생이나 

모두 첫 시작은 "이것을 왜 배우는가"에 대한 고민이어야 한다는 점이 다시 한번 와닿았다. 

 

학창시절 방학특강 등으로 고등수학을 선행하다보면 "그래서 이게 뭔소리..?"라는 생각이 자주 들었다.

지금 당장 내용을 이해할만큼 머리가 성숙한 것도 아니고,

어떻게든 이해하도록 반복학습을 할 단원도 아니니 단순히 머릿속을 스쳐지나가는 과정이 되어버렸다.

 

그래서 나는 중학생을 과외할 때도 항상 이 과정의 단원은 왜 이렇게 구성되어 있는지, 

이걸 지금 배워서 나중에 뭐에 써먹는지를 설명해주고 시작한다 

(예를 들어, 극한을 배울 때는 나중에 미분을 할 때 이렇게 저렇게 사용한다,

삼각함수를 배울 때는 이건 각도를 실수로 바꾸는거다 or 길이나 넓이를 구할 수 있다 등등)

 

학부시절에 사실 공부에 너무 집중을 못했는데 

공학수학을 배울때 당최 이걸 왜 배우는지.. 를 이해를 못해서 마음이 안붙었던 것 같다 (라는 좋은 핑계이지만..)

PCA도 학부 / 대학원 거치면서 10번도 넘게 배웠을텐데 

연구에 필요해서 찾아보니 드디어 기억속에 어떻게 구하는 건지 제대로 자리잡아 장기기억으로 넘어간 것 같다

 

나중에 교육을 다시 업으로 하는 날이 온다면 꼭 기억하고 싶어서 짧게 기록해둔다

무엇이던 그걸 왜 하는지 목표설정과 이해가 우선이다 !

 

Lecture: Computer Vision by Andreas Geiger 

본 게시글은 아래 링크의 Andreas Geiger 교수님의 튀빙겐 대학의 CV 강의를 듣고 사견과 함께 요약/정리한 글입니다 

https://www.youtube.com/playlist?list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_ 

 

Computer Vision — Andreas Geiger

Lecture: Computer Vision (Prof. Andreas Geiger, University of Tübingen) Course Website with Slides, Lecture Notes, Problems and Solutions: https://uni-tuebin...

www.youtube.com


Artificial Intelligence

: AI란 추상화과 컨셉화를 통해 사람에게 주어진 문제를 해결(또는 해결 보조)하려는 시도이다. 

아래와 같은 세부 분화들을 포함하고 있다. 

https://www.youtube.com/watch?v=mQgjfvjjW3Q&list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_&index=2

 

Computer Vision

: Computer Vision은 light를 의미로 재구성하는 것이다 

그 응용으로는 Robotics, Medial applications, 3D modeling, Autonomous Driving 등이 있다 

 

Computer Vision vs Computer Graphics

Computer Vision vs Image Processing

: IP에 CV가 관여하기도 한다. IP는 본 강의의 주요 범위는 아님

Computer Vision vs Machine Learning

: ML의 많은 툴들이 CV에 적용되고 있으며

ML이 CV의 실행 시간을 많이 줄여주었기 때문에 CV가 상업적으로 성공할 수 있었던 요인중 하나이다. 

특히 2015년 ImageNet Classification Challenge에서 ResNet이 

사람의 오차범위를 넘는 성능을 보여주면서 CV의 전반에 ML이 자리잡았다

 

https://www.youtube.com/watch?v=mQgjfvjjW3Q&list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_&index=2

 

 

Why is Visual Perception Hard?

: 우리가 사진을 보는 방식과 컴퓨터가 사진을 보는 방식이 다르다

같은 사진을 0~255 사이의 픽셀값으로 본다면 의미를 찾는 것이 더 어렵다. 

 

또한 이미지는 3D 세상의 Projection이고, 그 과정에서 소실되는 정보가 있다

(사족: 그러한 소실되는 정보에 대해 추상화가 가능한 사람은 의미를 파악하는게 쉽지만,

Machine은 그러한 추상화를 할 수 없다.)

또한 View point와 illumination 등에 따라 물체의 pixel이 바뀐다. 

같은 의자라도 다양한 모양을 갖기 때문에 추상화가 더더욱 필요하다

'딥러닝 공부 > 주제별 정리' 카테고리의 다른 글

[CV] 1.1 Introduction - Organization  (0) 2023.08.20

Lecture: Computer Vision by Andreas Geiger 

본 게시글은 아래 링크의 Andreas Geiger 교수님의 튀빙겐 대학의 CV 강의를 듣고 사견과 함께 정리한 글입니다 

https://www.youtube.com/playlist?list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_ 

 

Computer Vision — Andreas Geiger

Lecture: Computer Vision (Prof. Andreas Geiger, University of Tübingen) Course Website with Slides, Lecture Notes, Problems and Solutions: https://uni-tuebin...

www.youtube.com

 


Computer Vision이란 무엇인가? 

: 사람의 인지 능력을 machine으로 구현하려는 시도이며, light(이미지)를 의미로 재해석하는 방법이다. 

 

예를 들어, 2D-3D의 예시를 들었을 때 아래와 같이 unconstrained된 이미지의 모음을 

재해석하고 조립하여  새로운 view와 새로운 appearance의 이미지를 생성할 수 있다. 

 

https://www.youtube.com/watch?v=YW1cIaOBkI8&list=PL05umP7R6ij35L2MHGzis8AEHz7mg381_&index=1

 

 

'딥러닝 공부 > 주제별 정리' 카테고리의 다른 글

[CV] 1.2 Introduction  (0) 2023.08.20

상황: NeRF 계열 공부중 pytorch3d 를 기존 3090 사용 서버에서 잘 쓰고 있었는데 

서버 옮기면서 CUDA 버전 충돌로 가상환경 설치 실패 2일차...

선배에게 CUDA toolkit-dev에 대한 설명 듣고 이틀더 삽질 후 결국 성공!

누군가 검색해서 들어온 후 도움이 되기를 바라면서 + 내가 나중에 이 error 또 겪을까봐 남기는 로그

 

서버환경: 

CUDA Version: 12.1 

Driver Version: 530.30.02

GPU: Geforce RTX 3090 (ref)

Ubuntu: 18.04 LTS

 

설치해야하는 모듈: pytorch 및 pytorch3d (implicitron 포함)

 

결론: pytoch3d 가이드에서 주는 모듈 설치 순서는 의외로 굉장히 중요하다

stackoverflow 만만세

 

pytorch3d 요약: 

아래 코드가 다 돌아간다면 pytorch3d 자체의 문제는 아닌 것 같다가 내 결론

3번째 줄은 당연 Implicitron을 사용하는 사람들에게 해당하고, 마지막 줄은 대표적인 pytorch3d 설치 경로문제에서 

import 가 안되는 모듈인 것 같다 

import torch
import pytorch3d
import pytorch3d.implicitron
from pytorch3d import _C

아래 순서는 중간중간 기록한 것이 아니라 틀릴 수 있음

 

첫번째 Error: python 3.8 + pytorch 13.1 + conda install pytorch3d

-> pytorch3d 설치를 위해 검사하는 중  CUDA version이 11.7 인데(pytorch 설치 CUDA 버젼) 9.1CUDA를 사용하는 모듈이 있어서 

충돌이 일으켰다는 에러메세지가뜸 

=> 9.1..?을 사용한다는 메세지가 뜨기는 하는데 워낙 충돌로 뜨는 모듈이 많아서 뭐가 뭔지 모르겠는 상황

이래저래 검색을 해봐서 뚜렷한 해결책이 없어서 연구실 동료들한테 SOS 침

=> 선배가 nvcc -V로 뜨는 local CUDA version을 11.7로 맞춰주면 된다는 정보 입수

=> 아직 local CUDA랑 기존 CUDA의 차이를 모르겠는데 공부 필요..

 

첫번째 해결책: 아무튼 torch 설치 -> CUDA toolkit-dev 설치 -> pytorch3d 순으로 설치하면 된다는 꿀정보와 함께 

CUDA toolkit-dev 가 설치하는데 제법 여러시간 소요된다는 절망적인 정보를 함께 얻음... :(

 

CUDA toolkit- dev 설치 방법

: conda install -y -c conda-forge cudatoolkit-dev

 


두번째 Error: (정확히 재보진 않았지만) 약 3-4시간 안쪽으로 걸리는 CUDA toolkit-dev 여러번 설치했는데도 자꾸 꼬임 ㅜ

현상: pip install pytorch3d 로 설치하면 0.7.3버젼이 아닌 0.3.0버젼이 설치되서

from pytorch3d import implicitron하면

"No Module Named implicitron"이 뜨거나 implicitron 안의 일부 모듈이 없다고 뜸

=> implicitron이 설치에러가 많은 듯하여  pytorch3d 공식 문서에 들어가면 여러 issue log에서 도움을 받을 수 있다

 

https://github.com/facebookresearch/pytorch3d/tree/main/projects/implicitron_trainer

 

GitHub - facebookresearch/pytorch3d: PyTorch3D is FAIR's library of reusable components for deep learning with 3D data

PyTorch3D is FAIR's library of reusable components for deep learning with 3D data - GitHub - facebookresearch/pytorch3d: PyTorch3D is FAIR's library of reusable components for deep learning...

github.com

 

 

두번째 해결책: 사실 이건 내가 고오집 부려서 일어난 일인듯....

순서가 틀리면, 특히 저 iopath 설치 순서를 잘못 맘대로 설치하면 환경이 여러번 꼬인다,,,, 

 

pytorch3d 공식 문서와 내가 돌리려고 하는 코드의 매뉴얼을 조합해보면 아래와 같다

conda create -n pytorch3d python=3.8
conda activate pytorch3d
conda install -c conda-forge ninja # 내가 돌릴려는 code의 매뉴얼
conda install -c conda-forge cxx-compiler=1.3.0 # 내가 돌릴려는 code의 매뉴얼
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch
conda install -y -c conda-forge cudatoolkit-dev

conda install -c fvcore -c iopath -c conda-forge fvcore iopath
pip install "git+https://github.com/facebookresearch/pytorch3d.git@v0.7.2"
# or
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"

3,4번째 줄은 현재 내가 돌릴려고 하는 코드의 추천 매뉴얼이고 pytorch3d 공식 문서에 해당하는 내용은 아님!!

5번째 줄 pytorch 설치는 내 서버 환경에서는

pytorch 1.11.0 + cudatoolkit 11.3 

pytorch 1.13.1 + cudatoolkit 11.7

위 두개의 조합이 성공했다 

아래 pytorch install 링크에서 각자 환경에 맞게 설치할 것 !! 

https://pytorch.org/get-started/previous-versions/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

 


세번째 Error: 여까지 이틀 버리고 드디어 pytorch3d.implicitron까지 전부 import가 되고 코드는 돌아가는데..!

새로운 에러 등장... 이쯤에서 걍 다른 서버쓸까 고민함...

그것도 해결책을 검색해보면 죄다 GPU 공간이 없어서 생기는 문제라는 데 나는 아니라구요.. 

사용하려는 GPU memory도 비어있고, GPU 인식 순서가 잘못 인식된 것도 아닌데 

자꾸 아래 메세지 두개가 떴다 

(웃긴건 어떨땐 1번 메세지, 어떨땐 2번 메세지가 뜸... 둘다 검색해보면 GPU memory 문제라고 하는 사람들만 있음 ㅜㅜ )

 

1. RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

2. RuntimeError: CUDA error: out of memory                                                                                                                
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.                                 
For debugging consider passing CUDA_LAUNCH_BLOCKING=1. 

 

https://discuss.pytorch.org/t/runtimeerror-cudnn-error-cudnn-status-not-initialized/115286

 

RuntimeError: cuDNN error: CUDNN_STATUS_NOT_INITIALIZED

I am doing training and put the dataset inside the data folder. The Structure looks like this. –data -----mars ---------bbox_train ---------bbox_test ---------info Many developers said that this is a label problem but I am not not sure because labels are

discuss.pytorch.org

 

세번째 해결책: 일단 위의 글을 참고하긴 했는데.. 어쩔땐 저 1번 에러가 결국 CUDA와 torch 버젼의 충돌때문에 일어난다는 거인듯?

원인만 파악하고 나의 경우엔 torch 만 돌릴때는 문제가 없었기 때문에 해답을 못찾았고

더 검색한 끝에 

2번 메세지 문제 해결 + GPU인식 문제 해결을 동시에 하기 위해 아래 코드처럼 python을 실행시키면 된다는 도움을 받았다 


CUDA_LAUNCH_BLOCKING=1 && export CUDA_VISIBLE_DEVICES=0 && python ~~~

 

저 CUDA_LAUNCH_BLOCKING=1 커맨드가 뭘 해결하는 건지는 일단 

실험이 마무리되는 대로 더 공부해야겠지만 드디어 장장 4일의 삽질끝에 가상환경 세팅 완료 !!!

 

다시 행복 대학원생으로 돌아가서 실험만 하면 된다......

이 글을 검색해서 들어오는 모든 3D 연구자들 화이팅 ✌️

+ Recent posts