Encoder-only
전체 입력을 양방향으로 읽고 문장·토큰 표현을 만든다. 생성보다는 이해와 분류에 강하다.
분류, 임베딩, NER처럼 입력 전체를 보고 판단할 때분류: Layer 11 - AI 기초 & 머신러닝 | 선수지식: L11-10 (ML 수학 토대), L11-40 (신경망과 역전파)
트랜스포머는 attention 기반 sequence 모델이고, attention은 query·key·value의 가중 합으로 토큰 간 관계를 동적으로 계산하는 메커니즘이다. LLM·번역·이미지(ViT) 모두 같은 구조 위에 있다.
이전 시대(RNN/LSTM)의 한계:
“Attention is All You Need” (Vaswani et al., 2017)이 RNN을 버리고 attention만으로 충분함을 보였다 — 모든 토큰이 모든 토큰과 직접 연결되며 병렬 계산 가능.
각 토큰이 다른 모든 토큰을 얼마나 참고할지를 동적으로 계산.
Attention(Q, K, V) = softmax(Q K^T / √d_k) V
Q (query): n × d_k ← 각 토큰이 "무엇을 찾는가"K (key): n × d_k ← 각 토큰이 "무엇을 가지고 있는가"V (value): n × d_v ← 각 토큰의 "정보 내용"아래 흐름은 수식을 “projection → 유사도 → 정규화 → 가중 합”으로 풀어 읽는 방법이다. QK^T와 softmax가 모든 토큰 쌍을 비교하기 때문에 context가 길어질수록 비용이 커진다.
flowchart LR A["입력 토큰 벡터"] --> B["Q, K, V projection"] B --> C["QK^T 유사도 행렬"] C --> D["sqrt(d_k)로 스케일링"] D --> E["softmax로 attention weight"] E --> F["V 가중 합"] F --> G["각 토큰의 문맥화된 표현"]
모든 토큰 쌍을 비교한 뒤 value를 섞기 때문에 병렬화는 쉽지만, context가 길수록 attention 행렬 비용이 커진다.
attention을 h개의 작은 head로 분할 후 병렬 계산. 각 head가 다른 종류의 관계를 학습 (구문, 의미, 거리 등).
MultiHead(Q,K,V) = Concat(head_1, ..., head_h) · W_Ohead_i = Attention(Q · W_Q^i, K · W_K^i, V · W_V^i)운영 직관:
num_heads=32, num_kv_heads=8 (GQA), d_head=128, hidden=4096 (= 32 × 128)num_heads=64, num_kv_heads=8 (GQA), d_head=128, hidden=8192self-attention은 순서 정보가 없다 (집합처럼 작동). 위치 정보를 별도로 주입.
| 방식 | 설명 | 사용처 |
|---|---|---|
| Sinusoidal (절대 위치) | sin/cos로 각 위치를 고유 벡터로 | Original Transformer |
| Learned positional | 위치 embedding을 학습 | BERT, GPT-2 |
| RoPE (Rotary) | 회전 행렬을 Q·K에 적용. 상대 위치 자연스럽게 표현 | LLaMA, Mistral, Qwen 표준 |
| ALiBi | attention score에 거리 비례 페널티 | BLOOM, MPT |
| NoPE | 위치 정보 없이도 학습. 일부 long-context 모델에서 실험 | 일부 연구 |
RoPE가 LLM 표준인 이유: long-context 외삽이 잘 되고(특히 NTK-aware/YaRN scaling 결합), 추가 파라미터 없음. Llama 3.1·128K context도 RoPE 변형.
LLM 1개 layer는 다음 둘로 구성:
x' = x + Attention(LayerNorm(x)) # attention sub-layery = x' + FFN(LayerNorm(x')) # FFN sub-layerTransformer 계열을 고를 때는 “입력을 이해할 것인가, 다음 토큰을 생성할 것인가, 입력과 출력을 분리할 것인가”로 먼저 나눈다.
전체 입력을 양방향으로 읽고 문장·토큰 표현을 만든다. 생성보다는 이해와 분류에 강하다.
분류, 임베딩, NER처럼 입력 전체를 보고 판단할 때causal mask로 다음 토큰을 예측한다. prompt 하나로 다양한 작업을 표현하기 쉬워 현대 LLM의 기본형이다.
chat, completion, tool call처럼 텍스트를 계속 생성할 때입력 이해 encoder와 출력 생성 decoder를 분리하고 cross-attention으로 연결한다.
번역·요약처럼 입력과 출력의 역할이 명확히 나뉠 때Decoder-only가 LLM 표준이 된 이유:
decoder-only는 미래 토큰을 보면 안 된다 (next-token prediction이 cheat가 됨). attention 행렬의 상삼각을 -inf로 마스킹 → softmax 후 0이 됨.
attention scores (n=4):[A, -inf, -inf, -inf][B, C, -inf, -inf][D, E, F, -inf][G, H, I, J ]i번째 토큰은 0~i 토큰만 참고 → 학습 시 모든 위치 동시 계산 가능 (teacher forcing).
학습 시에는 모든 토큰을 한 번에 처리하지만, inference 시에는 한 토큰씩 생성한다. 매 토큰마다 attention 전체를 재계산하면 O(n²) 비용 — 그래서 K, V를 캐시.
KV cache 메모리 = 2 × num_layers × num_kv_heads × seq_len × d_head × bytes_per_param
(2 = K와 V, num_kv_heads는 GQA·MQA에서 num_heads와 다름)LLaMA-3-8B 예시 (32 layers, num_kv_heads=8 (GQA), 128 d_head, fp16):
2 × 32 × 8 × seq_len × 128 × 2 = 131072 × seq_len bytes ≈ seq_len × 0.125MB→ 2k context = 0.25GB, 32k context = ~4GB, 128k context = ~16GB. KV cache가 long-context inference 메모리의 대부분. (GQA 미반영하고 query head 32로 계산하면 자릿수가 4배 틀림 — 운영 견적의 흔한 오류.)
퀴즈
힌트: 캐시에 저장되는 것은 Q가 아니라 K와 V다.
GQA/MQA에서는 여러 query head가 같은 K,V를 공유하므로 cache는 query head 수가 아니라 K,V head 수에 비례한다. query head로 계산하면 메모리 견적이 몇 배 부풀거나 운영 판단이 틀어진다.
attention의 메모리 병목은 HBM ↔ SRAM 데이터 이동이지 연산이 아님. FlashAttention(Dao 2022)은:
Context length를 늘리면 attention이 O(n²)으로 비싸진다. 운영 기법들:
운영자에게 가장 직접적인 비용 절감 기법.
이 네 기법이 함께 적용되면 같은 GPU에서 처리량이 5~10배까지 늘어난다 (vLLM 기준).
활성화될 expert를 동적으로 선택해 active parameter < total parameter. 추론 비용 절감.
→ “트랜스포머”는 LLM 전용 아키텍처가 아니라 보편 sequence/set 처리 도구.
| 기법 | 효과 발휘 범위 | 깨지는 조건 |
|---|---|---|
| GQA (group=8) | 8B~70B, KV cache 핵심 | <1B 모델은 효과 미미, group=1(MQA)은 품질 손실 |
| MQA | 추론 throughput 우선 | 품질 4~7% 하락 (long-context 작업) — Voyage 보고 |
| Sliding Window (W=4k) | local context 작업 | long-range dependency 필요 작업에서 정확도 폭락 |
| RoPE scaling 4× | 4× extension | factor 8× 이상은 fine-tune 없이 품질 폭락 |
| Speculative decoding | output token 多 (>100) | output 짧으면 (<20 tok) 오버헤드만 늘어남 |
| Prefix caching | 같은 prefix 재사용 多 | prefix 자주 변경되면 cache miss로 비용↑ |
| MoE | 메모리 充·throughput 우선 | inference batch 1에선 expert 활용률 낮아 비효율 |
| FlashAttention | seq_len > 1k | seq_len < 256 짧은 작업은 SDPA로 충분 (오버헤드 X) |
운영자가 자주 만나는 트랜스포머 silent degradation.
| 증상 | 정량 시그널 | 원인 | 복구 |
|---|---|---|---|
| KV cache OOM | GPU memory >95%, batch 못 들임 | seq_len·batch 곱이 한도 초과 | batch↓, seq_len cap, paged attention(vLLM) |
| RoPE scaling 후 품질 폭락 | long-context perplexity ↑ 50%+ | factor 너무 큼 | YaRN으로 부드러운 보간, short fine-tune |
| Speculative draft 거부율↑ | acceptance rate <30% | draft 모델 품질 약함 | EAGLE-3로 교체, draft 모델 fine-tune |
| Prefix cache miss 폭증 | hit ratio <30% | system prompt 자주 변경 | prompt 구조 분리(고정 prefix + 동적 suffix) |
| MoE 활용 unbalance | 일부 expert 활성화율 >30% | routing 학습 부족 | auxiliary load balancing loss↑, fine-tune |
| Long-context 정확도 폭락 | NIAH 점수 50%+ 하락 | lost-in-middle 또는 RoPE 한계 | document order 재배치, RAG로 우회 |
attention의 핵심 — query-key 매칭 후 value 가중 합 — 은 다른 시스템에서도 반복되는 패턴.
| Attention 구성요소 | 일반 시스템 매핑 |
|---|---|
| Query (찾는 것) | DB query, 검색 쿼리, cache lookup key |
| Key (인덱스) | DB index, 검색 inverted index, hash key |
| Value (실제 데이터) | DB row, 검색 document, cache value |
Q K^T (유사도) | DB join condition, 검색 BM25/cosine |
| Softmax (정규화) | weighted vote, soft selection |
| Multi-head (병렬) | DB partitioning, 분산 인덱스, 다중 perspective |
| Causal mask | append-only log, time-series 미래 차단 |
| KV cache | session cache, streaming aggregation buffer |
일반 공식: “맞춤 검색 + 가중 결합”이 attention의 본질이고, 데이터 시스템 전반에 같은 패턴이 있다. 새 attention 변형(Linear, Sparse, Mamba 등)을 만났을 때도 이 4단계(Q·K·V·합산)로 분해해 분석.
상황: 사내 챗봇, P95 TTFT < 1s 요구, 동시 100 요청선택지 (LLaMA-3-8B 자체 호스팅): A. 단일 H100 80GB + vLLM: - KV cache 32k context = 4GB × 100 batch = 400GB → OOM! - context 4k로 제한 → KV cache ~50GB OK B. PagedAttention + continuous batching: - KV 단편화 60% → <4%, throughput 2~4× ↑ - 동시 100 요청 가능, P95 TTFT ~800ms C. Speculative decoding (EAGLE-3) 추가: - output token latency 2~3× ↓ → P95 TTFT ~400ms - draft 모델 추가 메모리 ~2GB
선택: B + C. context 4k + PagedAttention + Spec dec.대안 비선택: A 단독은 throughput 약함, C 단독은 메모리 효과 X.결과 (가상): P95 TTFT 350ms, throughput 80 req/s.§3.8 KV cache + §3.10 long-context + §3.11 추론 최적화 + §3.13 깨지는 조건 모두 적용.
플랫폼 엔지니어가 LLM 운영할 때 트랜스포머 직관이 다음에 도움 된다.
| 개념 A | 개념 B | 차이점 |
|---|---|---|
| Self-attention | Cross-attention | 같은 sequence 안 vs 다른 두 sequence (encoder-decoder) |
| Multi-head | Single-head | 병렬 다중 패턴 vs 단일 표현 |
| Encoder-only | Decoder-only | 양방향 vs 단방향(causal). LLM은 후자 |
| Sinusoidal vs RoPE | Learned positional | 절대·고정 vs 회전·상대 vs 학습 가중치 |
| MHA / MQA / GQA | head별 KV 분리 / 모두 공유 / group 공유. cache 메모리 차이 | |
| Dense | MoE | 전체 활성화 vs 일부 expert 활성화 (active < total) |
| KV cache | activation memory | inference 캐시 vs 학습 backward용 forward 결과 저장 |
| FlashAttention | Sparse Attention | 정확한 attention의 IO 최적화 vs 일부 attention 생략 |
| Prefill | Decode | input 병렬 처리 vs output 순차 1토큰씩 |
| Transformer | Mamba / SSM | O(n²) attention vs O(n) state space. 새 후보군 |
transformers에서 같은 prompt를 use_cache=True/False로 generate해 시간 비교. 예상: cache off가 5~10배 느림torch.cuda.memory_allocated()) 비교. 예상: 선형 증가 (2k당 ~1GB)transformers로 RoPE scaling(rope_scaling={"type": "yarn", "factor": 4.0}) 적용 모델로 32k 입력 처리softmax(QK^T/√d_k)V로 토큰 간 관계를 동적으로 계산한다.최종 수정: 2026-04-26