LLM이 답을 만들 때 쓰는 '기억 캐시(KV cache)'를 GPU 밖에 두고도, 다음에 필요한 부분만 미리 예측해서 당겨오는 방식으로 처리량을 2배 가까이 늘렸다
LLM이 답을 만들 때 쓰는 '기억 캐시(KV cache)'를 GPU 밖에 두고도, 다음에 필요한 부분만 미리 예측해서 당겨오는 방식으로 처리량을 2배 가까이 늘렸다
대형 언어모델이 문장을 이어 생성할 때마다 이전 토큰들의 정보(KV 캐시)를 GPU의 고속 메모리(HBM)에 계속 들고 있어야 해서, 문맥이 길어지면 GPU 메모리가 금방 꽉 찬다. OasisKV는 스펙큘레이티브 디코딩(미리 몇 토큰을 추측해보는 기법)에서 나오는 '미리보기 토큰'을 이용해 다음 단계에 진짜 필요한 KV 블록을 미리 정확하게 예측하고, 이를 CPU 메모리나 원격 메모리에서 GPU로 백그라운드로 미리 가져와 둔다. vLLM 위에 구현해 검증한 결과, 정확도 손실을 0.7점 이내로 유지하면서 처리량을 최대 2배 가까이 끌어올렸다.
METAL MEDIA 해설 도표
OasisKV의 미리보기 기반 KV 프리페치 구조
증거 상태측정 결과가 보고됨
- 문제 상황긴 문맥을 다루는 디코딩에서 KV 캐시가 GPU 고속메모리(HBM) 용량을 다 차지해 배치 크기와 처리량이 제한된다
- 미리보기 예측스펙큘레이티브 디코딩의 draft 토큰을 이용해 다음 단계에 필요한 KV 블록을 별도 학습 없이 예측한다(top-K 예측)
- 선택과 전송 제한예측된 블록과 현재 GPU에 있는 블록을 비교해 필요한 블록만 골라 단계당 전송량을 제한(capped eviction)해 PCIe 대역폭 안에서 처리한다
- 백그라운드 비동기 파이프라인예측-선택-전송 단계를 레이어별로 CUDA 스트림에서 겹쳐 실행해 GPU 연산과 동시에 CPU/원격 메모리에서 KV를 가져온다
- 결과vLLM 기반 구현에서 정확도 손실 0.7점 이내로 처리량을 최대 2.1배까지, PD 분리 서빙에서는 약 2배까지 향상시켰다
무엇을 했나
- 문제 제기: 긴 문맥·긴 추론을 다루는 에이전트형 작업이 늘면서 KV 캐시가 GPU 고속메모리(HBM) 용량을 가장 많이 잡아먹어 배치 크기와 처리량을 제한하는 병목이 되었다.
- 방법: 스펙큘레이티브 디코딩에서 이미 만들어지는 '미리보기(draft) 토큰'을 그대로 활용해, 다음 디코딩 단계에서 실제로 중요할 KV 블록을 별도의 예측 모델 학습 없이 미리 알아낸다. 이를 백그라운드 파이프라인(예측→선택→전송)으로 CPU/원격 메모리에서 GPU로 겹쳐서 가져온다.
- 구현: vLLM 기반으로 프로토타입을 만들어 페이지 단위 KV 관리, 헤드별 매핑, 단계별 전송량 제한(capped eviction) 등을 추가해 실제 서빙 엔진에서 동작하게 했다.
- 결과: 2,048토큰 KV 예산에서 전체 어텐션(모든 KV를 다 보는 방식) 대비 정확도 차이를 0.7점 이내로 유지하면서, 추론 작업에서 vLLM 대비 1.69배, 멀티 GPU 장문맥 서빙에서 최대 2.1배 처리량 향상을 얻었다.
- 확장: prefill과 decode를 분리한 서빙 구조에서도 전체 KV를 다 옮기는 방식보다 6.5~9.7배 적은 KV만 전송하면서 처리량은 약 2배, 디코드 노드의 호스트 메모리 사용은 2.2~2.6배 적게 유지했다.

