AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

LLM 추론 지연 팁 – TTFT와 TPOT를 줄이는 7가지 최적화

LLM 추론 지연은 하나의 숫자가 아니다. 사용자가 첫 토큰을 보기까지 걸리는 TTFT(Time to First Token)와 이후 토큰이 생성되는 속도인 TPOT(Time Per Output Token)를 나눠 봐야 한다. prefill은 긴 프롬프트를 읽는 compute-bound 단계이고, decode는 토큰을 하나씩 쓰는 memory-bandwidth-bound 단계다.

최적화 지도

방법주로 줄이는 것핵심 trade-off
양자화TPOT, 메모리 사용량품질 저하 가능성
KV 캐시TPOTVRAM 사용량 증가
투기적 디코딩TPOTdraft model 운영 복잡도
Continuous batching대기 시간, throughputserving engine 의존
Pruning/DistillationTTFT, 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을 검토한다.

실전 순서

  1. TTFT와 TPOT를 분리 측정한다.
  2. 긴 system prompt와 RAG context부터 줄인다.
  3. serving engine이 continuous batching과 prefix cache를 제대로 쓰는지 확인한다.
  4. 품질 허용 범위 안에서 INT8/INT4 양자화를 시험한다.
  5. 반복 업무는 작은 전용 모델 또는 routing으로 분리한다.
  6. 큰 모델 decode가 병목이면 투기적 디코딩을 검토한다.

관련 문서

  • inference-caching — LLM 추론 비용과 지연 시간을 줄이는 캐시 전략
  • dflash — 투기적 디코딩과 블록 확산 기반 LLM 가속
  • vllm — 고성능 LLM serving engine
  • model-routing — 비용·품질·지연 기준 모델 선택
  • kv-cache-compression — KV 캐시 압축과 메모리 절약 기법

참고 자료



AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)