Efficient Memory Management for Large Language Model Serving with PagedAttention
[논문] Efficient Memory Management for Large Language Model Serving with PagedAttention
LLM 서빙, 4배 빨라진 비밀: 운영체제에서 훔친 메모리 관리 기법 (vLLM)
서론: LLM 서빙의 값비싼 현실
대규모 언어 모델 서비스 제공에는 막대한 비용이 소모됩니다. 이를 절감하고 더 많은 사용자를 처리하는 핵심은 단위 시간당 처리량을 높이는 것입니다. 여러 사용자 요청을 배치로 묶어 처리해야 하지만, GPU 메모리 부족이 심각한 병목입니다. 특히 LLM의 '단기 기억' 역할을 하는 **KV 캐시(Key-Value Cache)**가 비효율적으로 관리되면서 메모리가 낭비됩니다.
핵심 문제점: KV 캐시의 비효율성
KV 캐시란 무엇인가?
LLM은 다음 단어 예측을 위해 이전 모든 토큰을 참고합니다. 어텐션 메커니즘이 각 토큰의 Key와 Value를 계산하고, 이를 GPU 메모리에 캐싱합니다. 문제는 필요한 메모리가 입력 길이와 생성 길이에 따라 동적으로 변한다는 것입니다.
기존 방식의 문제점
기존 서빙 프레임워크들은 연속적 메모리 할당 정책을 사용합니다:
- 과잉 예약: 최대 가능한 토큰 길이(예: 2048)만큼 미리 예약
- 내부 파편화: 실제 필요량(예: 10 토큰)보다 훨씬 많이 할당
- 외부 파편화: 단편화된 메모리로 새 요청 수용 불가
논문에 따르면 실제 KV 캐시 데이터는 할당된 공간의 단 20%만 사용되며, 80%의 GPU 메모리가 낭비됩니다.
획기적인 해결책: PagedAttention
이 문제를 해결하기 위해 제안된 PagedAttention은 운영체제의 가상 메모리와 페이징 기법에서 영감을 받았습니다.
핵심 원리
- 블록 분할: KV 캐시를 작은 고정 크기 블록으로 나눔
- 비연속적 할당: 블록들을 GPU 메모리의 분산된 공간에 자유롭게 배치
- 블록 테이블: 논리 블록과 물리 메모리 간 매핑 관리
이렇게 하면 내부 파편화는 블록 내에서만 발생하고, 외부 파편화는 완전히 제거됩니다.
솔루션의 구현: vLLM 시스템
PagedAttention을 구현한 vLLM의 주요 기능:
- 중앙 스케줄러: 모든 요청 관리 및 최적 처리
- 블록 테이블: 각 요청의 논리-물리 블록 매핑 유지
- On-demand 할당: 필요한 만큼만 실시간 할당
- Copy-on-Write (CoW): 여러 답변 후보가 프롬프트 부분 캐시를 공유하여 메모리 절약
이는 fork() 시스템 콜과 유사한 방식으로, 병렬 샘플링과 빔 서치 같은 복잡한 디코딩 전략을 효율적으로 처리합니다.
놀라운 성능 향상
| 항목 | vLLM 개선 (Orca 대비) |
|---|---|
| 처리량 | 2-4배 증가 |
| 배치 요청 수 | 최대 4.3배 더 처리 가능 |
| 메모리 효율 | 거의 낭비 없음 |
| 빔 서치 | 최대 2.3배 처리량 향상 |
특히 긴 문장, 거대 모델, 복잡한 디코딩 알고리즘에서 효과적입니다.
결론
LLM 서빙 성능은 단순 GPU 연산 능력보다는 메모리 관리 효율에 달려있습니다. vLLM은 운영체제 기법을 활용하여:
- 메모리 파편화 문제 해결
- 처리량 2-4배 향상
- 진입 장벽 낮춰 더 많은 개발자와 기업이 LLM 활용 가능하게 함
vLLM과 같은 효율적 서빙 시스템이 앞으로 LLM 생태계 확장의 중추적 역할을 할 것으로 기대됩니다.