| HuggingFace Transformers stack | vLLM stack | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Dataset / Subset | Metric | Full | Quest | Δ | FreeKV | Δ | Full | Ours | Δ |
| Long input — Llama-3.1-8B-Instruct, LongBench v2 | |||||||||
| Overall | 29.62 | 29.42 | −0.20 | 29.03 | −0.59 | 30.23 | 29.62 | −0.61 | |
| Short | 34.44 | 34.44 | 0.00 | 35.00 | +0.56 | 35.56 | 33.89 | −1.67 | |
| Medium | 28.37 | 28.84 | +0.47 | 26.51 | −1.86 | 27.44 | 27.44 | 0.00 | |
| Long | 24.07 | 22.22 | −1.85 | 24.07 | 0.00 | 26.85 | 26.85 | 0.00 | |
| Long input — Qwen3-8B, LongBench v2 | |||||||||
| Overall | 32.21 | 31.61 | −0.60 | 31.01 | −1.20 | 33.60 | 33.20 | −0.40 | |
| Short | 36.67 | 37.22 | +0.55 | 36.67 | 0.00 | 39.44 | 38.33 | −1.11 | |
| Medium | 29.30 | 26.98 | −2.32 | 27.44 | −1.86 | 29.30 | 30.70 | +1.40 | |
| Long | 30.56 | 31.48 | +0.92 | 28.70 | −1.86 | 32.41 | 29.63 | −2.78 | |
| Long output — Qwen3-8B, reasoning | |||||||||
| Overall | pass@k | 81.41 | 78.86 | −2.56 | 77.91 | −3.50 | 78.84 | 78.18 | −0.66 |
| avg@k | 69.48 | 66.65 | −2.83 | 66.85 | −2.63 | 67.63 | 67.28 | −0.35 | |
| AIME24 | pass@8 | 86.67 | 86.67 | 0.00 | 80.00 | −6.67 | 83.33 | 83.33 | 0.00 |
| avg@8 | 77.50 | 75.42 | −2.08 | 72.08 | −5.42 | 79.17 | 76.67 | −2.50 | |
| AIME25 | pass@8 | 83.33 | 76.67 | −6.66 | 80.00 | −3.33 | 80.00 | 80.00 | 0.00 |
| avg@8 | 70.83 | 64.17 | −6.66 | 68.75 | −2.08 | 65.42 | 67.97 | +2.55 | |
| GPQA-Diamond | pass@4 | 74.24 | 73.23 | −1.01 | 73.74 | −0.50 | 73.20 | 71.21 | −1.99 |
| avg@4 | 60.10 | 60.36 | +0.26 | 59.72 | −0.38 | 58.30 | 57.20 | −1.10 |
| Fetch Ratio | Fetch | BW | TPS | AIME24 | |
|---|---|---|---|---|---|
| (GB/step) | (GB/s) | (tok/s) | avg@32 | pass@32 | |
| 0.01 | 0.30 | 5.0 | 2,178 | 74.90 | 90.00 |
| 0.02 | 0.60 | 9.8 | 2,066 | 75.10 | 90.00 |
| 0.05 | 1.49 | 23.8 | 2,083 | 75.94 | 86.67 |
| 0.10 | 2.87 | 31.4 | 1,421 | 76.77 | 86.67 |
| 0.20 | 4.34 | 34.0 | 1,035 | 77.40 | 93.33 |
| Fetch all | 5.05 | 33.5 | 824 | 76.46 | 86.67 |

실제로 확인된 결과
- 2,048토큰 KV 예산 조건에서 전체 어텐션과 비교해 정확도 차이가 0.7점 이내로 유지됐다.
- 추론 워크로드에서 vLLM 대비 1.69배 처리량 향상을 얻었으며 이때 정확도 손실은 0.1점이었다.
- 멀티 GPU 장문맥 서빙에서 최대 2.1배 처리량 향상을 얻었다.
- prefill-decode 분리 서빙에서 전체 KV 전송 대비 6.5~9.7배 적은 KV로 요청을 처리하면서 약 2배의 처리량을 냈고, 디코드 노드 호스트 메모리 사용은 2.2~2.6배 적었다.
- Qwen3-8B 기준 KV 단계당 전송량 제한(fetch cap)을 0.05로 설정했을 때 정확도는 dense 방식과 0.1점 차이(75.94 대비 76.04)를 보이면서 전체 전송 대비 2.5배 높은 처리량(2,083 tok/s)을 기록했다.
어디에 쓸 수 있나
- 긴 문맥이나 긴 추론 과정을 다루는 챗봇·코딩 에이전트·웹 사용 에이전트 서비스에서 GPU 메모리 제약을 완화하고 동시 처리 요청 수를 늘리는 인프라 최적화
- 여러 GPU에 걸쳐 서비스되는 장문맥 LLM 서빙 시스템의 처리량 개선
- prefill과 decode 단계를 분리해 운영하는 대규모 서빙 클러스터에서 네트워크 전송량과 디코드 노드 메모리 사용을 줄이는 설계

