본문으로 건너뛰기
AICosmus

Where tech meets the everyday — AI, fintech, swimming, and cars.

AICosmus

Where tech meets the everyday — AI, fintech, swimming, and cars.

  • 홈
  • IT기술
    • RAG
    • GRPC
    • Kotlin
    • LLM
    • 금융 IT
    • 에이전트
    • 제로Trust
    • 자동화
  • 일상
    • 자동차
    • 경제/재테크
    • 생활정보
  • About
    • Contact
    • Terms of Service
    • Disclaimer
    • Privacy – Policy
  • 홈
  • IT기술
    • RAG
    • GRPC
    • Kotlin
    • LLM
    • 금융 IT
    • 에이전트
    • 제로Trust
    • 자동화
  • 일상
    • 자동차
    • 경제/재테크
    • 생활정보
  • About
    • Contact
    • Terms of Service
    • Disclaimer
    • Privacy – Policy
LLM 구조와 KV 캐시 개념 일러스트
LLM

Transformer 구조를 알면 KV 캐시는 당연해진다 — LLM 추론 속도의 비밀

By AICosmus
2026년 06월 24일 5 Min Read
1

1부 — LLM의 기본 구조

LLM이 하는 일: 다음 토큰 예측

거대 언어모델(LLM)의 본질은 단순합니다. 지금까지 주어진 토큰 시퀀스를 보고, 다음에 올 토큰의 확률 분포를 출력하는 함수입니다. “오늘 날씨가”라는 입력이 들어오면 “좋다(0.35), 흐리다(0.20), 덥다(0.15)…” 같은 확률을 내놓고 그중 하나를 골라 출력하는데, 이 과정을 반복할 때마다 이전 계산을 재활용하는 KV 캐시는 추론 속도를 좌우하는 핵심 장치가 됩니다.

이 과정을 반복하면 문장이 만들어집니다. 이전 출력을 다시 입력에 붙여서 다음 토큰을 예측하고, 또 붙이고, 또 예측하고 — 이것이 자기회귀(autoregressive) 생성입니다. 한 번에 한 토큰씩, 순차적으로. 이 특성이 뒤에서 KV 캐시가 필연적으로 등장하는 이유가 됩니다.

입력이 모델을 통과하는 경로

사용자의 텍스트가 모델을 통과하는 전체 경로를 한눈에 보겠습니다.

LLM 추론 파이프라인 전체 흐름도 - KV 캐시는

① 토큰화(Tokenization) — 텍스트를 정수 ID 시퀀스로 변환합니다. “안녕하세요”가 [12840, 230, 17] 같은 숫자 배열이 됩니다.

② 임베딩(Embedding) — 각 토큰 ID를 고차원 벡터로 매핑합니다. 여기에 위치 정보(Positional Encoding)가 더해져 모델이 토큰의 순서를 파악합니다. 최근 모델에서는 RoPE(Rotary Position Embedding) 방식이 대표적입니다.

③ Transformer 블록 × N — 핵심 연산 단위가 수십~수백 겹 쌓여 있습니다. 각 블록은 셀프 어텐션과 피드포워드 네트워크로 구성됩니다. 다음 절에서 내부를 열어봅니다.

④ 출력 헤드(LM Head) — 마지막 블록의 출력 벡터를 어휘 크기만큼의 로짓(logit)으로 변환합니다. softmax를 거치면 다음 토큰의 확률 분포가 됩니다.

Transformer 블록 내부: 어텐션과 FFN

하나의 Transformer 블록은 두 파트로 나뉩니다.

셀프 어텐션(Self-Attention) — 시퀀스 내 토큰들이 서로를 참조해 문맥을 파악하는 단계입니다. 입력 벡터에 세 가지 선형 변환을 적용해 Query(Q), Key(K), Value(V) 텐서를 만듭니다.

  • Q(Query): “나는 어떤 정보를 찾고 있는가?” — 현재 토큰의 질문
  • K(Key): “나는 어떤 정보를 갖고 있는가?” — 각 토큰의 색인 라벨
  • V(Value): “내가 전달할 실제 정보” — 어텐션을 받았을 때 넘기는 콘텐츠

