[LLM 추론 최적화] Day 5: 프로덕션 추론 운영 - 비용·지연·처리량의 균형
서론: 최적화는 배포 이후에도 계속된다
추론 서버를 띄우고 모델을 올렸다고 해서 끝이 아니다. 트래픽 패턴이 바뀌고, 모델이 교체되고, 비용이 예상을 초과한다. 운영 단계의 최적화는 구축 단계만큼 중요하다.
1. 핵심 지표 대시보드
운영에서 봐야 할 지표를 계층별로 나눈다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
비즈니스 지표
- GPU 비용 / 1000 요청
- 요청당 생성 토큰 수 (평균, p95)
서버 지표
- GPU 활용률 (SM utilization)
- KV 캐시 사용률
- 큐 대기 길이, 큐 대기 시간
- 배치 크기 분포
품질 지표
- TTFT p50/p95/p99
- 전체 지연 p50/p95/p99
- 오류율 (타임아웃, OOM)
KV 캐시 사용률이 90%를 초과하면 신규 요청 수락이 거부되기 시작한다. 이 지표가 스케일 아웃 트리거다.
2. SLO 설계
SLO(Service Level Objective)는 측정 가능한 숫자여야 한다.
1
2
3
4
5
6
7
8
9
10
예시 SLO:
TTFT p95 < 800ms
전체 지연 p95 < 8s (512 토큰 생성 기준)
오류율 < 0.5%
가용성 > 99.5%
SLO 설정 원칙:
- 사용자 경험 기반으로 거꾸로 설계
- p95/p99를 평균보다 우선
- 모델별, 엔드포인트별로 SLO를 분리
3. 오토스케일링
LLM 추론은 일반 웹 서버와 스케일링 패턴이 다르다. GPU 인스턴스 스핀업에 2-5분이 걸리기 때문에 선제적 스케일 아웃이 필요하다.
1
2
3
4
5
6
7
8
9
10
11
12
스케일 아웃 트리거 (중 하나 초과 시):
- KV 캐시 사용률 > 80%
- 큐 대기 길이 > 50
- TTFT p95 > SLO의 80%
스케일 인 (모두 충족 시):
- KV 캐시 사용률 < 30%
- 큐 비어 있음
- 10분 이상 지속
쿨다운:
스케일 아웃 후 최소 5분 대기 (불필요한 oscillation 방지)
Kubernetes HPA 대신 KEDA(Kubernetes Event Driven Autoscaler)로 GPU 메트릭 기반 스케일링을 구현하는 팀이 많다.
4. 투기적 디코딩 (Speculative Decoding)
작은 Draft 모델이 여러 토큰을 먼저 예측하고, 큰 Target 모델이 한 번에 검증하는 방식이다.
1
2
3
4
5
6
7
일반 Decode:
Target 모델이 토큰을 1개씩 생성 (N번 실행)
Speculative Decoding:
Draft 모델 (소형): 토큰 k개 예측 (빠름)
Target 모델: k개 토큰을 한 번에 검증
→ 예측이 맞으면 k개 토큰을 1번 실행으로 획득
예측 적중률(acceptance rate)이 높을수록 효과적이다. 코딩, 수학처럼 예측 가능한 패턴이 많은 태스크에서 2-3배 속도 향상이 가능하다.
5. 비용 최적화 전략
5.1 요청 우선순위 큐
비용에 따라 요청을 다르게 처리한다.
1
2
3
프리미엄 큐: 즉시 처리, SLO 엄격
기본 큐: 지연 허용, 비용 절감
배치 큐: 수분~수십분 지연, 최저 비용 (야간 GPU 활용)
5.2 최대 토큰 제어
긴 출력은 비용과 지연 모두를 높인다.
1
2
3
4
서버 측 최대 토큰 정책:
- 기본 max_tokens = 512
- 스트리밍에서 클라이언트가 중단 가능
- 비용 이상 탐지: 요청당 평균 토큰의 10배 초과 시 알람
5.3 캐싱 계층
LLM 응답 자체를 캐싱하면 동일 질의는 GPU를 쓰지 않는다.
1
2
3
4
5
6
의미 기반 캐싱 (Semantic Cache):
질의 → 임베딩 → 유사 질의 검색 → 캐시 히트 시 반환
유사도 임계값: cosine similarity > 0.95
적합: FAQ, 반복 질의가 많은 서비스
부적합: 개인화 응답, 실시간성이 중요한 서비스
6. 시리즈 종합 체크리스트
- TTFT, TPS, 전체 지연 p95를 실시간으로 모니터링하고 있다.
- GPU 활용률과 KV 캐시 사용률을 스케일 아웃 트리거로 설정했다.
- 양자화(INT8/INT4/FP8)로 GPU당 처리 가능한 요청 수를 늘렸다.
- Continuous Batching + PagedAttention으로 GPU 낭비를 줄였다.
- 요청 우선순위와 최대 토큰 정책으로 비용을 제어하고 있다.
시리즈 마무리
LLM 추론 최적화는 모델 측(양자화)과 서빙 측(배칭, KV 캐시, 병렬화)을 동시에 공략해야 효과가 크다. 어느 한 쪽만 최적화하면 나머지가 병목이 된다.
비용·지연·처리량은 서로 트레이드오프다. 중요한 것은 서비스 특성에 맞는 SLO를 먼저 정의하고, 그 SLO를 달성하는 가장 저렴한 구성을 찾는 순서로 접근하는 것이다.