귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!=== 인공지능 학습에서의 VRAM OOM === 2020년대 들어 [[딥러닝]] 모델의 규모가 급격히 커지면서, [[GPU]]의 [[VRAM]](비디오 메모리) 부족으로 인한 OOM이 일반적인 시스템 메모리 부족만큼이나 흔하게 언급되는 문제가 되었다. 흔히 '''CUDA OOM''' 또는 그냥 '''VRAM OOM'''이라 불리며, 딥러닝을 다루는 개발자·연구자 사이에서는 거의 통과의례처럼 취급된다. ==== 발생 원인 ==== * '''모델 크기 자체의 증가''': [[거대 언어 모델|LLM]]이나 대형 [[디퓨전 모델]]의 파라미터 수가 수십억~수천억 개에 달하면서, 모델 가중치를 GPU 메모리에 올리는 것만으로도 VRAM을 상당량 소모한다. * '''배치 크기(Batch Size) 과다''': 한 번에 처리하는 데이터 샘플 수(배치 크기)를 지나치게 크게 설정하면 순전파·역전파 과정에서 저장해야 할 [[활성화 함수|활성화 값]]과 [[그래디언트]]가 비례해서 증가해 VRAM을 초과한다. * '''그래디언트 및 옵티마이저 상태''': 학습 시에는 단순히 모델 가중치뿐 아니라 그래디언트, [[Adam]] 등 옵티마이저의 모멘텀·분산 상태까지 함께 저장해야 하므로, 추론(inference)보다 학습(training)이 훨씬 많은 메모리를 요구한다. 일반적으로 풀 파인튜닝 기준 학습에 필요한 메모리는 추론 대비 3~4배 이상으로 알려져 있다. * '''시퀀스 길이(Context Length) 증가''': [[트랜스포머]] 계열 모델은 [[어텐션 메커니즘|어텐션]] 연산의 메모리 사용량이 입력 시퀀스 길이의 제곱에 비례해 증가하는 특성이 있어, 긴 문맥을 처리할수록 VRAM 소모가 급격히 늘어난다. * '''메모리 파편화(Fragmentation)''': 할당과 해제가 반복되면서 VRAM 내에 사용 가능한 공간이 조각조각 흩어져, 총 여유 메모리는 충분해 보여도 연속된 큰 블록을 할당하지 못해 OOM이 발생하는 경우도 있다. ==== 대표적인 오류 메시지 ==== [[PyTorch]] 기반 환경에서는 다음과 같은 형태의 오류가 대표적이다. <pre> RuntimeError: CUDA out of memory. Tried to allocate 2.00 GiB (GPU 0; 23.69 GiB total capacity; 20.91 GiB already allocated; 1.23 GiB free; 21.45 GiB reserved in total by PyTorch) </pre> [[TensorFlow]]에서는 <code>ResourceExhaustedError</code>라는 이름으로 유사한 오류가 발생한다. ==== 대처 방법 ==== * '''배치 크기 축소''': 가장 간단하고 직접적인 해결책이지만 학습 속도나 [[그래디언트]] 추정의 안정성에 영향을 줄 수 있다. * '''그래디언트 누적(Gradient Accumulation)''': 배치 크기를 줄이는 대신 여러 스텝에 걸쳐 그래디언트를 누적한 뒤 한 번에 업데이트하여, 메모리는 적게 쓰면서도 사실상 큰 배치로 학습한 것과 유사한 효과를 낸다. * '''혼합 정밀도 학습(Mixed Precision Training)''': 32비트 부동소수점 대신 16비트([[FP16]]/[[BF16]])를 사용해 메모리 사용량과 연산 속도를 동시에 개선한다. * '''그래디언트 체크포인팅(Gradient Checkpointing)''': 역전파에 필요한 중간 활성화 값을 모두 저장하지 않고 일부만 저장한 뒤 필요할 때 재계산하는 방식으로, 연산량을 늘리는 대신 메모리 사용량을 크게 줄인다. * '''모델 병렬화 및 분산 학습''': [[DeepSpeed]]의 [[ZeRO]], [[FSDP]](Fully Sharded Data Parallel) 등을 이용해 모델 가중치·옵티마이저 상태·그래디언트를 여러 GPU에 나누어 저장한다. * '''양자화(Quantization) 및 LoRA''': 추론 시에는 모델을 [[INT8]]/[[INT4]] 등으로 양자화하고, 파인튜닝 시에는 전체 파라미터 대신 일부 저랭크(low-rank) 파라미터만 학습하는 [[LoRA]](Low-Rank Adaptation) 기법을 사용해 필요한 메모리를 대폭 줄인다. * '''오프로딩(Offloading)''': VRAM에 다 올리지 못하는 부분을 시스템 RAM이나 [[NVMe]] SSD로 내려서 관리하는 방식. 속도는 느려지지만 아예 학습이 불가능한 상황은 피할 수 있다. ==== 여담 ==== * [[Kaggle]], [[Google Colab]] 등 무료/저사양 GPU 환경에서 개인 연구자나 학생들이 모델을 학습시키다가 "또 오붐났다"며 하소연하는 것은 딥러닝 커뮤니티의 흔한 밈(meme)이자 일상이다. * VRAM OOM은 단순히 코드를 잘못 짜서 발생하는 문제라기보다, 하드웨어 자원과 모델 규모 사이의 근본적인 트레이드오프에서 비롯되는 경우가 많아, 위 대처법들을 조합해도 결국 "더 큰 GPU를 사는 것"이 가장 확실한 해결책이라는 자조 섞인 농담이 자주 나온다. 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)