Q와 K의 내적으로 어텐션 점수를 구하고, 이를 가중치로 삼아 V를 합산합니다.

Attention(Q, K, V) = softmax(QKᵀ / √dₖ) · V

실제로는 이 연산을 여러 개의 헤드(head)로 분할해 병렬 수행합니다. 이것이 Multi-Head Attention(MHA)입니다. 각 헤드가 서로 다른 관점의 문맥을 포착하고, 결과를 합칩니다.

피드포워드 네트워크(FFN) — 어텐션이 “어디를 볼지”를 결정했다면, FFN은 그 정보를 비선형 변환으로 가공합니다. 토큰별로 독립 적용되므로 위치 간 상호작용은 없습니다.

여기까지가 토대입니다. 기억할 것은 딱 하나 — 모든 레이어에서 Q, K, V가 매번 새로 계산된다는 사실입니다.

2부 — KV 캐시: 구조에서 필연적으로 따라 나오는 해법

자기회귀 생성의 비효율

1부에서 본 자기회귀 생성을 추론 관점에서 다시 봅시다. 모델은 토큰을 하나씩 만듭니다. 4번째 토큰을 생성할 때 [1, 2, 3]을, 5번째에는 [1, 2, 3, 4]를 모델에 다시 넣어야 합니다.

추론 과정은 두 단계로 나뉩니다.

  • Prefill(프리필): 사용자 프롬프트 전체를 한 번에 처리합니다. 입력 토큰을 병렬로 계산할 수 있어 GPU 활용 효율이 높습니다.
  • Decode(디코드): 토큰을 한 개씩 순차 생성합니다. 매 스텝마다 이전 모든 토큰의 어텐션을 계산해야 합니다.

캐시 없는 세계를 상상해 봅시다. 100번째 토큰을 생성하려면 99개 토큰의 K, V를 전부 다시 계산합니다. 101번째에는 100개를. N개 토큰을 생성하면 어텐션의 총 연산량이 O(N²)으로 증가합니다. 시퀀스가 길어질수록 속도가 급격히 느려지는 근본 원인입니다.

KV 캐시 유무에 따른 연산량 비교 다이어그램

KV 캐시는 어떻게 작동하는가: 메커니즘 상세

해법은 의외로 직관적입니다. 이미 계산한 K와 V를 메모리에 저장해 두고, 다음 스텝에서 재사용하면 됩니다.

디코드 단계에서 새 토큰이 하나 추가되면:

  1. 새 토큰에 대해서만 Q, K, V를 계산합니다(토큰 1개분의 연산).
  2. 새로운 K, V를 기존 캐시에 이어 붙입니다(append).
  3. 새 Q와 누적된 전체 K 캐시로 어텐션 점수를 구합니다.
  4. 점수를 가중치로 전체 V 캐시를 합산해 출력을 얻습니다.

이렇게 하면 매 스텝마다 새로 계산하는 K, V는 토큰 1개분뿐이고, 나머지는 캐시에서 읽습니다. 총 연산량이 O(N²)에서 O(N)으로 줄어듭니다.

“Q는 왜 캐싱하지 않는가?” — 이 질문에 답하면 KV 캐시의 본질이 명확해집니다. Q는 “지금 이 토큰이 무엇을 찾는가”를 나타내므로 현재 스텝에서만 쓰이고 버려집니다. 이전 토큰의 Q는 이전 스텝에서 이미 역할을 마쳤습니다. 반면 K와 V는 “과거 토큰이 제공하는 정보”이기 때문에 미래의 모든 스텝에서 계속 참조됩니다. 캐싱 대상이 K·V에 한정되는 것은 어텐션 수식의 필연적 귀결입니다.

비용의 정체: 메모리 공식

KV 캐시는 연산을 아끼는 대신 메모리를 소비합니다. 그 크기를 정확히 계산해 봅시다.

KV 캐시(bytes) = 2 × L × n_kv × d_head × S × B × dtype_bytes

  2 — K와 V 두 텐서
  L — Transformer 레이어 수
  n_kv — KV 헤드 수
  d_head — 헤드 차원
  S — 시퀀스 길이
  B — 배치 크기(동시 요청 수)
  dtype_bytes — 데이터 타입 크기(FP16 = 2, FP8 = 1)

