다중 GPU에 학습을 분산하는 두가지 방법 (모델 나누기, 데이터 나누기)
모델의 병목, 파이프라인의 어려움 등으로 인해 모델 병렬화는 고난이도 과제
데이터를 나눠 GPU에 할당후 결과의 평균을 취하는 방법
minibatch 수식과 유사한데 한번에 여러 GPU에서 수행
DataParallel: 단순히 데이터를 분배한 후 평균을 취함 (GPU 사용 불균형 발생 → GPU 병목)
DistributedDataParallel: 각 CPU마다 process 생성하여 개별 GPU에 할당 (개별적으로 연산의 평균을 냄)
Hyperparameter Tuning
모델 스스로 학습하지 않는 값은 사람이 지정(learning rate, 모델의 크기, optimizer 등..)
hyperparameter에 의해서 값이 크게 좌우 될 때도 있다. (요즘은 별로...)
가장 기본적인 방법 (grid vs random)
최근에는 베이지안 기반 기법들이 주도
Ray
OOM (Out of Memory)
GPU Util
import GPUtil
GPUtil.showUtilization()
torch.cuda.empty_cache()
trainning loop에 tensor로 축적되는 변수 확인
torch.no_grad() 사용