Llama-3 8B에 128K 컨텍스트를 넣고 추론을 돌리면, KV 캐시만으로 A100 80GB의 약 16GB를 가져간다. 계산 자체는 간단하다. num_layers=32, num_kv_heads=8(GQA), head_dim=128, bf16 2바이트 기준으로 토큰당 KV 캐시는 32 × 8 × 128 × 2 × 2 = 131,072 바이트, 즉 128KB다. 128K 토큰이면 128K × 128KB ≈ 16GB다. 배치 크기를 4로 올리면 KV 캐시만 64GB — 모델 가중치 약 16GB까지 합산하면 80GB A100 한 장이 꽉 찬다.
FlashAttention-2는 이 상황에서 실질적인 도움을 준다. HBM과 SRAM 간 IO를 줄여 메모리 대역폭 병목을 해소하고, 같은 컨텍스트 길이에서 TTFT를 수 배 단축한다. 하지만 FlashAttention이 건드리지 않는 것이 있다 — Attention FLOPs 자체의 O(n²) 성장이다. 컨텍스트 길이를 두 배로 늘리면 FLOPs는 네 배가 된다. 32K → 128K는 길이 4배, prefill FLOPs 16배다. TTFT도 그 기울기로 따라간다.
128K·1M 컨텍스트 모델이 실 서빙에 등장하면서, 이 O(n²) 벽을 어떻게 다룰 것인가가 아키텍처 선택 문제이자 서빙 비용의 직접 변수가 됐다. 접근 방식은 크게 세 갈래다. Sliding Window Attention, Sparse Attention, Linear Attention — 셋 다 같은 병목을 겨냥하지만 서로 다른 것을 포기한다.
Full Attention의 비용 구조
Attention 비용은 두 축으로 나뉜다. FLOPs와 메모리다.
FLOPs는 O(n²)다. Prefill에서 쿼리-키 행렬 곱이 n × n 크기로 연산된다. 이게 TTFT의 가장 직접적인 원인이다. Decode 단계는 매 스텝에서 쿼리 벡터 하나를 전체 KV 캐시에 attend하므로 FLOPs 자체는 O(n)이지만, n이 커지면 KV 캐시를 HBM에서 읽어오는 대역폭 비용도 선형으로 증가한다.
메모리는 KV 캐시가 O(n)으로 자란다. Llama-3 8B 기준으로 32K 컨텍스트에서 약 4GB, 128K에서 약 16GB다. 이 자체보다 배치와의 곱이 문제다. 처리량을 올리려면 배치를 키워야 하는데, KV 캐시가 배치 × 시퀀스 길이로 늘어나니 긴 컨텍스트에서는 배치 크기가 구조적으로 눌린다.
Sliding Window Attention: 로컬리티 가정이 깨지는 지점
Mistral 7B 논문이 제안한 SWA는 각 토큰이 attend하는 범위를 직전 W개 토큰으로 제한한다. Mistral 7B의 경우 W=4096이다. KV 캐시가 O(W)로 상한이 고정되므로 128K 입력에서도 레이어 전체 KV 캐시는 약 512MB로 일정하다. 처리량 관점에서 메모리 예측 가능성이 생기는 큰 장점이다.
개별 레이어에서는 W=4096 너머 토큰에 직접 attend할 수 없지만, 32개 레이어가 쌓이면 이론적 수용 범위가 W × k = 4096 × 32 = 131,072 토큰이 된다. 각 레이어의 hidden state가 이전 레이어의 로컬 컨텍스트를 압축해 전달하는 구조다.
이 "간접 전달"이 정확한 정보 복원을 보장하지 않는다는 게 핵심 한계다. 토큰 위치 1K에 있는 특정 값을 토큰 위치 128K에서 정확히 recall해야 하는 태스크 — needle-in-haystack이 전형적인 예다 — 에서 레이어 1은 1K와 128K를 동시에 볼 수 없다(갭이 127K). 그 정보는 중간 레이어들을 거쳐 간접 전달되는데, 집약 과정에서 희석된다.
RULER 벤치마크는 이걸 수치로 확인해 준다. 128K 컨텍스트에서 Full Attention 계열인 Meta-Llama-3.1 8B가 RULER 평균 81.3점을 기록할 때, SWA 기반 모델은 동일 컨텍스트에서 정확도가 유의미하게 낮아진다. RULER는 단순 needle-in-haystack을 넘어 다중 홉 추론, 집계, QA를 포함한 13개 태스크로 구성돼 있는데, 문서 전체에 흩어진 단서를 조합해야 하는 태스크일수록 격차가 커진다. 이 손실은 양자화나 배치 스케줄링으로 보상할 수 없다 — Attention이 해당 토큰 자체를 보지 않기 때문이다.
vLLM에서 SWA는 PR #14097을 통해 v1 엔진의 KV 캐시 매니저에 구현됐다. 레이어에 sliding_window 속성이 선언되면 SlidingWindowSpec을 생성하고, 윈도우를 벗어난 KV 블록을 자동 해제해 메모리를 회수한다.
Sparse Attention: 이론적 복잡도와 GPU 현실의 간극
BigBird, Longformer 계열이 채택한 방식이다. 전체 토큰 쌍에 attend하는 대신 세 패턴을 조합한다. 로컬 윈도우(인접 토큰), 글로벌 토큰(CLS 같은 고정 위치 — 모든 토큰이 attend), 랜덤 토큰(매 레이어 무작위 선택). 이론적 복잡도는 O(n × (w + g + r)) 수준으로, 적절히 작은 w, g, r이면 O(n)에 가깝다.
SWA 대비 한 가지 구조적 우위가 있다. 글로벌 토큰 덕분에 장거리 정보 전달 채널이 명시적으로 존재한다. SWA가 레이어 스택의 간접 전달에 의존하는 것과 달리, 글로벌 토큰은 전체 시퀀스와 직접 통신한다.
문제는 GPU 구현이다. GPU는 정형화된 dense 행렬 연산에 최적화돼 있다. Sparse한 attention 패턴은 불규칙한 메모리 접근을 만들어내고, 이 패턴을 효율적으로 처리하는 CUDA 커널을 작성하기가 구조적으로 어렵다. cuBLAS 수준의 최적화가 적용된 dense 행렬 연산과 비교하면, sparse 커널의 실제 GPU 처리량은 이론적 복잡도가 낮음에도 동등하거나 오히려 낮은 경우가 많다. vLLM을 포함한 주류 서빙 프레임워크에서 Sparse Attention 커널 지원이 기본 탑재되지 않는 이유가 여기 있다.
Linear Attention: O(1) decode의 비용
RWKV, RetNet, Mamba 계열이다. softmax attention을 커널 함수로 근사해 RNN 형태로 재표현하면, decode 시 메모리 복잡도가 O(1) — 고정 크기 상태 벡터 — 로 떨어진다. 시퀀스가 길어져도 decode 비용이 증가하지 않는다.
실측에서 이 이점은 뚜렷하다. Mamba 벤치마크에 따르면 시퀀스 길이 2K-4K를 넘으면 유사 크기 Transformer 대비 decode 처리량이 최대 5배 높아진다. RWKV도 decode latency가 시퀀스 길이와 무관하게 일정하다는 점을 실측으로 보여준다.
손실도 두 곳에서 발생한다.
Prefill이 먼저다. Mamba의 selective scan, RWKV의 time-mixing은 구조적으로 순차적이다. 학습 시에는 병렬화 트릭을 쓰지만, 추론 prefill에서 이 순차성이 GPU 활용률을 낮춘다. Full Attention + FlashAttention 조합이 prefill에서 GPU를 빽빽하게 채우는 것과 대비된다. 동일 시퀀스 길이에서 prefill TTFT가 더 나쁜 경우가 생기고, 이 교차점(crossover point)은 일반적으로 2K-4K 토큰 구간에서 나타난다 — 그보다 짧은 입력에서는 Transformer 쪽이 유리하다.
두 번째는 recall 정확도다. 고정 크기 상태 벡터가 전체 컨텍스트를 압축하면, 특정 위치의 값을 정확히 retrieve해야 하는 태스크에서 손실이 집중된다. 상태 공간 압축 과정에서 정확한 위치 정보가 희석되기 때문이다. 긴 코드 파일에서 특정 함수명을 추적하거나, 대화 히스토리에서 특정 항목을 정확히 인출하는 태스크가 이 범주다.
서빙 관점 비교
| Full Attention | Sliding Window | Sparse Attention | Linear Attention | |
|---|---|---|---|---|
| Prefill FLOPs | O(n²) | O(n × W) | O(n × (w+g+r)) | O(n) |
| KV 캐시 | O(n) | O(W) 고정 | O(n) (dense 구현) | O(1) 고정 상태 |
| 128K KV 메모리 (Llama-3 8B) | ~16 GB | ~512 MB | 구현 의존 | 수십 MB 이내 |
| TTFT 스케일 | n에 이차 증가 | W 고정으로 안정 | 커널 비효율로 이론치 미달 | prefill 순차성으로 GPU 활용 저하 |
| Decode 처리량 | n에 비례해 저하 | W 고정으로 안정 | 이론상 유리, 실 구현 편차 큼 | n 무관 — 최대 5× 이점 |
| 정확도 위험 | 없음 | 장거리 recall | 패턴 커버리지 한계 | recall-intensive 태스크 전반 |
| 주류 서빙 지원 | 완전 | vLLM 지원 | 제한적 | 별도 구현 필요 |
무엇을 골라야 하는가
태스크와 하드웨어 예산이 답을 결정한다.
RAG처럼 검색된 청크를 짧은 컨텍스트로 조합하는 파이프라인, 또는 스트리밍 문서 처리처럼 로컬 컨텍스트가 답을 결정하는 구조라면 SWA가 비용 대비 합리적이다. KV 캐시 예측 가능성이 생기고 vLLM에서 바로 쓸 수 있다. Mistral 7B가 이 용도에서 Full Attention 모델 대비 비용 효율이 좋은 이유다.
긴 다중 홉 추론이나 코드베이스 전체 분석 같은 태스크는 다르다. SWA나 Linear Attention이 정확도를 얼마나 잃는지 사전 벤치마크 없이는 알기 어렵고, 정확도 손실이 확인된 이후에는 Attention 방식 변경 외에 방법이 없다. 이 경우 Full Attention + FlashAttention이 정직한 선택이고, KV 캐시는 vLLM의 페이징·오프로딩으로 관리한다.
최근 모델들이 레이어 일부만 Full Attention을 유지하고 나머지를 SWA나 Linear Attention으로 교체하는 하이브리드 구조를 늘리고 있다. 이 트레이드오프를 레이어 단위로 다루는 현실적인 타협이다. 어떤 레이어를 Full로 남길지는 여전히 경험적 탐색의 영역이고, 보편적인 설계 원칙은 아직 나오지 않았다.