GPU 메모리 계산과 Can it Run LLM? 도구 활용 가이드

최근 대규모 언어 모델(LLM)이 점점 더 중요한 역할을 하고 있다.
이러한 모델을 실행하려면 고성능 GPU가 필요하고, GPU 메모리 요구량을 정확히 계산하는 것이 필수적이다.
이 글에서는 GPU 메모리 계산식을 통해 메모리 요구량을 예측하는 방법을 소개하고, Can it Run LLM?이라는 유용한 도구를 활용해 자신이 보유한 하드웨어가 모델을 실행할 수 있는지 빠르게 판단하는 방법을 설명한다.


 

1. GPU 메모리 계산식

LLM과 같은 대규모 모델을 GPU에서 실행할 때, 모델의 파라미터 수와 비트 수에 따라 GPU 메모리 소비량이 달라진다. 아래는 모델의 메모리 요구량을 계산하는 기본적인 공식이다.

  • M: 기가바이트(GB) 단위의 GPU 메모리 요구량
  • P: 모델 파라미터 수 (수십억 개가 될 수 있음)
  • 4B: 파라미터당 4바이트(FP32 연산에 해당)
  • Q: 모델 로딩 시 사용하는 비트 수 (보통 16비트(FP16) 또는 32비트(FP32))
  • 1.2: 오버헤드를 고려한 20% 추가 메모리 요구량

각 변수 설명

  • P (모델 파라미터 수): 모델의 파라미터 수는 모델 크기에 비례한다. 예를 들어, 파라미터 수가 수십억 개인 모델은 그에 따라 더 많은 메모리를 요구한다.

  • 4B (파라미터당 4바이트): 각 파라미터가 메모리에서 차지하는 공간이다. 4바이트는 FP32(32비트 부동소수점) 연산에서 파라미터당 소비되는 메모리 크기이다. 이 값은 고정되어 있다.

  • Q (비트 수): 모델을 메모리에 로드할 때 사용하는 비트 수를 나타낸다. FP16(16비트)와 FP32(32비트)로 구분되며, Q가 16일 경우 메모리 요구량이 절반으로 줄어든다.

  • 1.2 (오버헤드 반영): 실제로 모델을 GPU에 로드할 때는 계산된 메모리 요구량보다 약 20% 정도의 여유 메모리가 필요하다. 이를 반영하기 위해 1.2를 곱해준다.

예시: FP32와 FP16의 메모리 요구량 비교

파라미터 수가 10억 개인 모델을 FP32로 로딩할 경우:

FP16을 사용하면:

이처럼 FP16을 사용하면 절반의 메모리로 모델을 로딩할 수 있다.


 

2. Can it Run LLM? 도구 소개

이제 GPU 메모리 요구량을 계산했으니, 실제로 자신이 가진 GPU에서 모델을 실행할 수 있는지 확인해야 한다. 이를 쉽게 확인할 수 있도록 Hugging Face에서 제공하는 Can it Run LLM? 도구를 소개한다.

이 도구는 대규모 언어 모델을 실행할 수 있을지 예측해주는 간단한 웹 도구이다. 모델 파라미터 수GPU 메모리, 비트 수만 입력하면 모델이 실행 가능한지 여부를 계산해준다.


 

3. Can it Run LLM? 도구 활용 예시

만약 사용자가 NousResearch/Meta-Llama-3-8B-Instruct 모델을 실행하고 싶다고 가정해보자. 이 모델은 약 80억 개의 파라미터를 가지고 있다.
Can it Run LLM? 도구에 아래와 같이 입력한다:

  • Access token: <액세스 토큰 필요한 모델일 시>
  • Model name (Press Enter to apply): huggingface의 모델 명
  • GPU Vendor: GPU 벤더사 선택
  • Filter by RAM (GB): 사용할 GPU의 메모리
  • GPU: GPU 선택

위 이미지에서 확인할 수 있듯이, Can it Run LLM? 도구는 모델이 사용하는 메모리 용량을 시각적으로 확인할 수 있는 다양한 정보를 제공한다.

예시로 제공된 모델의 여러 비트 정밀도에 따른 GPU 메모리 요구량과 추론 또는 학습 시 필요한 GPU 수를 보여준다.

3.1. 추론(Inference) 시 GPU 요구량


이미지 상단에서 확인할 수 있듯이, int8, float16float32와 같은 데이터 유형에 따라 GPU 메모리 사용량이 달라진다.

  • int8 형식에서는 1개의 GPU가 필요하다고 계산되었다.
  • 추론을 위한 GPU 메모리 사용량도 각 데이터 유형에 따라 다른데, 예를 들어 float32 형식에서는 33.55GB, float16 형식에서는 16.89GB가 필요하다.

3.2. 훈련 시 GPU 요구량

모델을 풀 트레이닝(Adam 옵티마이저 사용)할 때 요구되는 GPU 메모리 요구량은 상당히 크다.

  • float32 형식에서는 약 111.83GB가 필요하며, float16을 사용할 경우에는 메모리 요구량이 절반 이하로 줄어들어 55.92GB로 계산된다.
  • 이러한 메모리 요구량에 따라 float32 형식의 풀 트레이닝에는 6개의 GPU가 필요하고, float16 형식에서는 2개의 GPU로 충분한 것을 확인할 수 있다.

3.3. LoRa Fine-tuning 시 GPU 요구량

LoRa Fine-tuning의 경우, float16 정밀도를 사용하는 Fine-tuning에서는 메모리 요구량이 34.99GB로 계산되었으며, 이 경우 1개의 GPU가 필요하다. 이는 LoRa와 같은 파인 튜닝 방식이 메모리 사용을 크게 절감하는 데에 도움을 준다는 것을 보여준다.

3.4. 그래프 분석


오른쪽 그래프는 다양한 데이터 유형 및 작업에 따른 GPU 요구량을 시각적으로 나타낸다. 추론, 풀 트레이닝, 그리고 LoRa 파인 튜닝 시 각 데이터 타입(예: float32, float16, int8, int4)에 따른 메모리 사용량 차이를 한눈에 확인할 수 있다.

  • 풀 트레이닝(Adam 사용)의 경우 GPU 요구량이 가장 크며, float32에서 6개의 GPU가 필요한 반면, float16에서는 2개의 GPU가 필요하다.
  • 반면, 추론과 LoRa Fine-tuning에서는 GPU 수가 적게 필요하며, 각 작업에 따른 메모리 최적화 효과를 쉽게 확인할 수 있다.

이처럼 Can it Run LLM? 도구는 모델 파라미터 수와 데이터 타입에 따른 메모리 요구량을 빠르게 계산하고, 이를 시각적으로 보여줌으로써 사용자가 자신이 보유한 GPU로 모델을 실행할 수 있는지 빠르게 판단할 수 있도록 돕는 유용한 도구이다.


 

4. 결론

대규모 언어 모델을 실행할 때는 GPU 메모리 요구량을 정확하게 계산하는 것이 매우 중요하다. 이번 글에서 소개한 GPU 메모리 계산식과 Can it Run LLM? 도구를 활용하면, 자신의 하드웨어에서 모델이 실행 가능한지 빠르게 확인할 수 있다. FP16과 FP32의 차이, 오버헤드를 고려한 메모리 요구량 등을 이해함으로써, 효율적인 GPU 자원 관리를 통해 대규모 모델을 적절하게 활용할 수 있을 것이다.

이 도구와 계산식을 활용하여 더 나은 하드웨어 선택과 메모리 관리에 도움을 얻기를 바란다.


 

참고