왜 발생했는지 알기 어려움
어디서 발생했는지 알기 어려움
Error backtracking이 이상한데로 감
메모리의 이전상황의 파악이 어려움
nvidia-smi 처럼 GPU의 상태를 보여주는 모듈
Colab은 환경에서 GPU 상태를 보기위해 GPUUtil사용
iter마다 메모리가 늘어나는지 확인하기
!pip install GPUtil
import GPUtil
GPUtil.showUtilization()
사용되지 않는 GPU상 cache를 정리
가용 메모리를 확보
del 과는 구분이 필요하다.
reset대신 쓰기 좋은 함수이다.
import torch
from GPUtil import showUtilization as gpu_usage
tensorList = []
for x in range(10):
tensorList.append(torch.randn(100000000,10).cuda())
gpu_usage()
del tensorList
gpu_usage()
# GC작동
torch.cuda.empty_cache()
gpu_usage()
tensor로 처리된 변수는 GPU상 메모리 사용
해당 변수가 loop안에 연산에 있을 때 GPU에 computational graph를 생성하여 메모리 잠식
total_loss = 0
for i in range(10000):
optimizer.zero_grad()
output = model(input)
loss = criterion(output)
loss.backward()
optimizer.step()
# loss.item()을 사용하여 기본객체로 변환 or float()
total_loss += loss
필요가 없어진 변수는 적절한 시점에 삭제가 필요
python의 메모리 배치 특성상 loop이 끝나도 메모리를 차지한
for x in range(10):
i = x
print(i) # 9 is printed
Inference 시점에서는 torch.no_grad()
구문 사용
backward pass로 메모리에서 자유로움
CUDNN_STATUS_NOT_INIT, device-side-assert 등
해당 에러도 cuda와 관련하여 OOM의 일종으로 생각될 수 있으며, 적절한 코드 처리의 필요함
colab에서 너무 큰 사이즈는 실행하지 말 것(linear, CNN, LSTM)
CNN의 대부분의 에러는 크기가 안 맞아서 생기는 경우(torchsummary 이용)
tensor의 float precision을 16bit로 줄일 수 있음