AI VIDEO BRIEFING
KV 캐시·PagedAttention로 LLM 추론 속도와 GPU 처리량 높이기
사용자가 늘수록 LLM 응답이 느려지는 원인은 모델이 아니라 메모리 사용 방식이다. KV 캐시와 PagedAttention이 어떻게 GPU 처리량을 끌어올리는지, vLLM 설정 팁까지 정리했다.

핵심 메시지
쉽게 이해하기
하나의 사용자만 붙어 있을 때는 첫 토큰까지의 시간이 매우 빠르다. 그러나 사용자가 10명, 100명으로 늘면 지연이 치솟고 GPU 메모리가 급증하며 처리량이 무너진다. 영상은 이 현상의 원인이 모델 자체가 아니라, 모델이 토큰을 하나씩 쌓아 올리며 문맥을 저장하고 다시 불러오는 메모리 사용 방식에 있다고 짚는다.
LLM 추론은 두 단계로 이뤄진다. 첫째는 프리필 단계로, 입력 프롬프트를 모든 트랜스포머 층에 통과시켜 수학적 표현을 만드는 연산 중심 구간이며 첫 토큰이 나오기 전의 지연이 여기서 발생한다. 둘째는 디코드 단계로, 토큰을 하나씩 생성할 때마다 GPU 메모리에서 이전 문맥을 반복해 꺼내 오는 메모리 중심 구간이다. 메모리가 단편화되거나 가득 차거나 재계산되면 곧바로 눈에 보이는 지연으로 이어진다.
트랜스포머는 토큰마다 쿼리·키·값을 계산하는데, 자기회귀 생성에서는 새 토큰을 만들 때마다 앞선 모든 토큰에 대해 어텐션을 다시 돌려야 한다. 캐시가 없으면 1,000번째 토큰을 만들 때 앞선 999개의 키·값을 매번 재계산해야 한다. KV 캐시는 이 키·값 행렬을 저장해 두어 새 토큰이 자기 몫만 계산하고 나머지는 캐시에서 참조하게 만든다.
문제는 메모리다. 영상은 130억 파라미터급 모델이 A100 40GB 카드에서 가중치만으로 약 26GB(전체의 65%)를 쓴다고 설명한다. 남은 35%로 모든 활성 요청의 KV 캐시를 감당해야 하는데, 전통적 방식은 요청마다 최대 출력 길이를 기준으로 고정된 연속 메모리 블록을 미리 잡아 둔다. 평균 사용자가 짧은 입출력만 쓰면 잡아 둔 메모리 대부분이 비어 낭비되고, 연구에 따르면 이 KV 캐시 메모리의 60~80%가 버려진다.
PagedAttention은 운영체제가 RAM을 다루듯 GPU 메모리를 다룬다. 하나의 큰 연속 블록 대신 KV 캐시를 기본 16토큰짜리 작은 페이지로 쪼개고, 이 페이지를 메모리 어디든 비연속적으로 필요할 때 할당한다. 가벼운 블록 테이블이 논리 주소를 실제 물리 주소로 매핑해, 내부·외부 단편화와 시스템 프롬프트 중복 저장 문제를 모두 없앤다. KV 캐시와 PagedAttention은 모두 오픈소스 추론 엔진 vLLM에서 나왔다.
주요 인사이트
- GPU 메모리 활용률(gpu-memory-utilization)은 기본값 0.9다. 안정적인 워크로드에서는 0.95까지 올려 동시 요청을 더 채우고, 부하 폭증으로 OOM이 나면 0.8로 낮추는 식으로 조정한다.
- 프리픽스 캐싱을 켜면 같은 시스템 프롬프트를 공유하는 요청들이 같은 물리 메모리를 가리킨다. RAG 파이프라인·멀티턴 챗·코딩 에이전트에서는 적중률이 75~95%에 이르고, 공유된 프리필을 건너뛰어 첫 토큰까지의 시간이 크게 줄어든다.
- 청크드 프리필은 디코드 요청을 먼저 채운 뒤 남은 연산 예산으로 프리필 청크를 처리해, 긴 프롬프트가 들어올 때 스트리밍이 끊기는 현상을 줄인다. 실제 배포에서 처리량이 50% 개선된 사례가 있다.
- 지연에 민감한 워크로드에서는 투기적 디코딩이 유용하다. 작은 초안 모델이 출력 토큰을 제안하고 큰 모델이 한 번의 순전파로 검증하는 방식으로, 출력 품질은 큰 모델 단독 실행과 수학적으로 동일하다. 다만 동시성이 매우 높으면 GPU가 이미 바빠 이득이 줄어든다.
- 병목은 대개 모델이 아니라 메모리이며, 이미 보유한 GPU에서 설정만 조정해도 처리량을 극적으로 끌어올릴 수 있다는 점이 핵심이다.
자주 묻는 질문
LLM 추론의 프리필 단계와 디코드 단계는 무엇이 다른가요?
프리필은 입력 프롬프트를 모든 트랜스포머 층에 통과시켜 표현을 만드는 연산 중심 단계로, 첫 토큰이 나오기 전 지연이 여기서 생깁니다. 디코드는 토큰을 하나씩 생성하며 매 단계 GPU 메모리에서 이전 문맥을 꺼내 오는 메모리 중심 단계입니다.
KV 캐시는 왜 추론을 빠르게 만드나요?
캐시가 없으면 새 토큰마다 앞선 모든 토큰의 키·값을 다시 계산해야 합니다. KV 캐시는 이전 단계의 키·값 행렬을 저장해 두어, 새 토큰은 자기 몫만 계산하고 나머지는 캐시에서 참조합니다. 메모리를 써서 연산을 아끼는 맞교환입니다.
PagedAttention은 메모리 낭비를 어떻게 줄이나요?
전통적 방식은 요청마다 최대 길이 기준의 연속 블록을 미리 잡아 대부분을 비워 둡니다. PagedAttention은 KV 캐시를 기본 16토큰짜리 페이지로 쪼개 비연속적으로 필요할 때 할당하고, 블록 테이블로 논리·물리 주소를 매핑해 단편화와 중복 저장을 없앱니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