본문 바로가기

인공지능

대형 언어 모델, 얼마나 많은 GPU 메모리가 필요할까? - LLM VRAM 계산 공식과 실제 예제로 알아보는 VRAM 요구량의 모든 것

728x90
반응형

 

https://apxml.com/posts/how-to-calculate-vram-requirements-for-an-llm

왜 GPU 메모리가 부족한 걸까?

대형 언어 모델을 실행하거나 학습시키다 보면 자주 마주치는 메시지가 있습니다. 바로 "메모리가 부족합니다". 아무리 고사양 GPU를 써도 메모리가 빠르게 소진되기 때문에, 이 메시지는 더 이상 생소하지 않습니다.

문제는 단순히 모델이 크기 때문만이 아닙니다. 언어 모델을 실행할 때는 다양한 요소들이 메모리를 차지합니다. 그걸 모르면 정확한 리소스 계획을 세우기 어렵고, 자원을 낭비하거나 시스템이 중단되는 상황을 겪게 됩니다.

이 글에서는 대형 언어 모델이 어떤 방식으로 GPU 메모리를 사용하는지, 각 요소가 어떤 역할을 하고, 어떤 상황에서 메모리 사용량이 급증하는지를 설명합니다. 또한, 상황에 따라 얼마나 많은 메모리가 필요한지 감을 잡을 수 있도록 도와드립니다.

반응형

LLM이 사용하는 메모리, 어디에 쓰일까?

모델 자체의 무게

가장 기본적으로, 언어 모델의 가중치와 바이어스 같은 파라미터 정보가 메모리를 차지합니다. 모델의 크기가 클수록, 즉 파라미터 수가 많을수록 이 부분이 많이 필요해집니다. 예를 들어, 70억 개 파라미터를 가진 모델은 실행만 해도 상당한 용량의 GPU 메모리가 요구됩니다.

학습할 때 필요한 추가 정보

학습을 진행할 경우에는 단순히 모델을 실행하는 것 이상의 메모리가 필요합니다. 그래디언트, 옵티마이저 상태 등 학습 중간에 생기는 정보들도 메모리에 올라가야 하기 때문입니다. 특히 옵티마이저는 모델 파라미터 수보다 더 많은 데이터를 유지하므로, 학습 시 메모리 요구량은 실행(Inference)보다 훨씬 큽니다.

활성화 값 (Activations)

입력 데이터를 모델에 넣고 계산을 진행하는 동안, 각 레이어마다 생기는 중간 결과를 저장하는 공간도 필요합니다. 이를 활성화 메모리라고 부르는데, 배치 크기나 입력 길이가 길수록 이 공간도 커집니다. 학습 과정에서는 이 값들을 역전파에 쓰기 위해 모두 저장해야 하므로 메모리 사용량이 급격히 증가합니다.

텍스트 생성 시 필요한 캐시 (KV 캐시)

언어 모델이 텍스트를 생성할 때는 지금까지 생성한 모든 토큰의 상태를 기억하고 있어야 합니다. 이를 위해 각 레이어에서 이전 상태를 캐시에 저장하는데, 이를 KV 캐시라고 부릅니다. 생성할 문장이 길어질수록 캐시도 커지고, 그만큼 메모리도 더 많이 필요합니다.

프레임워크 및 기타 오버헤드

PyTorch나 Hugging Face Transformers 같은 프레임워크 자체도 어느 정도의 메모리를 사용합니다. 여기에 CUDA 커널, 통신 버퍼, 디버깅 정보 같은 오버헤드가 더해지기 때문에 실제로 사용할 수 있는 메모리는 생각보다 줄어들 수 있습니다.


상황별 메모리 사용량의 차이

단순 실행(Inference)

모델을 불러와서 질문에 대한 답변을 생성하는 정도의 단순 실행에서는 모델 파라미터와 캐시, 활성화 정보만 필요합니다. 이 경우에도 입력 길이나 배치 크기에 따라 메모리 요구량이 크게 달라지는데, 문장을 한 번에 여러 개 생성하려 하거나 긴 입력을 처리하려 하면 금방 메모리가 가득 찹니다.

예를 들어, 중형 규모 모델을 단일 GPU에서 돌리려면 최소 20~30GB 이상이 필요할 수 있습니다. 대형 모델은 그 이상이 필요하며, 경우에 따라 80GB 이상의 고사양 GPU가 요구됩니다.

전체 학습 (Full Fine-Tuning)

