티스토리 뷰
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)
'AI > 딥러닝' 카테고리의 다른 글
[딥러닝] 원하는 딥러닝 모델 찾는 방법 (1) | 2024.12.19 |
---|---|
[딥러닝] PyTorch 신경망 모델 구축 baseline (1) | 2024.12.06 |
[딥러닝] PyTorch Basic(Dataset, DataLoad, Tensor) (1) | 2024.12.06 |
[딥러닝] 프레임워크 비교(Tensorflow, Keras, PyTorch) (2) | 2024.12.04 |
[딥러닝] 공유 받은 구글 드라이브 알집 파일 colab에서 내 구글드라이브로 저장시키고 알집풀기 (0) | 2024.12.03 |
- Total
- Today
- Yesterday
- 빅데이터 분석기사
- Ai
- 티스토리챌린지
- Python
- 줄넘기
- 아침
- 미라클모닝
- 아침운동
- 갓생
- 고득점 Kit
- 실기
- 습관
- SQL
- C언어
- 오블완
- opic
- llm
- 경제
- 기초
- 프로그래머스
- 뉴스
- 오픽
- 루틴
- 스크랩
- ChatGPT
- 다이어트
- 30분
- 운동
- IH
- 영어회화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |