상황: 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 연구자들 화이팅 ✌️

다른 도메인에 맛집 기록이랑 일기 쓴다고 바빠져서 + 귀찮음 / github블로그로 옮길까 고민하며

티스토리 블로그는 버려둔지 오래..

 

이런 상황에서 공부 기록용 티스토리 블로그를 찾지 않을 수가 없는 대 사건이 일어난다

이름하여 chatGPT 열풍,,

 

그 시작은 연구실에서 어느날 얼리어답터인 어떤 선배가 chatGPT라는게 나왔고 

그걸 검색엔진으로 만들수 있는 확장이 나와서 써봤다 ~~ 하는 얘기를 들은것 !

첨 듣고는 그렇구나 ~ 하고 넘겼는데 어느 주말 개인 공부하다 찾아보니,, 

이거 진짜 대박이구나,, 싶어서 기록으로 남겨야 겠다는 생각이 들었다  

 

chatGPT가 등장한지도 벌써 근 3달이 다되간다. (22.11.30 개시)

https://openai.com/blog/chatgpt/

 

ChatGPT: Optimizing Language Models for Dialogue

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is

openai.com

 

GPT야 워낙에 대단하다는 걸 알아왔지만 챗GPT는 내가 느끼기엔 새로운 인터넷의 등장이 아닐까 싶다

예전에 어느 전문가가 "AI는 4차 산업혁명 시대의 새로운 전기다"라는 말을 한걸 들었는데

이제는 chatGPT가 4차 산업혁며 시대의 새로운 전기다 라고 해야하지 않을까? 

 

주변 직장인들 말을 들어보면 갑자기 교육에, 인사에, 마케팅에, 기획에 딥러닝을 접목해보라고 했다는 오더들이 내려왔다 하고,

주식만 봐도 chatGPT 관련주 열풍에 (엔비디아, 로블록스, 메타, 국내 메타버스 주들 등등)

뉴스만 봐도 대통령이 chatGPT에 관한 특별 지시들과 신년인사를 chatGPT로 써보았다는 뉴스가 있다

 

https://mobile.newsis.com/view.html?ar_id=NISX20230127_0002171728#_enliple 

 

尹 "챗GPT, 오랜 조력자같은 문장"…참모들은 미래기술 '열공' 중

[서울=뉴시스] 양소리 기자 = "윤석열 대통령이 최근 신생 챗봇 챗GPT(ChatGPT)를 이용한 뒤 상당히 깊은 관심을 보이고 있다

mobile.newsis.com

 


개인적으로 챗GPT에 느꼈던 점을 이래저래 써보면 

우리나라에서 랭귀지 딥러닝 모델이 이렇게나 주목받았다는 점이 신기하다는 것이다.

 

우리나라 및 기타 아시아 국가들은 비전쪽 연구를 찍어내고 

미국을 포함한 북미, 영미권 국가들은 NLP, speech등의 연구를 주로 하는 느낌이고,

실제로 서울대에도 비전딥러닝을 하는 연구실은 많지만 상대적으로 음성딥러닝을 하는 곳은 적다.

 

내가 생각하는 이유는 물론 네이버, LG 등이 한국어 초거대 언어 모델을 만들려고 노력을 많이 하고 있으나,

"한국어"라는 단일언어로는 영미권 국가들 처럼 대규모로 데이터셋을 몹거나 자본을 투자할 수 없으니 

영어를 바탕으로 하는 나라에서 당연히 NLP 연구가 더욱 조직적으로, 주도적으로 일어나고 있다는 것이다.

(물론 어깨너머로 보기엔 LG, 네이버 모두 크나큰 투자를 하고 있지만)

 

  우선 그래서 우리나라에서는 수익화를 위한 것이 아닌, 학문을 위한 NLP 연구는 잘 주목 받지 못하겠지? 라는 생각을 갖고 있었는데

(이유가 뭐가됐던) NLP 모델이 이렇게 큰 파장을 불어 왔으니, 우리나라에서도 이제 Language 모델이 더더욱 발전하려나? 하는 기대감이 생기게 된 것 같다. 

 

chatGPT를 이용하면 이제 왠만한 메일도 자기손으로 쓰는 사람이 없을 것이고, 

현재 우려하는 바대로 대학 과제 등등에서 과연 chatGPT를 가려낼 수 있을까하는 생각이 든다. 

 