모델 전체를 학습시키는 경우는 메모리 소모가 가장 큽니다. 모델의 모든 파라미터를 수정해야 하고, 각 파라미터에 대한 그래디언트와 옵티마이저 상태도 따로 저장해야 하기 때문입니다. 여기에 활성화 값까지 더해지면, 단일 GPU로는 감당이 어려워 여러 개의 GPU를 병렬로 연결하거나 메모리 최적화를 반드시 병행해야 합니다.

경량 미세조정 (LoRA, QLoRA)

최근에는 LoRA나 QLoRA 같은 방법을 활용해 모델 전체가 아닌 특정 부분만 학습하는 방식이 많이 사용됩니다. 이 경우 학습해야 하는 파라미터 수가 극적으로 줄어들기 때문에 메모리 사용량도 훨씬 적습니다. 고사양 GPU가 아니더라도 적절한 설정과 양자화를 병행하면 실용적인 수준에서 미세조정이 가능합니다.


메모리에 영향을 주는 설정 요소들

정밀도 (Precision)

모델 파라미터나 계산에 사용하는 데이터의 정밀도는 메모리 요구량에 직접적인 영향을 줍니다. 일반적으로는 32비트보다 16비트를 사용하는 것이 훨씬 효율적이며, 최근에는 8비트나 4비트로 줄이는 양자화 기법도 활발하게 사용됩니다. 정밀도가 낮아지면 메모리는 줄지만 정확도 손실이 발생할 수 있어, 균형 잡힌 선택이 중요합니다.

배치 크기와 시퀀스 길이

한 번에 몇 개의 입력을 처리할지(배치 크기), 그리고 각 입력이 얼마나 긴지(시퀀스 길이)에 따라 메모리 사용량이 크게 달라집니다. 대량의 데이터를 빠르게 처리하고 싶을수록 메모리를 더 많이 확보해야 합니다.

멀티 GPU 구성

여러 개의 GPU를 사용하는 경우, 일부 데이터를 나눠서 저장할 수 있지만 그에 따른 통신과 동기화 비용으로 추가 메모리 오버헤드가 발생합니다. 단순히 GPU 수를 늘리는 것만으로 효율이 100% 올라가는 건 아니라는 점도 기억해야 합니다.


실무에서 유용한 메모리 관련 도구들

  • nvidia-smi: GPU 사용 현황을 확인하는 기본 도구
  • PyTorch 메모리 분석 함수: 코드 내에서 현재 GPU 메모리 상황을 상세하게 파악 가능
  • accelerate: Hugging Face에서 제공하는 메모리 추정 및 분산 학습 도구
  • bitsandbytes: 8비트/4비트 양자화 및 경량 옵티마이저 지원 도구

이런 도구들을 활용하면 단순히 "터졌다, 안 터졌다" 식의 감각적인 판단이 아닌, 근거 기반의 자원 계획이 가능해집니다.


메모리를 줄이기 위한 실용적 팁

  • 그래디언트 누적: 메모리를 덜 쓰고도 큰 배치 효과 얻기
  • 활성화 체크포인팅: 중간 데이터를 저장하지 않고 다시 계산함으로써 메모리 절약
  • 양자화: 8비트나 4비트로 모델 정밀도를 줄여 실행 가능 모델 범위 확대
  • CPU 오프로딩: 덜 자주 쓰는 데이터는 CPU RAM으로 이동
  • 여유 메모리 확보: 항상 10~20% 정도의 여유를 남겨두는 것이 안정성 확보에 중요

728x90

GPU 메모리는 LLM 작업의 시작과 끝을 결정짓는 핵심 자원입니다. 단순히 모델 크기만 고려할 게 아니라, 어떤 작업을 하느냐에 따라 필요한 메모리 양이 달라지고, 이를 구성하는 요소들까지 잘 이해해야 실전에서 막힘 없이 작업할 수 있습니다.

이번 글에서 소개한 내용을 참고하면, 지금 사용하는 모델이 왜 터졌는지, 어느 정도 VRAM이 있어야 적절한 성능을 낼 수 있는지 판단하는 데 도움이 될 것입니다. 앞으로 LLM의 활용이 더욱 넓어지는 만큼, GPU 메모리 이해는 더 이상 선택이 아니라 필수입니다.

https://apxml.com/tools/vram-calculator

 

Can You Run This LLM? VRAM Calculator (Nvidia GPU and Apple Silicon)

Calculate the VRAM required to run any large language model.

apxml.com

728x90
반응형