U-stage day 14

사공진·2021년 8월 20일
0

AI tech 2기

목록 보기
14/23

1.강의 내용

[PyTorch]Multi-GPU 학습

  • Model parallel
    1)다중 GPU에 학습을 분산하는 두 가지 방법
    2)모델을 나누는 것은 생각보다 예전부터 썼음 (alexnet)
    3)모델의 병목, 파이프라인의 어려움 등으로 인해 모델 병렬화는 고난도 과제

  • Data parallel
    1)데이터를 나눠 GPU에 할당후 결과의 평균을 취하는 방법
    2)minibatch 수식과 유사한데 한번에 여러 GPU에서 수행
    3)DataParallel – 단순히 데이터를 분배한후 평균을 취함
    → GPU 사용 불균형 문제 발생, Batch 사이즈 감소 (한 GPU가 병목), GIL
    4)DistributedDataParallel – 각 CPU마다 process 생성하여 개별 GPU에 할당
    → 기본적으로 DataParallel로 하나 개별적으로 연산의 평균을 냄

[PyTorch]Hyperparameter Tuning

  • Hyperparameter Tuning
    1)모델 스스로 학습하지 않는 값은 사람이 지정
    (learning rate, 모델의 크기, optimizer 등)
    2)하이퍼 파라메터에 의해서 값의 크게 좌우 될 때도
    있음 (요즘은 그닥?)
    3)마지막 0.01을 쥐어짜야 할 때 도전해볼만!
    4)가장 기본적인 방법 – grid vs random

    5)최근에는 베이지안 기반 기법들이 주도

  • Ray
    1)multi-node multi processing 지원 모듈
    2)ML/DL의 병렬 처리를 위해 개발된 모듈
    3)기본적으로 현재의 분산병렬 ML/DL 모듈의 표준
    4)Hyperparameter Search를 위한 다양한 모듈 제공

[PyTorch]PyTorch Troubleshooting

  • GPUUtil 사용하기
    1)nvidia-smi 처럼 GPU의 상태를 보여주는 모듈
    2)Colab은 환경에서 GPU 상태 보여주기 편함
    3)iter마다 메모리가 늘어나는지 확인

  • torch.cuda.empty_cache() 써보기
    1)사용되지 않은 GPU상 cache를 정리
    2)가용 메모리를 확보
    3)del 과는 구분이 필요
    4)reset 대신 쓰기 좋은 함수

  • trainning loop에 tensor로 축적 되는 변수는 확인할 것
    1)tensor로 처리된 변수는 GPU 상에 메모리 사용
    2)해당 변수 loop 안에 연산에 있을 때 GPU에 computational graph를 생성(메모리 잠식)
    3)1-d tensor의 경우 python 기본 객체로 변환하여 처리할 것

  • del 명령어를 적절히 사용하기
    1)필요가 없어진 변수는 적절한 삭제가 필요함
    2)python의 메모리 배치 특성상 loop 이 끝나도 메모리를 차지함

  • 가능 batch 사이즈 실험해보기
    1)학습시 OOM 이 발생했다면 batch 사이즈를 1로 해서 실험해보기

  • torch.no_grad() 사용하기
    1)Inference 시점에서는 torch.no_grad() 구문을 사용
    2)backward pass 으로 인해 쌓이는 메모리에서 자유로움

2.과제 수행 과정/결과물 정리

완료

3.피어 세션

학습 내용 공유

1.과제 코드 리뷰

  • 진행 X

1.강의 내용 및 심화내용 토론

[PyTorch]Multi-GPU 학습
[PyTorch]Hyperparameter Tuning
[PyTorch]PyTorch Troubleshooting

3.논문 리뷰

1.EfficientNet v2

4.학습회고

주말동안 3주간 배운 내용들을 다시 한 번 살펴봐야겠다. 다음주부터 2주간 첫 대회가 시작되는데 그간 살펴본 논문들도 다시 한편 살펴볼 예정이다.

profile
인지간지

0개의 댓글

관련 채용 정보