PyTorch 8~10강) Multi-GPU / Tuning / Troubleshooting

한량·2021년 8월 20일
0

[U-stage] PyTorch for AI

목록 보기
4/6

Multi-GPU 학습

용어 정리

  • Node: 컴퓨터 1대를 의미, system이라고도 함
  • Single Node Single GPU: 컴퓨터 1대에 GPU 1개
  • Single Node Multi GPU: 컴퓨터 1대에 GPU 여러개, 보통 4~8개 정도
  • Multi Node Multi GPU: 서버 컴퓨터 같이 컴퓨터가 여러대

학습 방법

Model parallel

  • 모델을 나누는 방법
  • 생각보다 예전부터 씀(AlexNet)
  • 병목, 파이프라인의 어려움 등으로 인해 고난이도 과제

Data parallel

  • 데이터를 나눠 GPU에 할당 후 각 결과의 평균을 취하는 방법

  • Mini batch 방법과 유사한데 한번에 여러 GPU에서 수행

  • DataParallel: 단순히 데이터를 분배한 후 평균을 취함

    • GPU 사용 불균형 문제 발생, Batch size 감소(한 GPU가 병목)
      GIL(global interpreter lock) 발생
  • DistributedDataParellel: 각 CPU마다 process 생성하여 개별 GPU에 할당

    • 기본적으로 DataParallel로 하나 개별적으로 연산의 평균을 냄

Hyperparameter Tuning

  • 모델 스스로 학습하지 않는 값은 사람이 지정
    learning rate, 모델의 크기, optimizer 등
  • 하지만 좋은 hyperparameter보다 좋은 data가 효과가 좋음
    너무 tuning에 힘쓰지 말것

  • Grid layout: learning rate, batch size 등을 일정한 간격으로 조정
  • Random layout: 랜덤하게 조정
  • 보통 처음은 random하게 찾다가 일정 범위를 찾으면 그 안에서 grid를 이용

Ray

  • Multi-node multi processing 지원 모듈
    ML/DL의 병렬 처리를 위해 개발됨
  • 현재의 분산병렬 ML/DL 모듈의 표준
  • Hyperparameter search를 위한 다양한 모듈 제공

PyTorch Troubleshooting

OOM, Out of Memory

  • 왜, 어디서 발생했는지 알기 어려움
  • Error backtracking이 이상한데로 감
  • 메모리의 이전상황 파악이 어려움

해결 방법

GPUUtil

  • nvidia-smi처럼 GPU의 상태를 보여주는 모듈
  • iter마다 메모리가 늘어나는지 확인!

torch.cuda.empty_cache()

  • 사용하지 않은 GPU상 cache 정리
  • 가용 메모리 확보
  • del과는 구분 필요
  • reset 대신 쓰기 좋은 함수

training loop에 tensor 확인

  • tensor로 처리된 변수는 GPU 상에 메모리를 사용
  • 해당 변수 loop 안에, 연산에 있을 때 GPU에 computational graph를 생성(메모리 잠식)
  • .item, float을 사용해 python 기본객체로 만들어 쌓이는 것을 방지

del 명령어 사용

  • 필요가 없어진 변수는 적절한 삭제가 필요

가능 batch size 실험해보기

  • 학습시 OOM이 발생했다면 batch size를 1로 해서 실험해보기

torch.no_grad()

  • Inference 시점에서는 torch.no_grad()를 사용
  • backward pass로 인해 쌓이는 메모리에서 자유로움

그 외

  • colab에서 너무 큰 사이즈는 실행하지 말것(e.g. linear, CNN, LSTM)
  • CNN의 대부분의 에러는 크기가 안 맞아서 생기는 경우
    --> torchsummary 등으로 사이즈를 맞출것
  • tensor의 float precision을 16bit으로 줄일 수도 있음
  • 참고:
    https://brstar96.github.io/shoveling/device_error_summary/
profile
놀고 먹으면서 개발하기

0개의 댓글