서론
최근 회사에서 AWS GPU 서버를 올려 로컬 LLM을 직접 서빙하는 경험을 해 볼 수 있었다. 이전에 그정도로 고성능의 서버를 다루어 본 적도 없었고, LLM 모델 또한 이름만 아는 정도라서 여러 시행착오가 있었다.
그렇기에 이번 글에서는 미리 알았다면 더 좋았을 것들, 그리고 앞으로 공부할 부분들에 대해서 적어보고자 한다.
파라미터란?
파라미터란 무엇일까? 개발에서는 보통 함수에 넘겨주는 값(인자)을 파라미터라고 부른다.
ML에서는 그 개념이 약간 다르다.
간단히 말하자면 파라미터는 1개의 실수값과 같다. 즉, 0.00142 / -0.538 같은 것들을 의미한다.
비유를 들어서 설명해보겠다. 한 유명 요리사의 황금비율 레시피가 있다고 해보자. 이 레시피를 활용해서 정답에 가까운 요리를 만들기 위해서는, 고춧가루 2스푼(=2) / 소금 0.5스푼(=0.5) 등을 넣어야만 한다. 여기서 파라미터는 각각의 재료라고 볼 수 있다.
처음부터 완벽하게 레시피를 따라할 순 없을 것이기에, 1.1 / 0.35 와 같은 파라미터를 가졌다고 가정해보자. 계속해서 연습하고 맛을 보면서 점차 1.5 / 0.45, 1.9 / 0.5 .. 이런식으로 가까워질 수 있다. 이러한 과정을, 모델 학습이라고 부를 수 있다.
그래서, 왜 많으면 좋은가?
요즘에는 LLM 모델들의 파라미터 수가 27B / 80B / 122B.. 등 계속해서 올라가고 있다. 여기서 B는 10억개를 의미한다. 즉 27B는 27억개의 파라미터(재료)를 가지고 있는 모델이라는 의미이다.
파라미터의 개수가 많을수록 왜 좋은걸까?
위에서 비유를 들었던 유명 요리사의 레시피가 총 10개이고 이를 모델에게 최대한 정답에 가깝도록 학습시킨다고 해보자.
한 요리사(모델)은 재료(파라미터)가 20개뿐이다. 또 다른 요리사는 재료가 100개이다. 이 둘 중에서 10개의 레시피를 더욱 잘 재현할 수 있는 요리사는 누구일까? 당연히 후자가 훨씬 유리한 상황이라고 할 수 있다.
그렇기 때문에, 같은 학습 데이터를 제공하더라도 파라미터의 개수에 따라서 정확도가 달라질 수 밖에 없는 것이다.
VRAM이란?
LLM은 단순 계산을 동시에 매우 많이 처리해야 하기 때문에, CPU 대비 코어의 개수가 압도적으로 많은 GPU를 이용하곤 한다. (이 때문에 AI의 성장과 함께 GPU의 가격도 함께 폭등한 것이다.)
VRAM
RAM은 많이 들어보았는데, VRAM은 생소할 수 있다.
VRAM은, Video RAM의 준말로 GPU에서 사용하는 메모리라고 이해하면 된다.
그리고 이 VRAM의 크기에 따라 올릴 수 있는 모델들의 파라미터 개수가 달라진다.
VRAM 계산법
위에서 언급한 것처럼, 파라미터는 1개의 실수이다. 그렇기에 이를 사용하기 위해서는 어딘가에 저장해야만 한다. 일반적으로 BF16 (Brain Float 16, 아래에서 설명) 기준으로 파라미터 1개는 2바이트의 크기를 가진다.
그렇기에 만약 27B(270억) 모델을 이용하기 위해선, 270억 * 2바이트 == 54GB의 크기가 필요하다. 즉, VRAM이 54GB가 되지 않는다면, 해당 GPU에 모델을 올릴 수조차 없는 것이다.
Dense vs MoE
모델의 타입에는 대표적으로 Dense와 MoE 방식이 존재한다.
Dense (밀집형)
Dense는 밀집형으로, 모든 파라미터가 계산에 함께 참여하는 방식이다.
이 또한 비유를 들어서 설명해보도록 하겠다. 64명의 의사가 있는 한 병원에 치료 방법을 찾기 어려운 환자가 왔다고 해보자. 이 때 1명의 의사만 오는 것이 아니라 한 번에 모든 64명의 의사가 찾아와서 치료 방법을 논의한다.
수많은 논의 끝에 그들은 최적의 치료 방법을 찾을 수 있겠지만, 그 과정에서 많이 시간이 소요되게 된다.
MoE (Mixture of Experts)
MoE 방식은 Dense와 반대로, 일부 의사들만 골라서 그 환자에게 보내는 방식이다. 여기서 중요한 점은 아무나가 아니라, 가장 적합한 전문가들을 골라서 보낸다는 것이다. 그렇기에 이를 Mixture of Experts 라고 부른다.
비교표
이렇게만 보면 무조건 MoE가 더 좋은 방법인 것처럼 보일 수 있다. 하지만 무엇이든 장단점은 존재한다.
MoE는 내부적으로 어떤 전문가를 보내야 하는가?에 대한 선별 비용이 크지는 않지만 존재한다.
또한 아무래도 일부 전문가들만 보내다 보니, 특정한 경우에서는 Dense 방식보다 판단이 얕을 수가 있다. 특히 여러 분야가 겹치는 복잡한 질문에 약하다.
표로 정리하면 아래와 같다.
| Dense | MoE | |
|---|---|---|
| 동작 방식 | 모든 파라미터 참여 | 일부 전문가만 선택 |
| 추론 속도 | 느림 (전원 계산) | 빠름 (일부만 계산) |
| VRAM | 파라미터 수에 비례 | 전체 파라미터분 필요 (절약 안 됨) |
| 정확도 | 일반적으로 높음 | 복잡한 문제에서 약할 수 있음 |
| 추가 비용 | 없음 | 라우터 선별 오버헤드 |
| 대표 모델 | Qwen3.5-27B | Qwen3-30B-A3B |
MoE의 함정: VRAM은 줄지 않는다
오해할 수 있는 부분이 한 가지있다.
MoE 방식에서는 한 번에 모든 파라미터가 쓰이지는 않지만, 필요한 VRAM의 크기는 동일하다는 것이다.
병원에서 한 번에 3명의 의사만 진료를 가니, 나머지 61명의 의사는 없어도 되는 것일까? 그렇지 않을 것이다. 언제든 진료를 갈 수 있게 대기하고 있어야 하는 것과 같다.
양자화란?
위 VRAM 부분에서, 파라미터 개수에 따라서 필요한 VRAM의 크기가 달라진다고 했었다.
27B 모델을 메모리에 올리기 위해서는 54GB의 VRAM이 필요하다. 작은 수일 때는 괜찮을 수 있지만, 파라미터가 커지면 커질수록 필요한 VRAM의 크기가 선형적으로 증가하기에 부담이 커진다.
이러한 부담을 덜기 위해서 양자화라는 개념이 탄생했다. 양자화는, 파라미터의 바이트 수를 줄여서 더 작은 VRAM 크기로 모델을 올릴 수 있게 해주는 기법이다.
또한 각 파라미터의 크기가 줄어서, 읽어야 할 데이터 양 자체가 줄어들기 때문에 추론 속도가 향상된다는 점도 장점으로 꼽을 수 있다.
포맷별 비교
27B 모델 기준
| 포맷 | 비트 | 숫자 1개 크기 | VRAM | 품질 손실 |
|---|---|---|---|---|
| FP32 | 32bit | 4바이트 | ~108GB | 없음 (기준) |
| BF16 | 16bit | 2바이트 | ~54GB | 거의 없음 |
| FP8 | 8bit | 1바이트 | ~27GB | 미미 |
| INT4 | 4bit | 0.5바이트 | ~14GB | 체감됨 |
직관적 비유
양자화를 간단하게 말하면, 품질을 약간 포기하는 대신 크기를 줄이는 것이다.
이는 사진 압축으로 비교하면 좋을 듯하다. 원본 사진이 100MB라고 해보자.
여기서 BF16 포맷으로 압축하면 약간의 품질 저하는 있을 수 있지만, 50MB로 크기가 절반으로 줄어든다.
FP8 / INT4 포맷으로 압축하면 품질은 더 저하되는 대신에, 크기는 더 많이 줄어들 것이다.
결과적으로 양자화에는 트레이드오프가 존재하고, 이를 상황에 따라 잘 선택하는 것이 가장 중요하겠다.
그래서 어떤 걸 선택해야 하나?
의사결정 플로우
정답은 없지만, 개인적으로 정리하자면 아래와 같다.
- VRAM 여유 있음 →
BF16 - VRAM 부족함 →
FP8 - 그래도 안 됨 →
INT4→ 여기부터는 품질 저하를 고려해야 한다. - 그래도 안 됨 → 그냥 파라미터가 더 작은 모델을 쓰자..
주의할 점
1. FP8에서 NaN이 발생할 수 있다
NaN은 Not a Number의 준 말로, 모델이 숫자가 아닌 값을 뱉어내는 것을 의미한다. FP8은 표현할 수 있는 숫자 범위가 좁기 때문에, 특정한 가중치가 그 범위를 넘어가면 NaN이 발생한다.
그렇기에 FP8을 사용하려고 할 때는, 보고된 NaN 이슈가 있는지 먼저 파악하고 사용하는 것이 좋겠다.
2. MoE 모델의 양자화는 효과가 적다
MoE는 특정 파라미터만 계산을 진행하기 때문에, Dense에 비해 추론 속도가 빠른 것이 장점이라고 했었다. 하지만 양자화를 해서 크기를 줄이게 되면, Dense도 속도가 빨라져 MoE 만의 장점이 퇴색될 수가 있다.
또한 MoE는 애초에 파라미터도 적게 사용하는데, 양자화를 해서 이를 더 줄여버리면 추론 능력에 문제가 발생할 여지가 있다.
그렇기 때문에 MoE는 보통 BF16으로 그대로 쓰는 것을 권장하고, Dense 모델을 양자화 하는 것이 더 나은 선택이라고 한다.
3. 파라미터가 작은 모델일수록 양자화 손실이 크다
양자화를 하게 되면, 각 파라미터의 크기가 줄어들고 정확도가 줄어든다. 여기서 그나마 파라미터의 개수라도 많다면 이를 서로 보완하며 최소한으로 성능 손실을 줄일 수 있을 것이다.
하지만 2B 처럼 파라미터 개수가 작다면, 양자화는 치명적인 품질 손실로 이어질 수가 있다.
그렇기 때문에 작은 모델은 어차피 VRAM을 적게 차지하니 그대로 사용하고, 큰 모델을 양자화 하는 것이 더 좋은 판단이 된다.
마무리
이번 글에서는 몰랐던 개념들에 대해 익힐 수 있어서 유익했다. 또한 비유를 들어서 글을 작성하니 훨씬 이해가 잘 되었고, 누군가에게 설명을 할 때 도움이 될 것 같다.
그리고 처음으로 클로드와 함께 협업? 형태로 글을 작성하였는데 꽤나 좋은 방법인 것 같다. 작성할 글 주제를 공유해서 목차를 잡고, 내가 먼저 작성하고 모르는 개념들을 물어보며 진행했다. 공부도 잘 되고, 큰 틀에서 벗어나지 않도록 도와주어서 비교적 빠르게 글을 마무리 할 수 있었던 것 같다!
작성 시간: 2시간 20분