AI VIDEO BRIEFING

KV 캐시·PagedAttention로 LLM 추론 속도와 GPU 처리량 높이기

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

LLM 추론이 느려지는 진짜 이유, KV 캐시와 PagedAttention으로 GPU 처리량 끌어올리기 영상 대표 이미지

핵심 메시지

  • 동시 사용자가 늘면 LLM이 느려지는 병목은 모델 자체가 아니라 추론 중 메모리 사용 방식에 있다.
  • LLM 추론은 입력을 처리하는 연산 중심의 프리필 단계와, 토큰을 하나씩 만들며 메모리를 반복 조회하는 디코드 단계로 나뉜다.
  • KV 캐시는 이전 토큰의 키·값 행렬을 저장해 매 단계 재계산을 없애는, 메모리를 써서 연산을 아끼는 맞교환이다.
  • PagedAttention은 운영체제의 가상 메모리 페이징처럼 KV 캐시를 작은 페이지로 쪼개 메모리 낭비(단편화)를 제거한다.
  • GPU 메모리 활용률, 프리픽스 캐싱, 청크드 프리필 같은 vLLM 설정을 조정하면 같은 GPU에서 처리량을 크게 높일 수 있다.

쉽게 이해하기

하나의 사용자만 붙어 있을 때는 첫 토큰까지의 시간이 매우 빠르다. 그러나 사용자가 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 원본 영상 보기 ↗

관련 AI 소식