실제 숫자를 넣어 보겠습니다. Qwen3-32B(GQA 적용 모델)를 예시로 잡습니다.

파라미터 값
레이어 수 (L) 64
KV 헤드 수 (n_kv) 8 (GQA)
헤드 차원 (d_head) 128
데이터 타입 FP16 (2 bytes)

토큰 1개당 KV 캐시 = 2 × 64 × 8 × 128 × 2 = 262,144 bytes ≈ 256 KB

컨텍스트 32K, 동시 1건 = 256 KB × 32,768 ≈ 8 GB

동시 20건 = 8 GB × 20 = 약 160 GB

모델 가중치(FP16 기준 약 64 GB)에 더해 KV 캐시만으로 VRAM 수백 GB에 달합니다. 만약 GQA가 아닌 MHA(KV 헤드 64개)였다면 캐시가 8배로 뛰어 32K 컨텍스트 1건에 64 GB, 20건이면 1.28 TB입니다. 컨텍스트가 길어지거나 동시 사용자가 늘면 KV 캐시가 VRAM의 지배적 소비원이 됩니다.

최적화 ① 모델 설계 레벨

MHA → MQA → GQA: KV 헤드 수 줄이기

MHA, MQA, GQA 어텐션 헤드 구조 비교
  • MHA(Multi-Head Attention): Q, K, V 헤드 수가 동일(예: 64개). Transformer 원형 그대로입니다. 표현력은 최대이나 KV 캐시도 최대.
  • MQA(Multi-Query Attention): K, V 헤드를 1개로 줄이고 모든 Q 헤드가 공유합니다. KV 캐시가 극단적으로 작아지지만, 품질 손실이 발생할 수 있습니다.
  • GQA(Grouped-Query Attention): Q 헤드를 몇 개의 그룹으로 나누고, 그룹마다 K, V 헤드 1개를 공유합니다. MHA의 품질과 MQA의 효율 사이에서 실용적인 균형점을 잡은 방식입니다.

Qwen3-32B는 Q 헤드 64개에 KV 헤드 8개(GQA 비율 8:1)를 채택해, MHA 대비 KV 캐시를 1/8로 압축하면서도 성능 저하를 최소화합니다. 최근 대부분의 대형 모델이 GQA를 기본으로 채택하는 이유입니다.

KV 캐시 양자화 — 모델 가중치와 별도로 KV 캐시만 FP8이나 INT8로 양자화하면 메모리가 절반으로 줄어듭니다. 위 예시의 160 GB가 80 GB로 내려오는 셈이죠. 최근 서빙 프레임워크들이 이 옵션을 적극 지원하고 있습니다.

최적화 ② 서빙 시스템 레벨

모델 구조를 바꾸지 않아도 서빙 시스템 레벨에서 KV 캐시를 더 효율적으로 관리할 수 있습니다.

PagedAttention (vLLM) — OS의 가상 메모리 페이징에서 영감을 받은 기법입니다. KV 캐시를 고정 크기 블록(page)으로 나누어 비연속 메모리에 배치합니다. 시퀀스마다 최대 길이를 미리 예약할 필요가 없어 내부 단편화가 사라지고, 실측 기준 2~4배 더 많은 동시 요청을 같은 VRAM에서 처리할 수 있습니다.

Prefix Caching — 시스템 프롬프트처럼 여러 요청이 공유하는 접두사의 KV 캐시를 한 번만 계산하고 재사용합니다. 동일한 시스템 프롬프트를 쓰는 20개 요청이 있다면, 해당 구간의 KV 캐시는 1벌만 유지하면 됩니다.

Continuous Batching — 전통적인 정적 배칭은 가장 긴 요청이 끝날 때까지 전체 배치가 대기합니다. Continuous batching은 짧은 요청이 끝나면 즉시 새 요청을 투입해 GPU 유휴 시간을 최소화하고, 처리량(throughput)을 극대화합니다.

마무리: VRAM 예산의 두 기둥

온프레미스 LLM 서빙에서 VRAM 예산은 결국 두 항목의 합입니다.

