사소한 부분이지만 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

+ Recent posts