기존에 만들어진 모델을 가져와 내 데이터에 맞게 수정해서 학습하는 것이 일반적이다.
학습 결과를 지속적으로 저장할 필요가 있다
model.save()
colab에서 dataset을 받을 땐 google drive mount를 쓰는 쪽이 시간이 절약된다.
Transfer learning
대용량 데이터로 만든 모델을 가져와 적용하면, 성능이 높게 나온다.
가져온 모델을 일부 변경하여 사용
Freezing : pretrained model을 가져올 때, frozen 된 부분을 지정할 수 있으며, 이 부분은 파라미터가 변화하지 않는다.
학습 시간이 길어 중간에 잘못 학습되면 시간을 많이 날리게 될 것.
Tensorboard, wandb(weight & biases)같은 툴이 존재한다.
Tensorboard
weight and biases
오늘날 딥러닝 모델은 엄청난 양의 데이터와 파라미터를 갖고 학습을 하기 때문에, 많은 연산량이 필요 -> multi GPU 필수
Node : 컴퓨터와 같은 의미로 생각하자
n대의 Node에 n개의 GPU를 사용
Model parallel, Data parallel
Data parallel
DataParallel : 데이터를 쪼갠 후 결과를 그대로 평균
DistributedDataParallel
학습이 잘 안 될 때 할 수 있는 것
모델은 이미 좋은 모델을 알고 있으니 보통 고정되고, 학습에 가장 영향을 미치는 건 데이터이다.
Hyperparameter
Grid Layout : 주요 parameter를 일정 간격으로 바꿔가며 잘 되는 걸 찾음
Random Layout : random으로 parameter를 바꿔봄
지금은 위 방법보단 Baysian 기법 사용
Ray
다시 강조하지만 Hyperparameter tuning을 잘한다고 드라마틱하게 성능이 오르지 않는다.
Out of memory 문제를 어떻게 관리할까?
가장 단순한 방법 : Batch size를 줄이고 GPU clean -> 다시 run 해본다
GPUtil
torch.cuda.empty_cache()
training loop 내의 tensor로 축적되는 변수는 GPU상의 메모리를 사용하며, loop가 누적될 수록 computation graph를 만들며 메모리를 잠식하게 된다.
del 명령어 사용
OOM이 발생했다면 batch size를 1로 해서 해본다.
torch.no_grad() 사용
GoogLeNet 발표를 들으며 모델을 이해함(Inception, NIN, 1x1 Convolution 등)
스페셜 피어세션 동안 다른 조와 얘기를 나누며, 스터디나 피어 세션 준비에 관한 여러 얘기를 들을 수 있었다.
이번 주 과제로 나온 자료에 나온 내용 전부를 익히고(model, dataset 구성 및 load, parameter search 등) 이를 코드로 볼 수 있고 구현하는 걸 익히는 게 가장 중요하다고 생각한다.
주말에 어떤 해야될 일이 생길 진 모르겠지만, 웬만하면 과제 자료를 다시 보며 핵심을 정리해 블로그에 올려, 대회 및 앞으로에 있어 참고할 가이드처럼 사용하도록 하자.
월요일이 공휴일이어서 4일만 출석한 것인데도 다른 주보다 더 힘들었던 것 같다.
항상 멘탈을 잘 잡는게 제일 중요한 것 같다.(멘탈이나 집중력 흔들리면 책상 앞에 앉아있어도 강의 내용 한 귀로 흘리고 글도 안들어오고..)
3주동안 앞으로 배워야 할 모든 걸 때려박힌 느낌이라 막막하지만, 다짐했던 것처럼 흘린 건 나중에 돌아와 주워 담으면 된다는 마음으로 주울 수 있는 만큼 줍겠다고 생각하고 다음 주를 준비하자.