다만 여러가지 의미로 chatGPT는 "정말로" 인터넷이라고 생각하는 것이 

내가 생각하는 chatGPT의 단점은 크게 두가지이다.

"신뢰성"과 "공정성".

 

사실 공정성은 단순히 학문적인 궁금증, 더 나아가서 내가 AI에 대해 근본적으로 갖고 있는 궁금증 중에 하나의 이야기이니 

짧게 아래 다른 분의 게시글로 대체하도록 하고 

 

https://m.blog.naver.com/PostView.naver?blogId=darksun1998&logNo=223010626046&proxyReferer= 

 

ChatGPT 탈옥 이슈

그 동안 공돌이들이 미래를 더 생산적이고 희망차게 만들기 위하여, 시간과 노력과 돈을 갈아넣어 AI를 ...

blog.naver.com

 

한마디로 정리하자면 large dataset을 사용하는 것은 좋으나 이것이 "어디까지 abusing 방지가 되어야 하는가"이다.

기존의 국내의 이루다, MS의 테이 등이 수많은 어택으로 abusing이나 차별발언을 막지 못하여 서비스 종료한 사건들이 있었다. 

(이제보니 MS가 테이의 아픔으로 abusing을 굉장하게 처리해서 chatGPT를 내놓았나 싶다)

 

이러한 단순 어택의 문제는 AI의 문제라기 보단 사용자들의 문제이니 패스하고, 

내가 궁금한건 결국 이러한 초거대 AI 모델을 만들기 위해 초거대 dataset을 사용해야 할 것이고,

초거대 dataset을 사용하는 이상 정제되지 않은 데이터를 사용하는 것이 지금으로서는 불가피할 것인데 

과연 정제되지 않은 dataset의 bias를 딥러닝은 얼마만큼 허용해야 할까?

 

사람들과 사회가 고정관념을 갖고 있는 것은 사실인데 그러한 편견과 고정관념을 AI역시 배워야할까? 

배우지 않도록 하는 것이 오히려 더 문제 아닌가? 

둘 사이의 절충안이 있어야한다면 어떻게 파라미터 튜닝을 해야할까? 하는 것들이 궁금증으로 남게 된다. 

 

 


공정성은 나 하나의 궁금증에 가깝다면 

신뢰성은 chatGPT가 가장먼저 넘어야할 산에 가깝다. 

 

실제로 내 주변 직장인들 중 사무업무를 보는 사람들은 

위에선 GPT로 뭔가 통계 자료를 내거나 사무보조 하는 방법에 대해 논의 하고 있는데

사실 GPT가 대답하는 통계 자료는 레퍼런스가 없으니 쓸수가 없다 라는 고충을 토로한다 .

 

챗GPT로 받은 대답을 바로 업무에 사용하는 것은 마치 나무위키를 레퍼런스로 과제를 하는 것과 같지 않을까 생각해본다

어디서 보기 힘든 다양하고 세세한 정보를 얻을 수 있고 높은 확률로 크로스체크가 되어 맞는 정보이겠지만,

아무도 그것을 레퍼런스로 보고서를 쓰지 않는다.  위험부담이 너무 크고, 공적인 신뢰도가 너무 떨어지기 때문이다. 

 

이러한 점을 생각해보면 결국 chatGPT던 AI던 현재 상상할 수 있는 수준에서는 

인간을 대체한다기보단 인간의 보조 역할로 거듭나는게 맞나? 하는 결론이 나기도 한다. 

(사실 많은 인간들이 이것을 바라는 것 같기도 하고)

 

 

단순 의견을 적는 글이라 정돈 되지 않은 글이지만 

10년동안의 가장 혁신적인 기술로 추앙되는 chatGPT 열풍이 식기 전에 빠르게 

지금 드는 생각을 적어보고 싶었다 !

 

오늘의 일기 끝. 

 

상황: 현재 AI 이용한 손글씨 인식 챌린지를 참여중인데 (순위가 out of domain,,,)  train test set의 domain이 다른게 

결국 문제인 것 같아 간단하게 domain adaptation 공부하면서 요약 중

상황: test set(=target domain)은 이미지만 있고 label은 없는 상황

validation  set accu는 97%인데 test set accu는 82% (ㅜㅜ)

 

* domain adaptation은 결국 transfer learning의 한 종류이다

 

* target domain의 labeling에 따라 4가지 종류로 나눌 수 있다

  1. Supervised DA
  2. Semi-Supervised DA
  3. Weakly Supervised DA
  4. Unsupervised DA

