네이버 부스트캠프 학습 정리/2주차

[PyTorch] PyTorch 알쓸신잡

AI쟁이J 2023. 3. 19. 15:57

모델 불러오기

model.save()

- 학습의 결과를 저장하기 위한 함수

- 모델 형태와 파라메터를 저장

- 모델 학습 중간 과정의 저장을 통해 최선의 결과모델 선택

- 만들어진 모델을 외부 연구자와 공유 가능

 

checkpoints

- 학습의 중간 결과를 저장하여 최선의 결과 선택

- earlystopping 기법시 이전 학습의 결과 저장

- loss와 metric 값을 지속적으로 확인 저장

- epoch, loss, metric를 함께 저장

 

pretrained model Transfer learning

- 다른 데이터셋으로 만든 모델을 현재 데이터에 적용

- 대용량 데이터셋으로 만들어진 모델의 성능을 높임

- 현재 가장 일반적인 기법

 

PyTorch 기록 monitoring

Tensorboard

- TensorFlow의 프로젝트로 만들어진 시각화 도구

- PyTorch도 연결 가능

 

구성 요소

- scalar : metric등 상수 값의 연속(epoch) 표시

- graph : 모델의 계산 그래프 표시

- histogram : weight등 값의 분포 표현

- Image : 예측과 실제값의 비교 표시

- mesh : 3d형태의 데이터를 표현

 

weight & biases

- 머신러닝 실험을 원활히 지원하기 위한 상용도구

- !pip install wandb 를 통해 설치 후 wandb.init 으로 사용

 

Multi-GPU 학습

Model parrallel

- 다중 GPU에 학습을 분산하는 두가지 방법 (모델 나누기 / 데이터 나누기)

 

모델 나누기

- 모델 두개를 cuda 0, 1 에 할당하는 등의 방식을 통해 학습 후 두 모델을 합치기

데이터 나누기

- 데이터를 분배한 후 평균을 취하는 방법으로 GPU사용 불균형 문제가 발생하거나 batch 사이즈가 감소하는 등의 문제 발생

 

Hyperparameter Tuning

모델 스스로 학습하지 않는 learning rate, 모델의 크기, optimizer 등은 사람이 직접 지정해야함

grid vs random으로

grid - 전수조사처럼 모든 하이퍼 파라미터 값을 일일히 증가/감소시키며 찾아냄

random - 랜덤한 지점을 통해 학습 후 성능이 좋아 보이는 부분 발견

 

요즘은 베이지안 기법을 사용함.

베이지안 기법은 grid + random의 방식으로 임의의 지점에서 학습률이 좋게 나오는 경우 해당 위치에서 grid search를 진행함

 

Ray

- multi-node multi processing 지원 모듈

- ML/DL의 병렬 처리를 위해 개발된 모듈로 현재의 표준임

- 다양한 모듈로 Hyperparameter Search 지원

 

Troubleshooting

딥러닝에서 가장 무서운 것은 OOM! (메모리 부족 오류)

 

GPUUtil 사용하기

GPU의 상태를 보여주는 모듈로 iter마다 메모리가 늘어나는지 확인

 

torch.cuda.empty_cache() 써보기

- 사용되지 않은 GPU의 cache 정리

- 가용 메모리 확보

- reset 대신

 

trainning loop에 축적되는 tensor 변수 확인

- tensor로 처리된 변수는 GPU의 메모리를 차지함

- 메모리 잠식을 방지하기 위해 삭제하기

- 1-d tensor의 경우 python 기본 객체로 변환해서 처리 가능

 

del 명령어 사용하기

- 필요 없어진 변수는 삭제하기

- python은 메모리 배치 특성상 loop이 끝나도 메모리를 차지함

for x in range(10):
	i = x
print(i)
>>> 9

해당 케이스처럼 for문 내의 변수 i가 loop이 끝나도 메모리를 차지하기에 이를 삭제

 

batch 사이즈 실험해보기

- batch 사이즈를 1로 변경해 사용해보기

 

torch.no_grad() 사용하기

- inference 시점에서는 torch.no_grad() 구문을 사용

 

 

 

 

 

 

 

'네이버 부스트캠프 학습 정리 > 2주차' 카테고리의 다른 글

[PyTorch] PyTorch의 데이터  (0) 2023.03.19
[PyTorch] parameter & buffer  (0) 2023.03.19
[PyTorch] nn.Module  (0) 2023.03.17
[PyTorch] 파이토치의 기본  (0) 2023.03.17