#AI

LLM 서빙, 띄우는 것과 잘 띄우는 것 사이

LLM 서빙, 띄우는 것과 잘 띄우는 것 사이
01

Summary

"단순히 띄우는 건 누구나 합니다" 토스증권이 LLM을 '진짜 잘' 서빙하는 법

vLLM 버그부터 캐시 미스까지, 추가 GPU 없이 트래픽 4배를 견뎌낸 실전 LLM 관찰성(Observability) 구축기

오픈소스 LLM 배포 이후 겪게 되는 원인 불명의 성능 저하와 타임아웃을 해결하기 위해 토스증권 ML 플랫폼 팀이 개척한 모니터링 여정을 다룹니다. 기존 서버 지표의 한계를 넘어 TTFT, Prefix Cache Hit Rate, KV Cache 메모리 효율 등 LLM 맞춤형 지표들을 발굴하고 활용한 실전 문제 해결법을 제시합니다. 급변하는 프레임워크 환경 속에서 인프라 효율성을 극대화하기 위한 구체적인 방법론과 아키텍처 철학을 배울 수 있습니다.

  • 01기존 초당 처리 건수(TPS) 중심의 모니터링에서 초당 생성 토큰 수 및 TTFT 위주의 LLM 맞춤형 핵심 지표로 체계적인 전환을 완료했습니다.
  • 02Prefix Cache Hit Rate 지표 추적을 통해 특정 모델에서 꺼져 있던 캐싱 옵션을 발견하고 활성화하여 TTFT 성능을 10배 이상 향상시켰습니다.
  • 03리즈닝 모델의 스페셜 토큰과 관련한 vLLM 내부 버그를 로그 및 토큰 분석으로 명확히 식별하여 에러율을 0.2%에서 0.02%로 대폭 개선했습니다.
  • 04KV Cache 메모리 점유율을 모니터링하여 장비 증설 없이 동시성 설정을 최적화함으로써 서빙 처리량을 4배 확장하는 비용 절감 효과를 이뤄냈습니다.
  • 05완벽한 사전 장애 예측 대신 지표 관찰, 가설 검증, 빠른 롤백으로 구성된 동적 트러블슈팅 프로세스를 정립했습니다.

RECOMMENDATION

Kubernetes 환경에서 vLLM이나 SGLang 기반으로 LLM 인프라를 직접 서빙하며 성능 튜닝에 골머리를 앓고 있는 플랫폼 엔지니어 및 AI 개발자에게 모니터링 지표 설계 가이드라인으로 강력히 추천합니다.

The Problem

토스증권은 다수의 오픈 소스 및 자체 튜닝 LLM을 서비스에 도입하면서, 기존 머신러닝 모니터링 방식으로는 예측하기 힘든 의문의 타임아웃과 성능 저하 원인을 규명하기 어려웠습니다. vLLM 등 서빙 프레임워크의 불안정성과 인프라의 복잡성으로 인해 장애 원인을 즉시 파악할 수 있는 신뢰도 높은 지표가 부족한 상황이었습니다.

The Solution

vLLM 및 SGLang 프레임워크가 제공하는 Prefix Cache Hit Rate, KV Cache 사용량, TTFT 등의 LLM 특화 지표들을 수집하여 Grafana 기반의 모니터링 대시보드에 통합 구축했습니다. 이를 바탕으로 캐시 설정 수정, 프레임워크 스페셜 토큰 버그의 워크어라운드 적용, 동시성 조율을 순차적으로 진행했습니다.

The Result

비활성화되어 있던 Prefix Cache를 활성화하여 TTFT를 최대 1/10 수준으로 줄이고 히트율 90% 이상을 달성했으며, 버그 패치를 통해 생성 에러율을 0.2%에서 0.02%로 감소시켰습니다. 또한 KV Cache 여유 용량을 분석하여 추가 GPU 증설 없이 트래픽 수용량을 최대 4배까지 확장하는 성과를 거두었습니다.

Trade-off

서빙 프레임워크의 빠른 릴리스 주기와 잦은 버그로 인해 특정 옵션 조합에서 응답 누락이나 CPU 스로틀링 등의 사이드 이펙트가 발생할 수 있어, 사전 예방보다는 기민한 지표 탐색과 빠른 롤백 체계에 지속해서 의존해야 합니다.

03

Key Concepts

Concept · 01

Prefix Caching

LLM 요청에서 시스템 프롬프트처럼 공통적으로 사용되는 앞부분의 고정 문자열에 대해 Key-Value 연산 결과를 캐싱하여 불필요한 재연산을 방지하는 최적화 기법입니다.

  • 특정 모델 서빙 시 기본 활성화 설정이 누락되어 성능이 저하되던 상태를 감지하는 지표로 활용되었습니다.
  • 해당 옵션 활성화를 통해 Prefix Cache Hit Rate를 90% 이상으로 끌어올리고 대기 레이턴시를 획기적으로 줄였습니다.
Concept · 02

TTFT (Time to First Token)

사용자의 프롬프트 요청 후 LLM이 첫 번째 출력 토큰을 생성하여 클라이언트에 전달하기까지 걸리는 시간으로, 생성형 서비스의 실질적인 사용자 경험(UX)을 결정하는 핵심 지표입니다.

  • 단순 최종 응답 완료 시간 대신 첫 토큰 반환 시간을 추적하여 모델의 초기 응답 지연을 객관적으로 정량화했습니다.
Concept · 03

KV Cache (Key-Value Cache)

LLM의 이전 추론 단계에서 계산된 Attention Key-Value 행렬 데이터를 메모리에 저장해 두어, 매 새로운 토큰을 생성할 때마다 가중치를 다시 계산하지 않도록 돕는 기술입니다.

  • GPU 자원의 한계 상황에서 메모리 내 KV Cache의 실질 사용율을 체크하여 서버의 가용 여유 용량을 판단하는 근거로 썼습니다.
  • 여유 메모리를 기반으로 동시 처리 한도를 확장해 하드웨어 추가 비용 없이 서빙 효율을 극대화했습니다.