LLM 비용을 65% 절감하는 프롬프트 압축기(Prompt Compressor)를 만든 방법
요약
LLM 호출 시 불필요한 토큰을 제거하여 비용과 지연 시간을 줄이는 'SuperCompress' 기술을 소개합니다. 약 5K 파라미터 규모의 경량 CPU 정책을 통해 토큰을 65% 절감하면서도 답변 품질을 완벽하게 보존합니다.
핵심 포인트
- CPU 기반의 경량 신경망을 사용하여 GPU 부하를 줄임
- 토큰 사용량을 65% 절감하면서 100% 오라클 재현율 달성
- 약 60ms의 낮은 지연 시간으로 실시간 서비스 적용 가능
- RAG 및 에이전트 루프의 효율성을 극대화하는 오픈 소스 솔루션
LLM 비용을 65% 절감하는 프롬프트 압축기(Prompt Compressor)를 만든 방법
LLM을 호출할 때마다, 처리될 필요가 없는 토큰(tokens)들이 GPU 사이클을 소모하고, 비용을 낭비하며, 전력망에 부담을 줍니다. 이 문제는 에이전트 루프(agent loop), 긴 컨텍스트의 RAG 쿼리, 다회차 대화(multi-turn conversation)가 반복될수록 더욱 악화됩니다.
저는 SuperCompress를 구축했습니다. 이는 추론(inference) 전에 컨텍스트의 모든 줄에 대해 관련성을 점수화하여 모델에 필요한 것만 남겨두는 약 ~5K 파라미터(parameters) 규모의 작은 CPU 정책(policy)입니다.
결과는 어떠했을까요? 토큰 65% 감소, 100% 오라클 재현율(oracle recall), 약 60ms의 지연 시간(latency)을 달성했습니다. 오픈 소스이며 MIT 라이선스를 따릅니다.
문제점: LLM은 낭비적이다
현대의 LLM은 사용자가 제공하는 모든 토큰을 처리합니다. 긴 컨텍스트(에이전트 로그, RAG 결과, 코드베이스 등)의 경우, 해당 토큰의 대부분은 패딩(padding)입니다. 즉, 정답에 기여하지 않으면서 KV 캐시(KV cache) 공간만 차지하는 무관한 상용구(boilerplate)입니다.
기존의 접근 방식들은 효과적이지 않습니다:
| 접근 방식 | 절감된 토큰 | 답변 품질 |
|---|---|---|
| 절단 (Truncation, 앞/뒤 유지) | ~65% | ~25% 재현율 |
| ... | ||
| 동일한 KV 절감 수준에서, SuperCompress는 답변 품질을 훨씬 더 극적으로 보존합니다. |
아키텍처: CPU 우선 제거 (CPU-First Eviction)
핵심 통찰: GPU가 무엇을 처리해야 할지 결정하는 데 GPU가 필요하지는 않다는 것입니다.
┌─────────────┐ ┌──────────────┐ ┌──────────┐
│ Context In │ ──→ │ CPU Policy │ ──→ │ GPU LLM │
│ (1,247 tok) │ │ (5K params) │ │ (437 tok) │
...
이 정책은 완전히 CPU에서 실행되는 경량 신경망(neural network, 약 5,000개 파라미터)입니다. 이 모델은 각 컨텍스트 줄과 사용자의 질문을 입력받아, 해당 줄이 질문에 답하는 데 얼마나 관련이 있는지 점수를 매깁니다. 임계값(threshold) 미만의 줄은 제거(evicted)됩니다.
학습 접근 방식
이 정책은 다음과 같은 데이터셋으로 학습되었습니다:
- 긴 형태의 텍스트 구절 (도서, 문서, 코드)
- 현실적인 사용자 질문과 쌍을 이룸
- 오라클 LLM 판단을 통한 정답(ground-truth) 관련성 라벨
학습 목표는 다음의 균형을 맞춥니다:
- 토큰 절감 (Token savings) — KV 캐시 감소를 극대화
- 재현율 (Recall) — 정답 도출에 필요한 라인을 보존
- 지연 시간 (Latency) — CPU에서 추론 시간을 100ms 미만으로 유지
벤치마크 (Benchmarks)
35% 고정 예산(토큰의 35% 유지) 기준:
정책 (Policy) | 오라클 재현율 (Oracle Recall) | 엔티티 재현율 (Entity Recall) | 지연 시간 (Latency)
────────────────┼───────────────┼───────────────┼────────
FIFO/Truncation | 25% | 73% | ~57ms
...
100% 오라클 재현율(100% oracle recall)은 정책이 정답의 근거가 되는 라인을 단 하나도 누락하지 않았음을 의미합니다. 동일한 연산량 절감 효과를 유지하면서 말입니다.
환경적 영향 (Environmental Impact)
압축 100만 회당:
- 8억 개의 토큰 방지 (800M tokens avoided) — 이는 실제 GPU 사용 시간의 절감을 의미합니다.
- 29 kWh 절약 (29 kWh saved) — 가정이 하루 동안 사용할 수 있는 전력량입니다.
- 12 kg CO₂ 방지 (12 kg CO₂ avoided) — 미미해 보이지만 합쳐지면 큰 수치입니다.
- 52 L 물 절약 (52 L water saved) — 데이터 센터 냉각에는 많은 물이 필요합니다.
시작하기 (Getting Started)
Python (인프로세스/in-process)
pip install git+https://github.com/arjunkshah/supercompress.git
from supercompress import compress_context
...
호스팅 API (로컬 ML 의존성 없음/no local ML deps)
curl -X POST https://supercompress.vercel.app/api/v1/compress \
-H "X-API-Key: sc_live_YOUR_KEY" \
-d '{"context":"...","query":"Summarize this"}'
브라우저 데모 (설정 불필요/no setup needed)
supercompress.vercel.app에 방문하여 라이브 데모를 체험해 보세요.
향후 계획 (What's Next)
- 적응형 압축 비율 (Adaptive compression ratios, 고정 예산 방식이 아님)
- LangChain/LlamaIndex의 내장 압축기로 통합
- 더 낮은 지연 시간을 위한 양자화된 정책 (Quantized policy)
코드는 MIT 라이선스 하에 오픈 소스로 공개되어 있습니다. 기여를 환영합니다!
GitHub: https://github.com/arjunkshah/supercompress
라이브 데모: https://supercompress.vercel.app
문서 (Docs): https://arjunkshah-supercompress-55.mintlify.app
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기