PyTorch에서 CUDA 메모리 부족 오류를 예방하는 방법
PyTorch 프레임워크를 사용할 때 발생하는 “RuntimeError: CUDA out of memory” 오류를 피하는 방법을 간단히 소개하는 튜토리얼입니다. 이 글은 AI로 번역되었습니다. 오역이 있을 수 있으니 댓글로 알려 주세요.
Created on September 15|Last edited on September 15
Comment
목차(클릭하여 펼치기)
오류 - RuntimeError: CUDA out of memory.
PyTorch로 딥러닝 모델, 특히 대규모 언어 모델(LLM)을 어느 정도 오래 학습해 왔다면, 아마 다음과 같은 CUDA 오류를 겪어 보셨을 것입니다:
RuntimeError: CUDA out of memory. Tried to allocate .. MiB (.. GiB total capacity; ... GiB already allocated;... MiB free; ... GiB reserved in total by PyTorch)
우리 모두 한 번쯤 겪어 봤습니다.
이 글에서는 사용 가능한 연산 자원에 맞춰 가능한 한 큰 모델을 학습할 수 있도록, GPU 메모리를 효율적으로 확보하는 실질적인 요령들을 살펴보겠습니다.
CUDA 메모리 부족 오류에 대한 가능한 해결책
Weights & Biases로 GPU 메모리 가용성 확인하기
무엇보다 먼저, 어떤 결정을 내리기 전에 연산 자원 활용도를 확인할 수 있어야겠죠?
바로 여기에서 Weights & Biases가 도움이 됩니다.
W&B로 지표를 기록할 때마다, 몇 초 간격으로 수많은 시스템 지표도 함께 추적됩니다. 이를 통해 현재 머신에서 어떤 일이 일어나고 있는지 유용한 인사이트를 얻을 수 있습니다. 기록되는 지표의 전체 목록은 다음에서 확인할 수 있습니다 여기.
지금 이 문맥에서는 메모리 부족 문제를 해결하는 데 초점을 맞추고 있습니다. Weights & Biases가 유용한 지표를 어떻게 추적해 주는지 차트를 통해 살펴보겠습니다.
Run set
대부분의 실행에서 메모리 할당과 GPU 활용도가 92%–95%까지 사용되고 있음을 확인할 수 있습니다. 이는 계산 자원을 이미 최대한으로 활용하고 있음을 시사합니다.
캐시 정리하기
또 다른 방법은 가능한 경우마다 캐시를 정리해 공간을 확보함으로써, 아예 CUDA 메모리 부족 오류를 피하는 것입니다.
예를 들어, 각 폴드마다 모델을 학습하는 함수를 가지고 있다면 다음과 같이 사용할 수 있습니다 gc 그리고 torch 다음과 같이 캐시를 비울 수 있습니다:
import gcimport torchdef train_one_fold():. . .torch.cuda.empty_cache()gc.collect()
이는 메모리를 확보하는 데 도움이 되므로 CUDA 메모리 부족 오류 없이 더 큰 모델을 학습할 수 있게 해줍니다.
파라미터 조정하기
하이퍼파라미터는 딥러닝에서 매우 중요한 역할을 합니다. 대부분의 경우 다음과 같은 특정 파라미터의 값을 줄이면, 임의로 충분한 연산 자원에서 매우 큰 모델도 무리 없이 학습시킬 수 있습니다.
- 배치 크기: 이 방법이 당신의 시스템에서 더 큰 모델을 학습하는 가장 쉬운 방법일 수 있습니다. 대부분의 경우(비전, 언어, 음성 등) 배치 크기를 32나 16으로 설정하면 "RuntimeError: CUDA out of memory." 오류가 발생할 수 있습니다. 배치 크기를 8, 더 나아가 4 또는 2로 줄여서 시도해 보세요. 학습 시간은 ���어나지만 더 큰 모델을 학습할 수 있게 됩니다.
- 워커 수: 사용하는 경우 PyTorch DataLoader 그렇다면 num_workers 파라미터를 살펴볼 가치가 있습니다. 기본값은 0(프로세스 1개만 사용)을 의미하지만, 2 또는 4로 설정하는 경우가 꽤 흔합니다. 프로세스 수가 늘어날수록 메모리 사용량도 증가합니다.
- 기타: 원하는 모델 아키텍처로 학습하지 못하는 경우가 흔히 있지만, 비슷하면서 더 작은 모델로는 충분히 해결할 수 있습니다. 예를 들어 ResNet152를 학습하다가 OOM 오류가 발생한다면 ResNet101이나 ResNet50으로 시도해 보세요. 마찬가지로 NLP에서 "large" 모델을 사용할 수 없다면 "base"나 "distilled" 버전을 고려해 보세요.
💡
다시 한 번, "RuntimeError: CUDA out of memory." 오류를 직접 재현하고 해결 방법을 직접 확인해 보고 싶다면, 이 Colab에서 가능합니다:
요약
이 보고서에서는 Weights & Biases를 사용해 시스템 메트릭을 추적하고, 이를 통해 CUDA 메모리 부족 오류를 예방하고 해결하며 아예 피하는 데 도움이 되는 인사이트를 얻는 방법을 살펴보았습니다. W&B의 모든 기능을 확인하려면 다음을 참조하세요 간단한 5분 가이드수학적 내용과 “from-scratch” 코드 구현을 다룬 보고서를 더 원하신다면, 아래 댓글이나 포럼에서 알려주세요 ✨!
추천 읽을거리
PyTorch Dropout for regularization - tutorial
Learn how to regularize your PyTorch model with Dropout, complete with a code tutorial and interactive visualizations
How to Initialize Weights in PyTorch
A short tutorial on how you can initialize weights in PyTorch with code and interactive visualizations.
Setting Up TensorFlow And PyTorch Using GPU On Docker
A short tutorial on setting up TensorFlow and PyTorch deep learning models on GPUs using Docker.
How To Use GPU with PyTorch
A short tutorial on using GPUs for your deep learning models with PyTorch, from checking availability to visualizing usable.
Recurrent Neural Network Regularization With Keras
A short tutorial teaching how you can use regularization methods for Recurrent Neural Networks (RNNs) in Keras, with a Colab to help you follow along.
How to Compare Keras Optimizers in Tensorflow for Deep Learning
A short tutorial outlining how to compare Keras optimizers for your deep learning pipelines in Tensorflow, with a Colab to help you follow along.
Add a comment