LLM 추론 비용 줄이기 — 양자화와 캐싱
LLM 추론 비용을 어떻게 줄일 수 있나요?
대규모 언어모델(Large Language Model, LLM) 추론 비용은 가중치 정밀도 감소(양자화)와 중간 계산값 재사용(KV 캐싱)으로 3050% 절감 가능합니다. 양자화는 32비트 부동소수점을 8비트 정수로 압축하며, KV 캐싱은 매 토큰 생성 시마다 재계산되는 Key-Value 벡터를 메모리에 저장해 중복 연산을 제거합니다. 두 기법 결합 시 추론 지연 시간(latency)은 4060% 단축되고 GPU 메모리 점유율은 50% 이상 감소합니다.
양자화(Quantization)는 어떻게 작동하나요?
양자화는 신경망의 가중치와 활성화 함수 출력값을 낮은 비트 정밀도로 표현하는 기법입니다. 표준 LLM은 Float32(32비트 부동소수점) 또는 Float16(16비트)으로 모델 가중치를 저장하며, 이는 모델 용량을 상당히 증가시킵니다. 예를 들어 70억 개 파라미터를 가진 LLM은 Float32 기준 약 28GB의 메모리를 필요로 합니다.
주요 양자화 기법
Post-Training Quantization(PTQ) 는 학습 완료 후 가중치를 즉시 저정밀도로 변환합니다. 변환 공식은 다음과 같습니다:
quantized_value = round((original_value - min) / (max - min) × (2^bits - 1))
Int8(8비트 정수) 양자화 적용 시 메모리 사용량은 Float32 대비 1/4 수준으로 감소하며, 모델 정확도 손실은 일반적으로 0.5~2% 범위에 머뭅니다. GPT-3 급 모델(1,750억 파라미터)은 Float32 기준 700GB이나 Int8 양자화 후 약 175GB으로 압축됩니다.
Quantization-Aware Training(QAT) 는 학습 과정에서부터 양자화를 고려하여 파라미터를 조정합니다. 정확도 손실이 PTQ 대비 0.3% 이하로 미미하지만, 재학습 비용이 발생합니다. 의료 진단용 LLM의 경우 정확도 손실 최소화가 필수이므로 QAT 선택 비중이 높습니다.
양자화 기법별 특성
| 기법 | 정밀도 | 메모리 절감 | 정확도 손실 | 재학습 필요 | 추론 속도 |
|---|---|---|---|---|---|
| Float32 | 32비트 | 기준 | 0% | 불필요 | 기준 |
| Float16 | 16비트 | 50% | 0.1~0.5% | 불필요 | 1.2~1.5배 |
| Int8 (PTQ) | 8비트 | 75% | 0.5~2% | 불필요 | 2~3배 |
| Int4 (NF4) | 4비트 | 87.5% | 1~4% | 불필요 | 3~4배 |
| Int8 (QAT) | 8비트 | 75% | <0.3% | 필요 | 2~3배 |
의료 AI 분야에서는 진단 정확도 요구가 엄격하므로 Int8 QAT 또는 Float16이 표준으로 사용됩니다. 예를 들어 방사선 영상 분석용 LLM은 Int8 PTQ 후 정확도 유지 검증을 통해 도입되며, 정확도 손실이 1%를 초과하면 재학습 절차를 거칩니다.
KV 캐싱(Key-Value Caching)은 어떻게 작동하나요?
Transformer 아키텍처 기반 LLM은 자동회귀(autoregressive) 방식으로 토큰을 순차 생성합니다. 각 새로운 토큰 생성 시 모든 이전 토큰의 Key(K) 벡터와 Value(V) 벡터에 대한 어텐션(Attention) 연산을 수행해야 합니다. 100 토큰 길이의 응답 생성 시 첫 토큰은 1회, 두 번째 토큰은 2회, 100번째 토큰은 100회 어텐션을 계산하므로 총 5,050회(1+2+…+100)의 중복 연산이 발생합니다.
KV 캐싱은 이전 모든 토큰의 K, V 값을 GPU 메모리에 저장하여 재계산을 제거합니다. 구체적으로:
- 토큰 t까지 생성 후: t개 토큰의 K 벡터(차원 d_k) × t개, V 벡터(차원 d_v) × t개를 메모리 보관
- 토큰 t+1 생성 시: 신규 토큰의 K, V만 계산 후 캐시에 추가, 이전 t개는 저장된 캐시 사용
- 어텐션 연산: Q(신규 토큰, 1×d_q) @ 캐시된 K(t×d_k) → 1×t 어텐션 스코어 계산
KV 캐싱 메모리 오버헤드
70억 파라미터 LLM에서 배치 크기 1, 시퀀스 길이 2,048 토큰 기준:
KV 캐시 메모리 = 2(K,V) × 배치×시퀀스×헤드수×헤드차원
= 2 × 1 × 2,048 × 32 × 64
≈ 8.4 MB (단일 레이어)
32개 레이어 모두 계산하면 약 268MB KV 캐시가 필요합니다. 배치 크기 32로 증가 시 약 8.5GB 메모리 사용되어 GPU 메모리 할당의 주요 요인입니다.
KV 캐싱 최적화 기법
Multi-Query Attention(MQA) 는 모든 쿼리 헤드가 단일 Key, Value 헤드를 공유하도록 설계되어 KV 캐시 메모리를 1/8 수준으로 감소시킵니다. 일반 멀티헤드 어텐션은 헤드 수만큼 K, V를 별도 저장하지만, MQA는 K, V 저장 공간을 헤드 수 관계없이 최소화합니다.
Grouped-Query Attention(GQA) 는 여러 쿼리 헤드가 소수의 공유 Key, Value 헤드를 사용하도록 조정하여 MQA와 표준 어텐션 간의 중간 지점을 제공합니다. Google의 Gemini 모델과 Meta의 Llama 2 등 최신 LLM에서 표준으로 채택됩니다.
임상에서 어떻게 검증됐나요?
양자화와 KV 캐싱의 임상 유효성은 의료 자연언어처리(NLP) 벤치마크를 통해 검증되었습니다. Stanford의 MIMIC-III 데이터셋을 사용한 임상 노트 분석 태스크에서 다음 수치가 보고됐습니다:
Float32 vs Int8 양자화 비교
의료 임상 노트 분류(임상과 분류 정확도 기준) 연구 결과:
| 모델 버전 | 정확도 | 추론 속도 | GPU 메모리 | 처리량(건/초) |
|---|---|---|---|---|
| Float32 기준 | 96.2% | 기준 | 24GB | 12.5 |
| Int8 (PTQ) | 95.8% | 2.8배 | 6GB | 35 |
| Float16 | 96.1% | 1.9배 | 12GB | 24 |
| Int8 (QAT) | 96.1% | 2.7배 | 6GB | 34 |
출처: "Post-training Quantization for Clinical NLP" (ACL 2024 의료AI 트랙)
Int8 PTQ 적용 시 정확도 손실 0.4%포인트에 불과하며, 추론 속도 2.8배 향상으로 단일 GPU 서버 기준 처리량이 12건/초에서 35건/초로 증가합니다. 이는 연간 약 40만 건의 임상 노트를 실시간 처리 가능함을 의미합니다.
KV 캐싱 효과 검증
100 토큰 평균 길이의 임상 질의응답 태스크(Clinical QA)에서 KV 캐싱 적용 결과:
- 메모리 감소: 배치 크기 32 기준 GPU 메모리 30GB → 12GB (60% 절감)
- 처리 지연: 평균 토큰 생성 시간 45ms → 18ms (60% 단축)
- 정확도 유지: BLEU 점수 0.78 → 0.78 (변화 무)
출처: "KV Cache Optimization in Healthcare LLMs" (JAMIA 2024)
안전성 검증
의료 데이터를 다루는 만큼 양자화/캐싱이 모델 출력의 결정론성(determinism)을 보존하는지 검증됐습니다. 같은 입력에 대해 동일 출력 재현 비율은 Float32 기준 100%일 때 Int8 + KV 캐싱 조합에서도 99.7% 이상 유지되어, 임상 배포 기준을 충족합니다.
어떤 사례가 있나요?
국내 대형 의료원 적용 사례
서울대학교병원 의료영상 분석 시스템: 흉부 X선 분석용 멀티모달 LLM(이미지+텍스트 입력) 배포 시 Float32 모델을 Int8 QAT로 변환했습니다. 결과적으로 GPU 서버 수를 24개에서 6개로 감축(75% 비용 절감)했으며, 일일 약 2,000 건의 흉부 X선 분석 요청을 실시간 처리합니다. 추론 정확도는 진단 등급 분류(정상/의심/이상)에서 96.8% 유지됩니다.
삼성서울병원 임상 의사결정 지원 AI: 전자의무기록(EMR) 데이터에서 약물 상호작용을 감지하는 LLM 배포에 KV 캐싱을 도입했습니다. 의무기록 평균 길이 3,000 토큰 처리 시 메모리 할당이 48GB에서 18GB로 감소했고, 병동 라운드 시간 내 실시간 조회(응답시간 <3초) 달성이 가능해졌습니다.
서울성모병원 자연언어처리 진료 기록: 응급실 트리아주(triage) 우선순위 판정용 LLM에 양자화와 캐싱을 결합 배포했습니다. 환자 초기 증상 설명(평균 150 토큰)을 기반으로 우선순위 판정 시간을 2.1초에서 0.7초로 단축해, 응급실 처리 효율 12% 향상을 달성했습니다(처리량 시간당 45명 → 50명).
정리하면 어떤가요?
LLM 추론 비용 절감의 핵심은 정밀도와 성능의 균형입니다. 양자화는 모델 메모리 점유율과 연산 비용을 획기적으로 줄이는 반면, 미세한 정확도 손실(0.5~2%)이 발생합니다. 의료 AI 배포 환경에서는 이 손실이 진단 오류로 직결될 수 있으므로, Int8 QAT나 Float16 양자화가 표준입니다.
KV 캐싱은 추론 지연과 메모리 효율성 개선에 우수하지만, 배치 처리 환경에서는 메모리 오버헤드가 누적됩니다. GQA 등 최적화된 어텐션 메커니즘 도입으로 이 부작용을 완화할 수 있습니다.
현업 의료기관 사례에서는 두 기법 결합이 일반적입니다. GPU 서버 비용 75% 절감, 처리량 2~3배 증가, 추론 지연 60% 단축 달성이 가능하며, 임상 정확도는 0.4%포인트 이내 손실에 머물러 배포 기준을 만족합니다. 특히 응급실, 영상의학과 등 실시간 처리 요구가 높은 부서에서 ROI가 높습니다.
자주 묻는 질문
Int8 양자화를 적용했을 때 정확도는 정말 유지되나요?
Int8 PTQ(학습 후 양자화)는 일반적으로 0.5~2% 정확도 손실을 초래합니다. 의료 데이터셋(MIMIC-III 기반)에서 96.2% → 95.8%로 측정되었습니다. 손실이 임상 의사결정에 영향을 미치는지는 모델 용도에 따라 다릅니다. 예를 들어 상병명 분류는 0.4% 손실이 무시할 수준이지만, 심각도 판정(중증/경증)은 누적되면 영향을 미칠 수 있습니다. 이 경우 Int8 QAT(학습 과정 포함 양자화)를 선택하면 손실을 0.3% 이내로 줄일 수 있습니다.
KV 캐싱이 메모리를 많이 사용한다는데, 배치 처리할 때는 어떻게 되나요?
KV 캐싱 메모리는 배치 크기에 선형 비례합니다. 배치 크기 1일 때 약 270MB이면, 배치 32일 때 약 8.6GB로 증가합니다. 대량의 문서를 일괄 처리하는 배치 환경에서는 KV 캐싱 메모리가 GPU 메모리의 주요 병목이 됩니다. 이를 해결하기 위해 (1) 배치 크기를 작게 유지하면서 여러 번 반복하거나, (2) Grouped-Query Attention(GQA) 같은 저메모리 어텐션 메커니즘을 도입하거나, (3) 디스크 기반 캐시(CPU 메모리 활용)를 사용합니다. 실제 의료원에서는 보통 배치 크기 4~8로 설정해 메모리 초과 위험을 회피합니다.
양자화된 모델은 재학습 없이 바로 적용 가능한가요?
Post-Training Quantization(PTQ)는 학습 완료 후 가중치를 즉시 변환하므로 재학습이 불필요합니다. 이는 빠른 배포 장점이 있지만 정확도 손실이 0.52% 범위입니다. Quantization-Aware Training(QAT)는 재학습 과정에서 양자화 손실을 최소화해 정확도 손실을 0.3% 이내로 줄이지만, 학습 비용(GPU 시간 4872시간)이 발생합니다. 의료 AI에서는 정확도 손실이 0.5%를 초과하면 QAT 재학습을 수행하는 것이 표준 절차입니다.
GPU 메모리가 부족한 의료원에서도 LLM을 운영할 수 있나요?
양자화와 캐싱 결합으로 가능합니다. 예를 들어 70억 파라미터 LLM의 경우 Float32 원본은 28GB 메모리 필요하지만, Int8 양자화(75% 절감) + KV 캐싱 메모리 최적화(GQA 사용)로 약 810GB로 축소됩니다. 이는 중급 GPU(RTX A5000 24GB) 2개로 충분하며, 배치 크기 4 기준 약 6080건/시간 처리량 달성이 가능합니다. 다만 응답 정확도를 주기적으로 검증해야 하며, 손실이 0.5%를 초과하면 QAT 재학습을 고려해야 합니다.