The cheapest LLM call is the one you don't make: a caching layer that actually pays off
개요
LLM 호출 비용 절감을 위한 캐싱 계층 구현은 라우팅 전략에 이어 가장 효과적인 비용 절감 방안으로, 불필요한 모델 호출 자체를 줄이는 데 집중한다.
주요 내용
* 불필요한 LLM 호출 최소화의 중요성: LLM 비용 절감의 핵심은 단순히 토큰당 비용을 줄이는 것이 아니라, 반복되거나 결정론적인 입력에 대해 모델을 다시 호출하지 않는 것이다.
* 캐싱의 세 가지 주요 계층:
* Exact Cache (정확성 기반 캐싱): 시스템 프롬프트, 메시지, 파라미터를 포함한 전체 요청을 해싱하여 동일한 요청이 들어오면 저장된 응답을 반환한다. 초기 구현으로도 상당한 비용 절감 효과를 볼 수 있다.
* Semantic Cache (의미 기반 캐싱): 사용자 입력의 임베딩을 벡터 인덱스에 저장하고, 유사도 임계값(약 0.92) 이상으로 유사한 입력이 들어오면 이전에 저장된 응답을 재사용한다. 분류, 추출, 안정적인 Q&A 등 결정론적인 작업에 안전하며, 창의적 생성 작업에는 적합하지 않다.
* Deterministic-Step Cache (결정론적 단계 캐싱): 파싱, 정규화, 형식 변환과 같은 결정론적인 작업들을 모델 호출 없이 별도의 순수 함수로 분리하여 재사용한다. 이는 모델 캐시가 아닌, 모델의 필요성을 줄이는 방식이다.
* 캐싱 전략 튜닝:
* TTL (Time To Live) 설정: 데이터의 변동성에 따라 TTL을 조절하며, 안정적인 참조 응답은 긴 TTL, 빠르게 변화하는 데이터는 짧은 TTL 또는 TTL 없음으로 설정한다.
* 토큰 예산 관리: 임베딩 및 벡터 검색에도 토큰이 소모되므로, 캐시 확인 비용이 모델 호출 비용보다 저렴하도록 보장해야 한다.
* 히트율 측정: 단순 비용 절감 외에 히트율을 측정하여 프롬프트 드리프트나 새로운 사용 사례 발생 시 캐싱 전략을 재조정해야 한다.
* 효과: 캐싱 계층 구현 후 캐시 히트율은 약 35%이며, 라우팅과 결합 시 추가적인 유의미한 비용 절감 효과를 얻었다. 또한, 캐시 히트 시 p95 지연 시간은 50ms 미만으로 크게 단축되어 사용자 경험을 개선한다.
시사점
LLM 비용 최적화는 단순히 모델 제공 업체를 선택하는 것을 넘어, 호출 자체를 줄이는 캐싱 전략을 포함하는 다층적인 접근이 필요하며, 이는 데이터베이스 캐싱과 유사한 원리로 LLM 호출 비용 절감과 성능 향상에 기여한다.
댓글
GitHub Discussions