=> 그중 내 setting 은 4번

 

Unsupervised Domain Adaptation by Backpropagation(2015)

: backprop의 구조만 약간 바꿈

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

t-sne 요약  (0) 2023.09.10
Representation Learning  (0) 2022.08.18

pytorch만 쓰다가 visualization의 한계를 깨닫고 tensorboard 툴 공부 중,,,

여차저차해서 tensorboard 코드는 만들었는데, 

코드 실행하는 server는 linux 기반의 ubuntu, 노트북은 macOS, 테스크탑은 window 기반이라 tensorboard 연결하면서 겪은 약간의 시행착오를 정리하려고 한다. 

 

일단 macOS에서는 vscode를 사용하기 때문에 vscode로 연결한 원격 터미넣에서 아래처럼 tensorboard를 켠 후

tensorboard --logdir={log경로}

바로 http://{원격ip주소}:6006을 (6006은 포트 설정 안했을 시 기본설정) 크롬에 입력하면 tensorboard 창이 켜졌다.

 

문제는 window에서는 vscode를 사용하지 않고 모바엑스텀을 사용해서,,,똑같이 하니까 안되더라

검색해본 결과

1. 원격서버에서 포트 지정해서 tensorboard를 열 것(근데 필수는 아님)

2. window cmd에서 NfL로 원격서버와 로컬 연결하기

3. window 크롬에서 주소 입력하기 

 

이렇게 세 단계로 나눠서 하면되는 걸 파악했다. 그러니까 2번 단계가 추가된 것!

 

1. 원격서버에서 아래같이 원격포트번호를 지정해준다. 

이는 실제 원격 서버의 포트번호가 아니라, 텐서보드를 다른사람이 쓰고 있거나 6006을 다른 사람이 쓰고 있는 경우를 방지하기 위해서이다. 나같은 경우는 6007로 진행하였다.

 

tensorboard --logdir {log 폴더 경로} --port {원격포트번호지정}

 

 

2. window에서 cmd에 ssh 클라이언트 기능을 설치한다. 

윈도우 설정 -> 앱 -> 선택적 기능 -> ssh 클라이언트

를 찾아 설치하면 1분도 안걸린다. 

 

그 다음 윈도우 + R 키로 윈도우 cmd 창을 연다 (주의: anaconda prompt 아님!)

ssh -NfL localhost:{local에서 쓸포트번호}:localhost:{원격포트번호} {원격id}@{원격ip}
# or 원격 서버를 연결하기 위한 포트번호가 있을 시
ssh -NfL localhost:{local에서 쓸포트번호}:localhost:{원격포트번호} {원격id}@{원격ip} -p {원격기본설정 포트}

그 다음 위 커맨드를 쳐서 원격서버와 로컬서버의 포트번호를 연결해준다

이때 주의점은 {원격포트번호}와 {원격기본설정 포트}는 다르다는 점이다.

(이걸 검색해서 여기까지 온사람이라면 차이를 알겠지만 혹시나,,,)

 

# {local에서 쓸 포트번호}

아무거나 내 로컬에서 사용하지 않는 포트번호로 지정해주면 된다. -> 이값을 3번에서 사용할 예정

 

# {원격포트번호}

나같은 경우는 {원격포트번호}에 1번에서 지정해준 6007을 썼고, 

1번에서 포트 번호 지정은 안했다면 6006을 사용하면 된다. 

 

# {원격기본설정 포트}

이는 원격 서버에 설정된 포트 번호가 있다면 지정해주면 된다. 보통 22로 설정되어 있는 그 포트번호 말하는 것이다.

6006과는 아무 상관이 없다. 원격서버에 포트 설정이 안되어 있다면 입력할 필요 없다. 

 

 

3. window 크롬에서 주소 입력하기 

window 로컬컴에서 

http://{원격서버ip}:{local에서 쓸 포트번호}

를 주소창에 입력해주면 된다.

 

 

## 정리

# 원격에서
tensorboard --logdir {log 폴더 경로} --port {A}

# 로컬 window cmd에서 (C는 원격서버 포트 번호가 22(기본설정값)이 아닐 시)
ssh -NfL localhost:{B}:localhost:{A} {원격id}@{원격ip} -p {C}

# 로컬 window 주소창에서
http://{원격서버ip}:{B}

+ Recent posts