가상 환경 설정
SSH 서버에 접속하기 위한 여정.
부스트캠프를 진행하며 대회 진행에서 학습에 필요한 GPU를 인당 1개씩 v100으로 서버를 통해 지원해준다. v100 32G는 몇백만원 하는 굉장히 고가의 GPU.. 갓이버 클라우드. 아무튼 이 서버를 사용하기 위해 매번 들어가기 귀찮기도 하고, Vscode와 연동하는 방법을 어떤 분이 Slack에 친절히 pdf까지 올려주셔서 이 방법을 통해 Vscode에서 SSH 서버에 원격 접속해 이용하는 방법에 대해 익혔다.
1. Key 발급
서버를 실행시키면 최초 실행 시 자동으로 key 파일이 다운로드 된다. 나는 데스크탑에서 서버를 최초 실행하고, 다시 노트북에서 서버를 연동하려고 시도해서 key 파일을 못 찾아서 한참을 헤맸다. 이런 경우 아마 key 파일을 그냥 복사해서 다른 하드웨어에도 넣어주는게 답인 듯 하다..
2. Host 연결
먼저 컴퓨터의 C:User/user 정도 폴더에 들어가면 .ssh 파일이 있다. 여기서 위에 발급받은 key 파일을 넣는다.
Extension의 Remote - SSH를 설치한다. 그러면 Vscode의 왼쪽 하단부에 초록색 버튼이 생긴다.
이 버튼을 클릭하고, Connect to Host를 클릭한다.
이후 Add new host를 클릭 후, 위에선 모자이크 되어있던 SSH 정보를 복사해서 붙여넣는다. 하지만 여기서 경로에 대한 수정이 필요하다.
예를 들어 ssh -i ./key root@21.10.145.125 -p 2133 (키 정보를 변경했음) 의 키가 있다면
그대로 복사하지 말고 앞의 . 부분을 ~로 절대 경로로 변경하고, ssh 정보를 넣어야 한다.
ssh -i ~/.ssh/key root@21.10.145.125 -p 2133 방식으로 입력칸에 넣고 누르면 최초 접속의 경우
OS를 고르는 창이 뜬다. window, mac, Linux인데 나같은 경우 window를 쓰기 때문에 window를 눌렀으나, 오류가 났다. 아마도 가상 환경은 Linux 기반으로 돌아가기 때문인 것 같아 Linux를 선택하면 접속에 성공할 수 있었다.
이후 위 그림처럼 SSH 서버에 Vscode를 연동할 수 있었다!
Py 파일과 친해지기
나는 솔직히 코딩을 ipynb 파일을 사용해 Jupyter notebook의 형식으로만 진행했었다. 비전공자여서 그런지 쉬운 언어인 Python을 좋아했고, 쉬운 환경인 ipynb의 대화형 커널을 좋아했다. 심지어 Vscode의 코드 편집기를 사용하는 것도 처음이었다. Pycharm을 아주 조금 써본 정도..
하지만 이번 대회의 baseline 코드들을 받아서 Vscode 내에 넣고 나니
이런 py 파일들이 나를 반겼다. 정말 당황스러웠지만..
처음으로 이런 제법 개발자같은 화면을 맞이한게 설레기도 했다.
현재까지 대회를 진행하며 익숙해진 정보로는
1. 터미널 창에서 cd (이동하고 싶은 경로) 를 통해 현재 내 Path를 맞춰서 py 파일을 실행하는 것.
2. argparser를 통해 지정된 변수들은 Terminal 창에서 바로 pyton --.py --model "ex" --epochs 10 이런 방식으로 -- 오더를 통해 사용하는 것
3. 코드를 변경한 후 적용하기 위해선 ctrl + s를 통해 저장 후 py 파일을 실행할 것
정도가 있고 추후 계속해서 학습 정리에 알게 된 내용을 정리하려고 한다.
Wandb를 통한 로그 추적
모델 학습에서 val_acc, train_acc, val_loss, train_loss 등 여러 변수들을 추적해야 한다. baseline의 기본 코드들에는 Tensorboard를 사용하기 위한 logger들이 있었는데 이를 통해 Tensorboard를 어떻게 볼 수 있는지 몰랐고, 찾아보기도 귀찮았는데 wandb를 더 추천하는 말을 많이 들어서 이 김에 코드 내에 wandb 로거를 넣어서 wandb를 통해 이번 대회를 진행하고자 했고 코드를 심었다.
1. API key 발급
Weights & Biases – Developer tools for ML
WandB is a central dashboard to keep track of your hyperparameters, system metrics, and predictions so you can compare models live, and share your findings.
wandb.ai
wandb 사이트에 들어가 Sign in을 한 후, (계정이 없다면 회원가입) 이후 API key를 발급받는다.
이후 Vscode 터미널 창에서
pip install wandb # 깔려있지 않다면
wandb login
이후 뜨는 명령어 뒤에 API key를 복사해서 붙여넣는다.
이 경우 wandb login을 입력 후 무언가 쭉 뜨는데 이 창에서 엔터, 키보드가 안 먹는 경우가 있다. 이 경우
wandb login (API key)
처럼 login 옆에 바로 API key를 입력해서 엔터를 누르면 바로 로그인이 된다.
이후
wandb.init(project = "mask classification")
wandb.run.name = f'{args.model} epc : {args.epochs} size : {args.batch_size}'
wandb.init을 통해 project 이름을 생성하고
각 run 마다 로그가 기록될 때 해당 로그 이름을 설정하지 않는 경우 wandb가 임의로 짓는다. 따라서 나는
run.name을 통해 각 실험의 model, epoch, batch_size로 자동으로 로그에 대한 이름을 짓도록 설정했다.
이후 config 파일을 dict 형식으로 지정해 wandb 사이트 내에 config 파일로 정보를 저장할 수 있게 설정한다.
cfg ={
"learning_rate" : args.lr,
"model" : args.model,
"epochs" : args.epochs,
"batch_size" : args.batch_size,
"criterion" : args.criterion
}
wandb.config.update(cfg)
나는 위 코드를 통해 learning rate, model, epochs, batch_size, criterion(Loss function) 에 대해 로그를 기록했다.
이후 각 기록을 남기기 위해 wandb.log를 사용해야 한다.
내 코드에서는 train 과정이 끝나는 곳에 wandb.log에 training_loss, training_acc를 기록하고 step = epoch로 설정해 1 epoch마다 기록되게 했다. for문 내부에 설정하는 경우 잘못 설정하면 1epoch가 아닌 매 step 마다 기록되어 모든 순간순간마다 기록되거나 하는 문제가 생길 수 있기에 조심해야 한다.
위 과정들이 끝나면 wandb 사이트에 로그인하면 내가 설정한 project name에서 각 run들의 비교도 가능하고, 그래프도 볼 수 있다. 아직 완벽히 익숙하진 않지만 이 정도면 기본적인 사용은 가능한 것 같다.
'네이버 부스트캠프 학습 정리 > 6주차' 카테고리의 다른 글
[P-stage 1] EfficientNet (1) | 2023.04.16 |
---|---|
[P-stage 1] Image Classification Loss에 대한 고찰 (3) | 2023.04.15 |
P stage 돌입과 학습 정리 방식 변경 (0) | 2023.04.15 |