Single vs Multi
GPU vs Node
Single Node Singe GPU
Single Node Multi GPU
Multi Node Multi GPU
Multi GPU에서 배치를 의미있게 해야한다. -> 파이프 라인을 잘 만들어야 한다. ( 병목현상 방지 )
1. Model parallel
2. Data parallel
데이터를 나눠 GPU에 할당 후 결과의 평균을 취함
minibatch를 병렬적으로 돌리는 느낌
성능을 올리는 방법
1. model
2. data 추가
3. Hyperparameter tuning
1번의 경우 좋은 모델은 거의 고정되어 있다.
가장 큰 영향을 미치는 것은 data.
모델 스스로 학습하지 않는 값 : learning rate, 모델의 크기, optimizer
최근은 하이퍼 파라미터에 의해 크게 좌우되지는 않는다.
Grid vs Random
ML/DL의 병렬 처리를 위한 모듈 in Python
!pip install GPUtil
import GPUtil
GPUtil.showUtilization()
import torch
for i in range(10):
tensorList.append(torch.randn(1000000,10.cuda()) # 메모리 할당
del tensorList # 즉시 메모리가 비워지지 않음
torch.cuda.empty_cache() # 메모리를 강제로 비워줌
tensor로 처리된 변수는 GPU 상에 메모리 사용
해당 변수가 loop 안에 있을 시 GPU에 computational graph를 생성시켜 메모리 잠식
oom = false
try:
run_model(batch_size)
except RuntimeError: # OOM
oom = True
if oom:
for _ in range(batch_size):
run_model(1)
이 외에도 CUDNN_STATUS_NOT_INIT이나 device-side-assert 등 존재