한계와 남은 검증
- 평가는 Qwen3-8B, Qwen3-32B, Qwen3-235B 등 특정 모델과 AIME24/25, GPQA-Diamond, LongBench v2, GSM8K 같은 특정 벤치마크에 한정되어 다른 모델·작업으로의 일반화는 추가 검증이 필요하다.
- 프로토타입은 아직 프리픽스 캐싱(prefix caching)을 지원하지 않으며, 이를 반영한 TTFT 개선 효과는 실측이 아닌 분석적 모델링 결과로만 제시됐다.
- 성능은 특정 하드웨어(H100 GPU, PCIe 대역폭 등) 조건에서 측정된 것으로, 다른 인터커넥트·메모리 계층 구성에서는 결과가 달라질 수 있다.
- 예측이 항상 정확하지는 않아 놓친 블록에 대한 보정 전송(decode-time miss)이 발생하며, 이는 네트워크 트래픽 절감 효과를 일부 상쇄한다.
왜 중요한가
GPU의 고속 메모리는 비싸고 한정돼 있어 긴 문맥을 다루는 서비스일수록 배치 크기와 처리량이 급격히 줄어드는데, 이 방법은 정확도를 거의 유지한 채 같은 하드웨어로 더 많은 요청을 동시에 처리할 길을 보여준다. 특히 여러 GPU에 걸친 서빙이나 prefill-decode를 분리한 대규모 서빙 환경에서 메모리 비용을 크게 줄일 수 있다는 점에서 실제 서비스 운영에 직결된다.
이 논문의 용어
- KV 캐시 · 언어모델이 이전에 처리한 토큰들의 정보를 저장해두는 캐시로, 다음 토큰을 생성할 때마다 다시 참조된다
- HBM · GPU에 탑재된 고속이지만 용량이 제한적인 메모리
- 스펙큘레이티브 디코딩 · 느린 정식 모델 대신 작은 모델로 몇 토큰을 미리 추측해 생성 속도를 높이는 기법
- prefill-decode 분리 서빙 · 프롬프트를 처리하는 단계와 토큰을 하나씩 생성하는 단계를 서로 다른 서버(노드)에서 처리하는 서빙 방식
- capped eviction · 한 단계에서 새로 불러올 KV 블록 수를 제한해 전송량이 너무 커지지 않도록 하는 정책
최신 논문
- AI 코딩 에이전트에게 과학 소프트웨어 수리를 시켜보니, 절반도 제대로 못 고쳤다AI 코딩 에이전트에게 과학 소프트웨어 수리를 시켜보니, 절반도 제대로 못 고쳤다
- 논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기논문 속 시연이 아니라 실제 서비스에 넣을 수 있는 희소 어텐션 만들기
- 고객상담 AI 상담원이 규정을 '한 번의 행동'이 아니라 '전체 절차'로 지키게 만드는 방법고객상담 AI 상담원이 규정을 '한 번의 행동'이 아니라 '전체 절차'로 지키게 만드는 방법
- 로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다로봇 팔에게 사람의 시연 없이 새 일 시키기, 말 잘하는 AI가 대신 가르친다
- 에이전트 학습용 환경을 새로 만드는 대신, 기존 환경에 '패치 부품'을 씌워 그 에이전트의 약점에 맞게 바꾸는 방법에이전트 학습용 환경을 새로 만드는 대신, 기존 환경에 '패치 부품'을 씌워 그 에이전트의 약점에 맞게 바꾸는 방법
- AI 모델을 '소유'하지 못한 조직은 안전 통제도 절반밖에 못 한다AI 모델을 '소유'하지 못한 조직은 안전 통제도 절반밖에 못 한다
- AI가 선생님 모델을 따라 배우다가, 정답에 다가가는 '좋은 생각'까지 억누르는 문제를 잡아낸다AI가 선생님 모델을 따라 배우다가, 정답에 다가가는 '좋은 생각'까지 억누르는 문제를 잡아낸다
- AI가 특정 사람 말투를 흉내내도록 시켜봤더니, 결국 AI 자신의 말투에서 못 벗어난다AI가 특정 사람 말투를 흉내내도록 시켜봤더니, 결국 AI 자신의 말투에서 못 벗어난다
METAL MEDIA 최신 기사
그림 출처: Can Xiao et al., arXiv:2608.08097, arxiv-nonexclusive