PagedAttention페이지드 어텐션
쉽게 이해하기
LLM 서빙의 큰 문제는 메모리입니다. 토큰을 하나씩 생성하는 동안 모델은 이전 토큰들의 키·값(KV) 캐시를 계속 들고 있어야 하는데, 요청마다 길이가 달라지니 기존처럼 연속된 큰 덩어리로 미리 잡아두면 내부/외부 단편화가 심해져 배치에 실을 수 있는 요청 수가 줄어듭니다. 결국 GPU 연산은 남아도는데 메모리 한계 때문에 처리량이 막히는 ‘메모리 바운드’ 상황이 자주 생깁니다. PagedAttention은 운영체제의 페이징처럼 KV 캐시를 고정 크기 블록으로 나눠 비연속 공간에 배치하고, 작은 조회표(룩업 테이블)로 블록의 실제 위치를 가리킵니다. 길이가 짧은 요청은 적은 블록만, 긴 요청은 더 많은 블록만 할당해 낭비를 줄이고, 같은 프롬프트에서 갈라져 나오는 여러 시퀀스는 공통 접두사 구간의 블록을 공유해 중복 저장을 피합니다. 실행 경로는 간단합니다: 조회표로 이번 단계에서 참조할 이전 위치의 KV 블록들을 찾고 읽습니다 → 새 토큰을 만들면 남은 공간이 있으면 같은 블록에 쓰고, 꽉 찼다면 새 블록을 추가합니다 → 조회표에 해당 블록 인덱스를 갱신/추가합니다. 이러한 방식은 공개 평가에서 연속 할당 기반 시스템 대비 vLLM 논문 평가 워크로드에서 동일 지연 수준의 2–4배 처리량 향상을 보인 배경이 됩니다.
비유와 예시
- 다중 테넌트 코드 자동완성: 대부분은 짧은 제안이지만 가끔 긴 리팩터링 제안이 섞입니다. 블록 단위 할당으로 길이 혼합 배치에서도 KV 낭비가 줄어 동시 처리량이 올라갑니다.
- 빔서치/평행 샘플링: 하나의 프롬프트에서 여러 후보를 뽑으면 접두사가 크게 겹칩니다. 공통 구간 블록을 공유해 후보 수가 늘어도 메모리 중복을 억제합니다.
- 장단 문서가 섞인 챗봇: 짧은 질의와 아주 긴 요약/대화가 뒤섞입니다. 실제 길이만큼만 캐시를 쓰니 긴 요청이 있어도 배치가 쉽게 깨지지 않습니다.
한눈에 비교
| PagedAttention | 연속 할당 KV 캐시 | FlashAttention | |
|---|---|---|---|
| 메모리 배치 | 비연속 블록 + 조회표 | 요청별 연속 버퍼 선예약 | 연산 타일링/IO 감소 중심 |
| 단편화 | 낮음(온디맨드 블록) | 높음(내부/외부 단편화) | 해당 없음(계산 최적화) |
| 접두사 공유 | 가능(COW) | 어려움 | 해당 없음 |
| 커널 요구 | 블록 포인터 지원 필요 | 일반 커널 | 전용 고속 커널 |
| 최적 용도 | 길이 편차 큰 서빙 | 균질·고정 길이 | 어느 곳이나(계산 가속) |
PagedAttention은 ‘공간 효율’(KV 캐시) 문제를, FlashAttention은 ‘시간 효율’(계산) 문제를 다뤄 상호보완적으로 함께 쓰입니다.
어디서 왜 중요한가
- 메모리 단편화 완화: 고정 크기 블록+조회표로 비연속 배치를 허용해 KV 낭비를 최소화하는 것을 목표로 합니다.
- 접두사 공유로 고급 디코딩 지원: 평행 샘플링·빔서치에서 요청 내/요청 간 KV 공유가 가능해 메모리 사용량을 더 낮춥니다.
- 평가 맥락: FasterTransformer·Orca 대비 동일 지연에서 2–4배 처리량 향상을 보고하며, 길이가 길고 모델이 클수록, 디코딩이 복잡할수록 개선 폭이 커집니다.
- 메모리 바운드 완화: 실제 사용량만큼만 캐시를 늘려 배치 크기와 GPU 활용도를 개선합니다.
- 실무 채택: 이 아이디어를 바탕으로 vLLM이 구축되어 서빙 시스템의 핵심 구성으로 쓰입니다.
자주 하는 오해
- ❌ PagedAttention이 FlashAttention을 대체한다 → ✅ 목적이 달라 함께 쓰며, 전자는 메모리 효율·후자는 연산 효율을 개선합니다.
- ❌ 커널 수정 없이 어디서나 바로 된다 → ✅ 비연속 레이아웃을 다루는 호환 커널과 추가 북키핑이 필요합니다.
- ❌ 가중치 메모리도 크게 줄인다 → ✅ 주 대상은 KV 캐시이며, 가중치는 별도로 VRAM을 차지합니다.
대화에서는 이렇게
- "이번 배포에서 PagedAttention 켰는데 p99 변화 없이 tokens/s가 늘었는지 확인해 주세요."
- "빔서치 배수 조정 시 접두사 KV 공유가 실제로 작동하는지, 메모리 사용과 OOM 로그를 같이 보죠."
- "FlashAttention은 유지하고, PagedAttention의 lookup 오버헤드가 커지지 않도록 배치 구성을 재조정합시다."
- "긴 세션 테넌트에서 KV 블록 사용률과 회수 지연이 없는지 주간 리포트에 포함해 주세요."
함께 읽으면 좋은 용어
참고 자료
- Efficient Memory Management for Large Language Model Serving with PagedAttentionSOSP
OS 페이징 영감의 설계, 단편화 감소와 vLLM 성능 보고.
- PagedAttention · Text Generation Inference Docs
KV 캐시 블록화·룩업·접두사 공유의 개념 설명.
- Paged Attention - vLLM (Design Document)
vLLM의 페이지드 어텐션 설계 배경과 구현 개요.
- PagedAttention: Efficient Memory Management for LLMs
블록 포인터 커널 요구 등 트레이드오프 설명.
- vLLM Explained: PagedAttention, Continuous Batching, and Deploying High-Throughput LLM Inference in Production
프로덕션 관점의 병목과 연속 배치·배포 가이드.
- Private LLM Deployment Guide: Llama + vLLM + TensorRT — Self-Hosted Architecture
PagedAttention과 FlashAttention의 보완적 관계 정리.