필요 VRAM ≈ 모델 가중치 + KV 캐시

모델 가중치는 고정이지만, KV 캐시는 컨텍스트 길이 × 동시 요청 수에 비례해 동적으로 변합니다. 최대 컨텍스트를 몇 K로 설정할지, 동시 요청을 몇 개까지 허용할지 — 이 운영 결정이 곧 KV 캐시 크기를 결정하고, 필요한 GPU 사양을 결정합니다.

KV 캐시는 어디선가 빌려온 트릭이 아닙니다. Transformer의 Q·K·V 구조와 자기회귀 생성 방식이 만나면 필연적으로 등장하는 최적화이고, 그 메모리 비용을 다스리는 것이 곧 LLM 서빙 엔지니어링의 핵심입니다. 구조를 이해하면, 캐시는 저절로 이해됩니다.

참고 자료

  • Transformer (deep learning architecture) — Wikipedia — Transformer 아키텍처의 어텐션 메커니즘과 KV 캐시 원리를 포괄적으로 설명하는 백과사전 문서
  • Attention Is All You Need (arXiv:1706.03762) — Transformer 구조를 처음 제안한 원논문으로, 셀프 어텐션의 Key-Value 연산 기초를 정의

Tags:

GQAKV캐시LLMTransformervLLMVRAM어텐션추론최적화
작성자

AICosmus

Follow Me
다른 기사
온프레미스 AI 서버와 홀로그램 AI 시각화
Previous

[온프레미스 AI Assistant 아키텍처 — Qwen3·Qwen3-VL 14일 설계] 1/14화: 온프레미스 AI 자체 호스팅, Qwen3을 선택한 6가지 이유

gRPC Proto 스키마 설계와 버전 관리 개념도
Next

gRPC Proto 스키마 설계와 버전 관리 실전 가이드

댓글 1개
  1. AI 에이전트 동작 원리 — 추론·도구·기억 구조 완전 해부 - AICosmus 댓글:
    2026년 07월 17일, 8:14 오후

    […] Transformer 구조를 알면 KV 캐시는 당연해진다 — LLM 추론 속도의 비밀 […]

    답글

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최신 글

  • [opencode 시즌 2 심화 — 나만의 도메인 특화 에이전트 만들기] 1/12화: opencode 에이전트 아키텍처 완전 해부 — 2026 Primary·Subagent 5계층 구조
  • Kotlin 코루틴 핵심 5가지 개념과 실전 활용법
  • [opencode 12일 집중 — 터미널 네이티브 AI 코딩 에이전트 완전 정복] 12/12화: opencode 로컬 모델 완전 가이드 2026 — Ollama·에어갭·규제 환경 도입 체크리스트
  • LLM 파인튜닝 실전 5단계 — 2026 LoRA 완벽 가이드
  • 금융 앱 생체인증 작동 원리, 지문·얼굴 보안 5단계 완전 해부

최신 댓글

  1. [온프레미스 AI Assistant 아키텍처 — Qwen3·Qwen3-VL 14일 설계] 9/14화: 온프레미스 RAG 파이프라인 — bge-m3·Qdrant 자체 호스팅 실전의 Dockerfile 최적화 실전 가이드 — 빌드·크기·보안 총정리 - AICosmus
  2. RAG 평가 프레임워크, 답변 품질을 수치로 측정하는 법의 RAG 리랭킹 가이드, 검색 결과 정확도 높이는 법 - AICosmus
  3. RAG 평가 프레임워크, 답변 품질을 수치로 측정하는 법의 RAG 리랭킹 가이드, 검색 결과 정확도 높이는 법 - AICosmus
  4. gRPC Interceptor 완벽 가이드: 인증부터 로깅까지의 gRPC 데드라인과 재시도 정책으로 장애 전파 차단하기 - AICosmus
  5. gRPC Interceptor 완벽 가이드: 인증부터 로깅까지의 gRPC 데드라인과 재시도 정책으로 장애 전파 차단하기 - AICosmus
  • About
  • Contact
  • Disclaimer
  • Privacy - Policy
  • Terms of Service
Copyright 2026 — AICosmus. All rights reserved. Blogsy WordPress Theme