티스토리 뷰

1. OOM

- Out ouf Memory

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

- 이터레이션을 돌면서 문제가 생기는 경우가 많다

 

2. 해결방안

1) batch size를 줄이기→ GPU clean → Run 

 

2) GPU Util 사용하기

- nvidia-smi처럼 GPU의 상태를 보여주는 모듈

- Colab은 환경에서 GPU 상태 보여주기 편함

- iter마다 메모리가 늘어나는지 확인!!

!pip install GPUtil

import GPUtil
GPUtil.showUtilization()

 

3) 사용되지 않은 GPU상 cache를 정리

torch.cuda.empty_cache()

- 가용 메모리를 확보

- del 과는 구분이 필요

- reset 대신 쓰기 좋은 함수

 

4) trainning loop에 tensor로 축적되는 변수는 확인

- 1차원의 경우 python 기본 객체로 변환하여 처리할 것 : .item / .float 사용

 

5) del 명령어 적절히 사용

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

- python의 메모리 배치 특성상 loop이 끝나도 메모리를 차지함

 

6) 학습시 oom이 발생하면 batch 사이즈를 1로 해서 실험해보기

oom = False

try:
	run_model(batch_size)
except RuntimeError: # out of memory
	oom = True
    
if oom:
	for _ in range(batch_size):
    	run_model(1)

 

7) torch.no_grad() 사용하기

- inference 시점에서는 torch.no_grad() 사용: 습관적으로 사용!

- backward pass로 인해 쌓이는 메모리에서 자유로움

with torch.no_grad():
	for data, target in test_loader:
    	output = network(data)
        test_loss= += F.nll_loss(output, target, size_average=False).item()
        pred = output.data.max(1, keepdim=True)[1]
        correct += pred.eq(target.data.view_as(pred)).sum()

 

3. 그외 문제들

- CUDNN_STATUS_NOT_INIT이나 device-side-assert 등

- 해당 에러도 cuda와 관련하여 oom의 일종으로 생각될 수 있으며, 적절한 코드 처리 필요

 

4. 주의점

- colab에서 너무 큰 사이즈는 실행하지 말 것 (linear, CNN, LSTM) - 요즘은 transformer를 써서 lstm잘 안씀

- CNN의 대부분의 에러는 크기가 안 맞아서 생기는 경우(torchsummary 등을오 사이즈를 맞출 것)

- tensor의 float precision을 16bit로 줄일 수도 있음

 

 

※ 참고자료 : [네이버 부스트코스] 인공지능 기초다지기 (AI Basic)

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함