[Boostcamp 2주차] PyTorch Troubleshooting
3732 단어 PyTorch부스트캠프 AI Tech학습 정리PyTorch
PyTorch Troubleshooting
💥 OOM (Out Of Memory)
- 어디서 왜 발생했는지 찾기 어려움
- Error backtracking이 이상하게 됨
- 메모리의 이전 상태 파악이 어려움
- 가장 쉬운 해결법: Batch Size 줄이기 -> GPU clean -> Run
해결 방법
1. GPUtil 사용하기
- GPU의 상태를 보여주는 모듈
- colab 환경에서 GPU 상태를 확인하기 편하다
- nvidia-smi에 비해 iter마다 메모리가 늘어나는지 확인 가능하다
Gputil.showUtilization()
2. torch.cuda.empty_cache() 사용해보기
- GPU상 사용되지 않는 cache를 정리한다.
- GPU CUDA 메모리 해제
- del은 관계를 끊어서 메모리를 프리시키는 것이기 때문에 del과는 다르다
- reset 대신 사용하기 좋음
- 학습 전에 사용하면 이전의 학습으로 남아있는 메모리를 정리하고 들어가서 좋다
torch.cuda.empty_cache()
showUtilization()
3. training loop에 tensor로 축적되는 변수 확인
- tensor 변수는 GPU 상 메모리를 사용
- loop안에 연산에 있을 때 GPU에 computational graph를 생성하여 쓸데없이 메모리를 차지
=> 1-d tensor의 경우 python 기본 객체로 변환하면 GPU 상의 메모리를 사용하지 않음
4. del 명령어 사용하기
- 쓸모 없는 변수는 적절히 삭제한다
- python은 메모리 배치 특성상 loop가 끝나고 변수가 메모리에 남아 공간을 차지함
그런 애들은 del로 삭제
5. batch size 실험해보기
- 학습시 OOM이 발생했다면 batch size가 커서 문제가 발생했을 수 있으므로 batch size를 1로 지정하여 실행해본다
oom = False
try:
run_model(batch_size)
except RuntimeError: # OOM
oom = True
if oom:
for _ in range(batch_size):
run_model(1) # batch size = 1
6. torch.no_grad() 사용하기
- Inference 시 torch.no_grad() 사용
- backward pass로 인해 발생하는 메모리 버퍼 현상이 사라짐
with torch.no_grad():
for data, target in test_loader:
...
...
그외의 방법
- colab에서는 너무 큰 사이즈는 실행하지 X
- CNN의 에러는 대부분 크기가 안 맞아서 발생 => torchsummary로 확인하여 사이즈 조정
- tensor의 float precision을 16bit로 줄이는 방법도 있지만 엄청 큰 모델이 아니고서야 별로 안 씀
Author And Source
이 문제에 관하여([Boostcamp 2주차] PyTorch Troubleshooting), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@yoonene/Boostcamp-2주차-4-PyTorch-Troubleshooting
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. GPUtil 사용하기
- GPU의 상태를 보여주는 모듈
- colab 환경에서 GPU 상태를 확인하기 편하다
- nvidia-smi에 비해 iter마다 메모리가 늘어나는지 확인 가능하다
Gputil.showUtilization()
2. torch.cuda.empty_cache() 사용해보기
- GPU상 사용되지 않는 cache를 정리한다.
- GPU CUDA 메모리 해제
- del은 관계를 끊어서 메모리를 프리시키는 것이기 때문에 del과는 다르다
- reset 대신 사용하기 좋음
- 학습 전에 사용하면 이전의 학습으로 남아있는 메모리를 정리하고 들어가서 좋다
torch.cuda.empty_cache()
showUtilization()
3. training loop에 tensor로 축적되는 변수 확인
- tensor 변수는 GPU 상 메모리를 사용
- loop안에 연산에 있을 때 GPU에 computational graph를 생성하여 쓸데없이 메모리를 차지
=> 1-d tensor의 경우 python 기본 객체로 변환하면 GPU 상의 메모리를 사용하지 않음
4. del 명령어 사용하기
- 쓸모 없는 변수는 적절히 삭제한다
- python은 메모리 배치 특성상 loop가 끝나고 변수가 메모리에 남아 공간을 차지함
그런 애들은 del로 삭제
5. batch size 실험해보기
- 학습시 OOM이 발생했다면 batch size가 커서 문제가 발생했을 수 있으므로 batch size를 1로 지정하여 실행해본다
oom = False
try:
run_model(batch_size)
except RuntimeError: # OOM
oom = True
if oom:
for _ in range(batch_size):
run_model(1) # batch size = 1
6. torch.no_grad() 사용하기
- Inference 시 torch.no_grad() 사용
- backward pass로 인해 발생하는 메모리 버퍼 현상이 사라짐
with torch.no_grad():
for data, target in test_loader:
...
...
그외의 방법
- colab에서는 너무 큰 사이즈는 실행하지 X
- CNN의 에러는 대부분 크기가 안 맞아서 발생 => torchsummary로 확인하여 사이즈 조정
- tensor의 float precision을 16bit로 줄이는 방법도 있지만 엄청 큰 모델이 아니고서야 별로 안 씀
Author And Source
이 문제에 관하여([Boostcamp 2주차] PyTorch Troubleshooting), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yoonene/Boostcamp-2주차-4-PyTorch-Troubleshooting저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)