LLM 추론 지연은 하나의 숫자가 아니다. 사용자가 첫 토큰을 보기까지 걸리는 TTFT(Time to First Token)와 이후 토큰이 생성되는 속도인 TPOT(Time Per Output Token)를 나눠 봐야 한다. prefill은 긴 프롬프트를 읽는 compute-bound 단계이고, decode는 토큰을 하나씩 쓰는 memory-bandwidth-bound 단계다.
최적화 지도
| 방법 | 주로 줄이는 것 | 핵심 trade-off |
|---|---|---|
| 양자화 | TPOT, 메모리 사용량 | 품질 저하 가능성 |
| KV 캐시 | TPOT | VRAM 사용량 증가 |
| 투기적 디코딩 | TPOT | draft model 운영 복잡도 |
| Continuous batching | 대기 시간, throughput | serving engine 의존 |
| Pruning/Distillation | TTFT, TPOT | 재학습·평가 비용 |
| 전용 추론 엔진 | TTFT, TPOT, throughput | 인프라 전환 비용 |
| 프롬프트/컨텍스트 관리 | TTFT | 검색 품질·캐시 설계 필요 |
1. 양자화
FP16/BF16 가중치를 INT8 또는 INT4로 줄이면 모델 메모리 footprint와 memory bandwidth 부담이 내려간다. decode 단계는 매 토큰마다 큰 가중치를 읽기 때문에 양자화 효과가 크다. AWQ, GPTQ 같은 방식은 품질 손실을 줄이려는 대표 기법이다.
다만 모든 워크로드에서 4bit가 정답은 아니다. reasoning 품질, tool call 안정성, 긴 컨텍스트 회귀를 별도 eval로 확인해야 한다.
2. KV 캐시
Transformer는 이전 토큰의 key/value를 매번 다시 계산하지 않고 캐시에 저장한다. KV 캐시는 대부분의 실전 추론 엔진에서 기본 전제에 가깝지만, 긴 출력과 긴 컨텍스트에서는 VRAM을 크게 잡아먹는다. inference-caching에서 다루는 prefix caching, semantic caching과 함께 층을 나눠 설계해야 한다.
3. 투기적 디코딩
작은 draft model이 여러 후보 토큰을 빠르게 쓰고, 큰 target model이 한 번에 검증한다. draft가 맞으면 여러 토큰을 한 번에 받아들일 수 있어 순차 decode 병목을 줄인다. dflash처럼 투기적 디코딩을 확장한 연구도 같은 문제를 겨냥한다.
4. Continuous batching
LLM 요청은 출력 길이가 제각각이다. 정적 batch에서는 짧은 요청이 긴 요청을 기다린다. Continuous batching은 token step 단위로 완료된 요청을 빼고 새 요청을 넣어 GPU 활용률과 응답 지연을 함께 개선한다. vLLM, TGI, TensorRT-LLM 같은 serving engine이 이 계층을 제공한다.
5. Pruning과 Distillation
모든 작업에 대형 모델이 필요하지는 않다. 감성 분류, extraction, routing처럼 범위가 좁은 작업은 작은 student model로 증류하면 latency와 비용을 크게 줄일 수 있다. 다만 일반 추론 모델을 작게 깎는 pruning보다, 명확한 업무와 golden set을 둔 distillation이 실무적으로 검증하기 쉽다.
6. 전용 추론 엔진
연구용 generate() 호출은 프로덕션 serving 최적화를 충분히 제공하지 않는다. vLLM은 PagedAttention과 continuous batching으로 KV cache를 효율적으로 관리하고, TGI와 TensorRT-LLM도 고성능 serving을 위한 CUDA kernel, scheduler, batching 기능을 제공한다.
7. 프롬프트와 컨텍스트 관리
TTFT를 줄이는 가장 직접적인 방법은 모델에 덜 읽히는 것이다. RAG에서는 관련 없는 문서를 대량으로 붙이지 말고 reranking, chunk filtering, prompt compression을 적용한다. 큰 시스템 프롬프트가 반복된다면 provider의 prompt caching 또는 자체 prefix caching을 검토한다.
실전 순서
- TTFT와 TPOT를 분리 측정한다.
- 긴 system prompt와 RAG context부터 줄인다.
- serving engine이 continuous batching과 prefix cache를 제대로 쓰는지 확인한다.
- 품질 허용 범위 안에서 INT8/INT4 양자화를 시험한다.
- 반복 업무는 작은 전용 모델 또는 routing으로 분리한다.
- 큰 모델 decode가 병목이면 투기적 디코딩을 검토한다.
관련 문서
- inference-caching — LLM 추론 비용과 지연 시간을 줄이는 캐시 전략
- dflash — 투기적 디코딩과 블록 확산 기반 LLM 가속
- vllm — 고성능 LLM serving engine
- model-routing — 비용·품질·지연 기준 모델 선택
- kv-cache-compression — KV 캐시 압축과 메모리 절약 기법
참고 자료
- 7 Approaches to Reduce Inference Latency in Your LLM Workflows — KDnuggets (2026-08-04)