PagedAttention은 수요 페이징(Demand Paging) 방식의 KV 캐시로, KV 캐시를 여러 개의 작은 메모리 블록(페이지)으로 나누어 불연속적인 주소 공간에 배치하고, 필요할 때 요청 단위나 토큰 단위로 동적으로 할당 및 관리하는 방식입니다. 이 구조는 특히 vLLM과 같은 최신 LLM 추론 엔진에서 메모리 사용 효율을 크게 높일 수 있습니다. 그러나 이러한 이점과는 반대로 L1·L2 캐시의 활용률(hit ratio)을 떨어뜨려 성능 저하를 유발하기도 합니다. 여기서는 NVIDIA H100 GPU를 기준으로, PagedAttention 방식이 L1/L2 캐시 히트율을 저하시키는 원인을 자세히 살펴보겠습니다.
먼저 NVIDIA H100 GPU의 캐시 아키텍처를 간략히 살펴보면, H100 GPU는 80GB의 HBM3 메모리를 탑재하고, 최대 메모리 대역폭은 3TB/s에 이릅니다. 또한, Streaming Multiprocessor(SM)마다 내장된 register file은 256KB이며, 여기에서 최대로 설정할 수 있는 shared memory는 228KB입니다. 즉 최소한으로 보장되어야 하는 L1 캐시의 양은 28KB라는 것입니다. 전체 SM이 공유하는 L2 캐시의 총 용량은 50MB로 이전 세대보다 증가하였습니다.
L1 캐시는 연속된 n바이트 단위의 주소 범위를 한 번에 캐싱하는 구조를 갖추고 있어, 공간적 접근 효율성을 극대화하는 구조입니다. GPU가 특정 주소의 데이터를 읽을 때, 이 주소 근처에 위치한 데이터를 함께 가져오는 이유는 캐시 라인 내 데이터가 빠르게 재사용될 가능성이 높다는 가정에 기반합니다.
PagedAttention 방식은 KV 캐시를 여러 개의 작은 블록으로 나누고, 이 블록들을 요청이나 토큰의 길이에 따라 필요할 때만 동적으로 할당하여 불연속적인 주소 공간에 배치합니다. 이로 인해 KV 캐시가 물리적으로 분산되고, 연속적으로 배치되지 않으므로, GPU 캐시가 기대하는 연속적 주소 접근과 반대되는 상황이 발생합니다. GPU 스레드 그룹인 워프(warp)가 데이터를 읽으려 할 때, 참조해야 하는 데이터들이 여러 주소 공간에 흩어져 있어, 한 번 캐시로 가져온 데이터를 효율적으로 재사용하기 어렵게 됩니다. 이는 곧 공간적 국소성(Spatial Locality)의 저하를 의미하며, 연속된 메모리를 사용하는 기존 구조 대비 더 많은 캐시 라인 미스가 발생하게 됩니다.
특히 PagedAttention 방식에서는 각 요청과 토큰의 메모리 블록이 블록 테이블(page table)에 따라 관리되므로, 어텐션 연산 시 스레드마다 복잡한 주소 계산과 다중 페이지 참조가 불가피합니다. 이는 기존의 어텐션 커널에서 흔히 활용되는 연속적인 접근 및 coalesced access와는 상당히 다른 패턴을 유발합니다. 기존의 연속된 구조에서는 하나의 캐시 라인이 여러 토큰, 헤드 또는 배치 요소를 한꺼번에 담아두는 구조였지만, PagedAttention에서는 여러 개의 요청이나 토큰이 서로 떨어진 메모리 블록을 참조하면서, 공간적 국소성(spatial locality)이 크게 떨어집니다. 따라서 동일 워프 내에서도 각 스레드가 서로 다른 주소를 빈번하게 접근하게 되며, 이로 인해 GPU의 L1 및 L2 캐시 라인 적중률(hit ratio)이 급격히 낮아지고 DRAM 접근이 잦아지는 문제로 이어집니다.
이 문제는 시퀀스 길이가 길어질수록, 그리고 배치 크기가 증가할수록 더 심각하게 나타납니다. 길고 복잡한 시퀀스나 큰 배치는 KV 캐시를 더욱 많은 블록으로 나누게 되고, 그 결과 블록 간 메모리 접근이 빈번하게 점프하며 이루어지기 때문에, 캐시 적중이 줄어들고 DRAM 접근이 더 잦아지는 현상이 심화됩니다. 특히 FlashAttention과 같은 고성능 어텐션 커널은 메모리 접근이 타일(tile) 단위로 연속적으로 수행되는 구조를 기대하고 최적화된 상태이기 때문에, PagedAttention처럼 불연속적인 접근 패턴을 사용할 경우 최적화 효과가 제대로 발휘되지 못합니다. 오히려 캐시 적중율 저하로 인해 성능 병목이 발생할 가능성이 높아집니다.
추가로, 불연속적 주소 배치를 다루기 위한 추가적인 인덱싱 연산, 스레드 동기화, 그리고 CPU와 GPU 간 주소 변환 작업 같은 부가적 워크로드가 발생하게 되어 캐시 적중률의 하락을 더욱 가속합니다. 이러한 추가 작업은 캐시 미스 외에도 GPU의 전반적인 연산 효율을 떨어뜨리게 됩니다.
정리하면, PagedAttention 방식은 memory fragmentaion을 방지하여 GPU 메모리를 효율적으로 사용할 수 있도록 해주는 장점에도 불구하고, 불연속적 메모리 구조와 그로 인한 불규칙적 접근 패턴으로 인해 GPU의 L1 및 L2 캐시 적중률이 저하되는 부작용이 있습니다. 이는 NVIDIA H100과 같은 최신 고성능 GPU에서도 마찬가지로 발생하는 문제이며, 결국 캐시 미스를 증가시키고 DRAM 접근을 자주 유발하여 성능에 부정적인 영향을 끼치게 됩니다.
참고: https://developer.nvidia.com/ko-kr/blog/nvidia-hopper-architecture-in-depth/
'Tech' 카테고리의 다른 글
SGLang: 구조화된 LLM 프로그램의 효율적 실행 기술 분석 (0) | 2025.04.09 |
---|---|
Sarathi-Serve 상세 기술 분석 (1) | 2025.04.05 |
PyTorch CUDA 메모리 관리 (0) | 2025.03.08 |
[AI 상식] LLM은 어떻게 동작할까 - MLP (2) | 2025.03.03 |
GEMM (General Matrix to Matrix Multiplication)과 GPU 아키텍처의 이해 (4) | 2025.03.01 |