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 재학습을 고려해야 합니다.

관련 글