오픈 모델 — 아키텍처 둘러보기 (Open Models: Architecture Walkthroughs)
Lesson 04에서 GPT-2 Small을 처음부터 직접 만들었습니다. 2026년의 최전선 오픈 모델(frontier open model)도 같은 계열에 속하며, 구체적으로는 다섯 가지 또는 여섯 가지 변화가 더해진 형태입니다. LayerNorm 대신 RMSNorm, GELU 대신 SwiGLU, 학습된 위치 임베딩(learned position embedding) 대신 RoPE, 완전한 MHA 대신 GQA 또는 MLA, 대규모에서는 전문가 혼합(Mixture-of-Experts, MoE)을 사용합니다. 이미 배운 수학으로 이 구조의 95%를 설명할 수 있습니다. 이 lesson에서는 Llama 3, DeepSeek-V3, Mixtral, Qwen, Gemma를 나란히 읽고, 각 아키텍처가 어느 줄에서 달라지는지 정확히 이름 붙입니다.
유형: Learn
언어: Python (표준 라이브러리)
선수 지식: Phase 10, Lesson 04, 05, 12 (사전학습, 스케일링, 추론)
예상 시간: 약 45분
학습 목표
- Llama 3, Mistral, Mixtral, Gemma 2, Qwen 2.5, DeepSeek-V3의
config.json을 읽고 모든 필드를 설명합니다.
- GPT-2 Small과 비교했을 때 각 모델이 바꾼 구체적인 아키텍처 변화를 이름 붙이고, 그 이유를 기본 원리에서 정당화합니다.
- 설정(config)만 보고 어떤 오픈 모델이든 매개변수 수(parameter count), KV 캐시(KV cache) 크기, 활성화 메모리(activation memory)를 계산합니다.
- 지연 시간(latency), 메모리(memory), 성능(capability) 제약이 주어진 배포 대상에 맞는 오픈 모델을 고릅니다.
문제
Lesson 04에서는 NumPy 코드 350줄로 GPT-2 형태의 모델을 만들었습니다. Llama 3 405B에는 200쪽짜리 기술 보고서가 있습니다. 본능적으로 이 둘은 완전히 다른 존재처럼 느껴질 수 있습니다. 하지만 그렇지 않습니다. 그 200쪽은 같은 객체를 다섯 가지 또는 여섯 가지 근거가 잘 잡힌 수정으로 설명하고, 여기에 스케일링을 위한 수많은 구현 세부사항을 더한 것입니다. 임베딩(embedding), 트랜스포머 블록(transformer block), 어텐션(attention), MLP, 정규화(norm), 헤드(head)라는 뼈대는 바뀌지 않습니다.
이 lesson은 차이(diff)를 읽는 과정입니다. 주요 오픈 모델 계열마다 GPT-2에서 정확히 무엇이 바뀌었는지, 왜 바뀌었는지, 그 대가가 무엇인지 나열합니다. 끝까지 마치면 새로운 모델 카드(model card)를 읽고 머릿속에서 GPT-2 기준선(baseline)으로 되돌려 번역할 수 있습니다.
실용적인 보상은 분명합니다. Meta가 Llama 5를 공개하거나 DeepSeek이 V4를 공개해도, 완전히 새로운 사고 모형(mental model)이 필요하지 않습니다. 설정을 보고 잘 알려진 설계 다이얼(knob) 중 어느 것이 움직였는지 확인하면, 그 아래쪽에 어떤 영향이 따라오는지 알 수 있습니다. 2026년의 아키텍처는 유한한 도구상자입니다. 새로운 모델은 그중 서로 다른 부분집합을 고릅니다.
개념
변하지 않는 핵심 구조
모든 자기회귀(autoregressive) 오픈 모델은 다음을 공유합니다.
- 토큰 임베딩 행렬(token embedding matrix):
vocab_size x hidden_dim.
- N개의 디코더 블록(decoder block) 스택: 정규화(norm), 자기어텐션(self-attention), 잔차 연결(residual), 정규화(norm), MLP, 잔차 연결(residual).
- 최종 정규화(final norm)와
vocab_size로 투영하는 선형 헤드(linear head). 임베딩과 가중치를 공유(weight tying)하는 경우도 많습니다.
- 인과 마스크(causal mask), 다음 토큰 교차 엔트로피 손실(next-token cross-entropy loss).
이것이 골격입니다. 나머지는 조절 가능한 다이얼(knob)입니다.
실제로 움직이는 여섯 가지 다이얼
2024년부터 2026년까지의 모든 최전선 오픈 모델에서는 같은 여섯 가지 설계 선택이 반복해서 등장합니다.
- 정규화(Normalization). LayerNorm -> RMSNorm.
- 위치 인코딩(Positional encoding). 학습된 절대 위치(learned absolute) -> RoPE. 변형으로 YaRN, NTK가 있습니다.
- 활성화 함수(Activation). GELU -> SwiGLU 또는 GeGLU.
- 어텐션 헤드 공유(Attention head sharing). MHA -> GQA -> MQA -> MLA.
- 밀집 MLP와 희소 MLP(Dense vs sparse MLP). Dense -> 전문가 혼합(Mixture-of-Experts).
- Pre-norm 배치(Pre-norm placement). Pre-norm은 유지되고, Post-norm은 사라졌습니다.
그 외의 학습률 스케줄(learning rate schedule), 데이터 혼합(data mix), 배치 크기(batch size), 문맥 길이(context length)는 아키텍처가 아니라 학습 설정(training config)에 속합니다. 결국 핵심은 여섯 개의 다이얼입니다.
Knob 1: RMSNorm
LayerNorm은 평균을 빼고, 표준편차로 나누고, 스케일을 곱하고, 이동(shift)을 더합니다. RMSNorm은 스케일만 남깁니다.
RMSNorm(x) = x / sqrt(mean(x^2) + eps) * gamma
평균 제거(mean subtraction)가 없습니다. 바이어스(bias)도 없습니다. 토큰마다 행렬곱 하나가 줄어듭니다. Zhang과 Sennrich(2019)는 RMSNorm이 기계 번역(machine translation)에서 LayerNorm과 비슷한 품질을 내면서 10% 더 빠르다고 주장했습니다. 현대 오픈 모델은 모두 RMSNorm을 사용합니다.
비용은 사실상 없습니다. 이득은 작은 처리량(throughput) 향상과 더 단순한 코드입니다.
Knob 2: RoPE
GPT-2의 학습된 위치 임베딩(learned position embedding)은 1024칸짜리 조회 테이블(lookup table)이었습니다. 1025번째 위치는 이미 테이블 끝을 벗어납니다. 그래서 모델은 학습 길이(training length)를 넘어서는 외삽이 어렵습니다.
회전 위치 임베딩(Rotary Position Embedding, RoPE, Su et al. 2021)은 어텐션 점곱(attention dot product)을 계산하기 전에 각 Q 벡터와 K 벡터를 쌍(pair) 단위로 회전시켜 위치를 주입합니다. 회전 각도는 위치의 결정적 함수(deterministic function)이므로 학습되는 값도 없고, 고갈될 테이블도 없습니다. NTK-aware 보간(interpolation), YaRN 같은 스케일링 기법을 쓰면 8k 문맥으로 학습한 모델도 추론 시 128k까지 늘릴 수 있으며, 정확도 손실은 비교적 작습니다.
q_rotated = rotate(q, angle(pos))
k_rotated = rotate(k, angle(pos))
score = q_rotated . k_rotated
Llama, Mistral, Qwen, DeepSeek, Gemma는 모두 RoPE를 사용합니다. Gemma 2는 하이브리드 구조를 사용합니다. 대부분의 층에는 RoPE를 쓰고, 일부 층에는 지역 슬라이딩 윈도우 어텐션(local sliding-window attention)을 사용합니다.
Knob 3: SwiGLU
GPT-2의 MLP는 x -> gelu(xW1 + b1) -> (...)W2 + b2 형태입니다. SwiGLU(Shazeer 2020)는 활성화 함수를 게이트 곱(gated product)으로 바꿉니다.
SwiGLU(x) = (xW1) * sigmoid(xW1) * xV
하나의 투영(projection) 대신 두 개의 투영을 병렬로 두고, Swish 활성화로 게이트를 겁니다. 경험적으로 매개변수당 perplexity가 더 좋습니다. Llama 2가 SwiGLU를 채택했고, 이후 모델들이 따라왔습니다. MLP의 은닉 크기(hidden size)는 보통 전체 매개변수 수가 기존 밀집 MLP와 맞도록 설정합니다. GPT-2가 ff_dim = 4 * hidden을 썼다면, SwiGLU는 ff_dim = (2/3) * 4 * hidden = 8/3 * hidden을 사용합니다.
Knob 4: 어텐션 헤드 공유
GPT-2는 다중 헤드 어텐션(Multi-Head Attention, MHA)을 사용했습니다. 모든 헤드가 자기만의 Q, K, V 투영을 가집니다.
다중 쿼리 어텐션(Multi-Query Attention, MQA, Shazeer 2019)은 모든 헤드가 하나의 K와 하나의 V를 공유합니다. 일반적인 모델에서 KV 캐시를 헤드 수만큼 줄이므로 12배에서 32배까지 감소할 수 있습니다. 다만 어려운 벤치마크에서는 정확도가 조금 떨어집니다.
그룹 쿼리 어텐션(Grouped-Query Attention, GQA, Ainslie et al. 2023)은 중간 지점입니다. G개의 Q 헤드 그룹이 하나의 K와 하나의 V를 공유합니다. Llama 3 8B는 Q 헤드 32개와 KV 헤드 8개의 GQA를 사용하므로, 완전한 MHA에 비해 KV 캐시가 4배 작아집니다.
다중 헤드 잠재 어텐션(Multi-Head Latent Attention, MLA, DeepSeek 2024)은 K와 V를 공유 저랭크 잠재 표현(low-rank latent)으로 압축한 뒤, 헤드마다 다시 확장합니다. KV 캐시를 더 줄이면서도 헤드별 표현력(per-head expressiveness)을 보존합니다. DeepSeek-V2와 V3는 긴 문맥 성능을 위해 MLA에 크게 의존합니다.
| 방식 | KV 헤드 | KV 캐시 | 정확도 |
|---|
| MHA | num_heads | 전체 | 가장 좋음 |
| GQA | num_groups (G < num_heads) | num_heads / G만큼 감소 | MHA에 가까움 |
| MQA | 1 | num_heads만큼 감소 | 작은 손실 |
| MLA | 잠재 표현, 헤드별 복원 | MQA보다 작음 | MHA에 가까움 |
약 13B 매개변수 이상의 모델에서는 GQA나 MLA가 사실상 필수입니다. 대규모에서 완전한 MHA는 KV 캐시 측면에서 감당하기 어렵습니다.
Knob 5: 전문가 혼합
밀집 MLP(dense MLP)는 모든 토큰에 대해 모든 매개변수를 활성화합니다. 전문가 혼합(Mixture-of-Experts, MoE) MLP는 블록마다 K개의 전문가(expert)를 두고, 라우터(router)가 토큰마다 상위 k개 전문가를 고릅니다. 보통 top-2를 사용합니다. 해당 토큰의 순전파(forward pass)에서는 선택된 전문가의 가중치만 사용됩니다.
router_logits = xW_r
indices, weights = top_k(router_logits, k=2)
output = sum_i weights[i] * expert[indices[i]](x)
매력은 분명합니다. 7B 크기의 전문가 64개를 둘 수 있으므로 전체 매개변수 수는 매우 커지지만, 토큰마다 그중 2개만 실행하므로 토큰당 계산량은 밀집 7B 모델과 비슷하게 유지됩니다. Mixtral 8x7B는 전체 매개변수 47B를 가지지만 토큰마다 13B만 활성화합니다. DeepSeek-V3는 전체 매개변수 671B를 가지지만 토큰마다 37B만 활성화합니다.
graph LR
I["토큰 은닉 상태"] --> R["라우터\n(선형 -> 소프트맥스)"]
R --> T["Top-k 선택"]
T --> E1["전문가 1\n(MLP)"]
T --> E2["전문가 2\n(MLP)"]
T --> EN["전문가 64\n(MLP, 미사용)"]
E1 --> S["가중합"]
E2 --> S
S --> O["출력"]
style EN fill:#eeeeee,stroke:#999,color:#999
style E1 fill:#1a1a2e,stroke:#51cf66,color:#fff
style E2 fill:#1a1a2e,stroke:#51cf66,color:#fff
style R fill:#1a1a2e,stroke:#e94560,color:#fff
장점은 같은 계산량으로 더 많은 매개변수와 더 큰 용량(capacity)을 얻는 것입니다. 단점은 전문가 메모리가 어딘가에는 올라가 있어야 하므로, 서빙(serving)에는 밀집 모델 등가물보다 더 많은 VRAM이 필요하다는 점입니다. 라우터 부하 균형(load balancing)도 어렵고, 정렬(alignment) 중에 라우터를 미세조정(fine-tuning)하는 것 자체가 별도의 연구 주제입니다.
Knob 6: Pre-norm은 유지됩니다
원래 트랜스포머는 각 하위층(sublayer) 뒤에 layer norm을 적용했습니다. GPT-2 이후의 모든 오픈 모델은 각 하위층 앞에 정규화를 둡니다. Pre-norm은 깊은 모델을 학습하기 훨씬 쉽습니다. 이 부분은 더 논쟁할 것이 거의 없습니다.
모델별 차이
다음 표는 위 내용을 구체적으로 보여줍니다.
| 모델 | 연도 | 전체 매개변수 | 활성 매개변수 | 정규화 | 활성화 | 위치 | 어텐션 | MoE | 문맥 |
|---|
| GPT-2 Small | 2019 | 124M | 124M | LayerNorm | GELU | Learned | MHA (12 heads) | 아니요 | 1k |
| Llama 3 8B | 2024 | 8B | 8B | RMSNorm | SwiGLU | RoPE | GQA (32/8) | 아니요 | 128k |
| Llama 3 70B | 2024 | 70B | 70B | RMSNorm | SwiGLU | RoPE | GQA (64/8) | 아니요 | 128k |
| Llama 3 405B | 2024 | 405B | 405B | RMSNorm | SwiGLU | RoPE | GQA (128/16) | 아니요 | 128k |
| Mistral 7B | 2023 | 7.2B | 7.2B | RMSNorm | SwiGLU | RoPE | GQA | 아니요 | 32k |
| Mixtral 8x7B | 2023 | 47B | 13B | RMSNorm | SwiGLU | RoPE | GQA | 예 (전문가 8개, top-2) | 32k |
| Gemma 2 9B | 2024 | 9B | 9B | RMSNorm (pre+post) | GeGLU | RoPE + sliding | GQA | 아니요 | 8k |
| Qwen 2.5 72B | 2024 | 72B | 72B | RMSNorm | SwiGLU | RoPE (YaRN) | GQA (64/8) | 아니요 | 128k |
| DeepSeek V2 236B | 2024 | 236B | 21B | RMSNorm | SwiGLU | RoPE | MLA | 예 (전문가 160개, top-6) | 128k |
| DeepSeek V3 | 2024 | 671B | 37B | RMSNorm | SwiGLU | RoPE | MLA | 예 (전문가 256개, top-8) | 128k |
열을 훑어보면 패턴이 보입니다. RMSNorm은 보편적입니다. SwiGLU 또는 그 사촌인 GeGLU도 보편적입니다. RoPE도 보편적입니다. 7B보다 큰 모델에서는 GQA가 보편적이며, MLA로 대체되는 경우만 예외입니다. 상위권에서는 MoE가 차별점입니다.
config.json 읽기
Llama 3 8B 설정은 다음과 같습니다.
{
"hidden_size": 4096,
"intermediate_size": 14336,
"num_hidden_layers": 32,
"num_attention_heads": 32,
"num_key_value_heads": 8,
"max_position_embeddings": 131072,
"rope_theta": 500000.0,
"rms_norm_eps": 1e-5,
"vocab_size": 128256
}
모든 필드는 이미 구현해 본 개념에 대응합니다.
hidden_size: 임베딩 차원(embedding dimension)입니다.
intermediate_size: MLP 은닉 크기입니다. 여기서는 은닉 차원의 약 3.5배이며, SwiGLU 계산 방식과 연결됩니다.
num_hidden_layers: 스택 깊이(stack depth)입니다.
num_attention_heads: Q 헤드 수입니다.
num_key_value_heads: KV 헤드 수입니다. GQA를 나타냅니다.
max_position_embeddings: 학습 문맥 길이(training context length)입니다.
rope_theta: RoPE 기본 주파수(base frequency)입니다. Meta는 긴 문맥 외삽(long-context extrapolation)을 위해 기본값 10k를 500k로 키웠습니다.
rms_norm_eps: 수치 안정성(numerical stability)을 위한 값입니다.
vocab_size: 토큰 수입니다.
이 필드만으로도 전체 매개변수, KV 캐시, 최대 활성화 메모리를 계산할 수 있습니다. 정확한 공식은 code/main.py를 확인합니다.
활성화 메모리 예산
수십억 매개변수를 넘는 모델에서는 학습 메모리 중 활성화(activation)가 큰 비중을 차지합니다. 그래디언트 체크포인팅(gradient checkpointing)을 사용하는 사전학습에서는 다음을 경험칙으로 봅니다.
activation_mem ~ batch_size * seq_len * hidden_size * num_layers * bytes_per_element
Llama 3 8B에서 batch 1, seq 8192, BF16, 32 layers, hidden 4096이라면, 체크포인팅을 사용해도 활성화만 대략 8GB가 필요합니다. 체크포인팅이 없으면 약 40GB가 필요합니다. 이것이 FlashAttention과 ring-attention이 중요한 이유입니다. 이들은 어텐션 계산을 다시 써서 활성화가 메모리에 들어가도록 만듭니다.
KV 캐시 예산
최대 문맥에서 추론할 때는 다음과 같이 계산합니다.
kv_cache = 2 * num_layers * num_kv_heads * head_dim * max_seq_len * bytes_per_element
Llama 3 8B를 128k 문맥, BF16, head_dim = hidden / num_heads = 128로 놓으면 다음과 같습니다.
2 * 32 * 8 * 128 * 131072 * 2 = 17.2 GB
이는 시퀀스 하나당 필요한 KV 캐시입니다. 8B 가중치는 BF16에서 16GB입니다. 단일 128k 시퀀스의 KV 캐시가 가중치보다 더 큽니다. 이 메모리 압력이 GQA, MLA, KV 캐시 양자화(KV cache quantization) 연구를 밀어붙이고 있습니다.
어떤 상황에서 어떤 모델이 이기는가
- 단일 80GB GPU, MoE 없음: Llama 3 8B, Mistral 7B, Gemma 2 9B. 서빙이 쉽고 도구 지원이 넓습니다.
- 단일 노드(8x80GB), 큰 용량: Llama 3 70B, Qwen 2.5 72B. 가장 높은 밀집 오픈 모델 성능을 기대할 수 있습니다.
- 가장 큰 오픈 모델 성능, MoE 복잡성 허용: DeepSeek V3, Mixtral 8x22B. 활성 FLOP당 성능이 좋습니다.
- 긴 문맥 요구: Llama 3는 RoPE 스케일링으로 128k 문맥을 지원하고, DeepSeek은 MLA 장점이 있습니다.
- 낮은 지연 시간 서빙: Gemma 2 9B. 슬라이딩 윈도우(sliding window)가 긴 문맥 계산을 줄입니다.
직접 만들기
이 lesson의 코드는 계산기입니다. 어떤 config.json이든 입력하면 구성요소별 매개변수 수, 최대 문맥에서의 KV 캐시, SwiGLU MLP 비율, 아키텍처에 대한 짧은 판정(dense / GQA / MLA / MoE)을 출력합니다.
config = {
"hidden_size": 4096, "intermediate_size": 14336,
"num_hidden_layers": 32, "num_attention_heads": 32,
"num_key_value_heads": 8, "vocab_size": 128256,
"max_position_embeddings": 131072,
}
스크립트는 아키텍처 필드를 하나씩 읽으면서 임베딩(embedding), 어텐션(attention, GQA 감소 포함), MLP(SwiGLU 확장 포함), layer norm, head의 매개변수 수를 계산합니다. 그런 다음 지정된 문맥 길이에서 KV 캐시를 계산하고 요약을 출력합니다.
구현은 code/main.py를 확인합니다.
사용해보기
스크립트에 포함된 Llama 3 8B, Mistral 7B, Mixtral 8x7B, DeepSeek V3 설정으로 계산기를 실행합니다. 매개변수 분해(parameter breakdown)를 비교합니다. MoE 모델은 전체 매개변수 수가 밀집 모델보다 훨씬 크지만, 활성 매개변수 수는 오히려 더 작은 경우가 많다는 점을 확인합니다. DeepSeek V3는 전체 매개변수가 더 많음에도 Llama 3 405B보다 KV 캐시가 작습니다. 이것이 MLA가 작동하는 방식입니다.
그다음 로컬에 있는 아무 모델의 설정을 넣고, 요약을 읽고, 자신의 GPU에 맞는지 판단합니다.
산출물 만들기
이 lesson은 outputs/skill-open-model-picker.md를 만듭니다. 배포 대상(GPU 종류, VRAM, 문맥 길이, 지연 시간 예산)과 작업 프로필(채팅, 코드, 추론, 긴 문맥)을 주면, Lesson 11의 양자화(quantization) 방식과 Lesson 12의 추론 스택(inference stack)을 함께 고려하여 오픈 모델을 추천합니다. 추천 이유는 여섯 가지 아키텍처 다이얼을 기준으로 명시합니다.
연습문제
-
HuggingFace에서 Qwen 2.5 72B 설정을 읽습니다. 전체 매개변수 수를 처음부터 계산합니다. HuggingFace가 보고한 값과 비교하고, 차이가 있다면 어디에서 오는지 찾습니다. 예를 들면 헤드 차원 반올림(head dim rounding), KV 공유 계수(KV sharing factor) 등이 있습니다.
-
DeepSeek V3는 전문가 256개와 top-8 라우팅을 사용합니다. 전체 전문가 대비 활성화되는 전문가 비율을 계산하고, Mixtral 8x7B의 8개 중 top-2와 비교합니다. 희소(sparse) 25%에서 더 조밀한 희소(denser sparse) 3%로 바뀐다는 것은 FLOP당 용량(capacity per FLOP)에 대해 무엇을 의미할까요?
-
128k 문맥에서 Llama 3 405B의 KV 캐시를 FP8과 BF16으로 계산합니다. FP8에서는 BF16의 절반입니다. 단일 8xH100 노드(각 80GB, 총 640GB, 가중치 메모리 제외)에서 몇 개의 병렬 시퀀스를 서빙할 수 있을까요?
-
Gemma 2는 완전 어텐션(full-attention) 층과 슬라이딩 윈도우 어텐션(sliding-window-attention) 층을 번갈아 사용합니다. 전체 문맥 대신 절반의 층이 4096 토큰 슬라이딩 윈도우를 사용할 때의 KV 캐시 수식을 작성합니다. 전체 문맥이 8k일 때 메모리를 얼마나 절약하나요?
-
이 lesson이 작성된 뒤 공개된 최근 최전선 오픈 모델을 찾습니다. 여섯 가지 다이얼 중 무엇을 선택했는지, 일곱 번째 다이얼을 새로 도입했는지 식별합니다. 새로운 아키텍처가 나오는 순간 커리큘럼은 낡아 보일 수 있습니다. 목표는 사고 모형을 다시 만드는 것이 아니라 표를 갱신하는 것입니다.
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| RMSNorm | "평균을 빼지 않는 LayerNorm" | 제곱평균제곱근(root mean square)만으로 정규화하고 학습된 스케일을 곱합니다. LayerNorm보다 저렴하면서 비슷한 품질을 냅니다. |
| RoPE | "회전 위치" | 각 Q와 K 벡터를 위치에 따라 정해지는 각도로 2차원 쌍 단위 회전합니다. 스케일링 기법을 쓰면 학습 길이를 넘어 외삽할 수 있습니다. |
| SwiGLU | "새로운 MLP 활성화" | Swish를 사용하는 게이트 선형 유닛(gated linear unit)입니다. (xW1) * sigmoid(xW1) * xV 형태이며 2024년 이후 오픈 모델의 표준입니다. |
| GQA | "중간 지점 어텐션" | 그룹 쿼리 어텐션(Grouped-Query Attention)입니다. 여러 Q 헤드 그룹이 하나의 K와 V 헤드를 공유해 MQA의 정확도 손실 없이 KV 캐시를 줄입니다. |
| MLA | "DeepSeek의 어텐션" | 다중 헤드 잠재 어텐션(Multi-Head Latent Attention)입니다. K/V를 공유 저랭크 잠재 표현으로 압축하고 헤드별로 복원해 대형 모델의 KV 캐시를 크게 줄입니다. |
| MoE | "희소 전문가" | 전문가 혼합(Mixture of Experts)입니다. 블록마다 N개의 MLP를 두고 라우터가 토큰마다 top-k를 고릅니다. 전체 매개변수는 크지만 활성 매개변수는 작습니다. |
| Top-k 라우팅(Top-k routing) | "토큰마다 k개 전문가 선택" | 라우터가 전문가별 점수를 계산하고 가장 높은 k개만 활성화합니다. 보통 Mixtral은 2, DeepSeek은 8을 사용합니다. |
| YaRN | "RoPE 늘리기" | Yet another RoPE extension입니다. 회전 각도를 보간해 추론 시 문맥을 8k에서 128k 이상으로 확장합니다. |
| 슬라이딩 윈도우 어텐션(Sliding-window attention) | "모든 토큰에 주의를 두지(attend) 않기" | 각 토큰이 최근 W개 토큰에만 주의를 둡니다(attend). 토큰당 어텐션 비용을 O(W)로 제한하며 Gemma 2와 초기 Mistral에서 사용됩니다. |
| 활성 매개변수(Active params) | "토큰마다 실제로 실행되는 것" | MoE 모델에서 토큰 하나의 순전파에 참여하는 매개변수 수입니다. 전체 매개변수보다 훨씬 작고, 토큰당 FLOP를 좌우합니다. |
더 읽을거리
- Dubey et al., 2024 -- "The Llama 3 Herd of Models" -- 밀집 Llama 3 계열의 아키텍처와 학습 기준 자료입니다.
- DeepSeek-AI, 2024 -- "DeepSeek-V3 Technical Report" -- MLA, 보조 손실 없는 부하 균형(auxiliary-loss-free load balancing), 671B MoE를 설명합니다.
- Jiang et al., 2024 -- "Mixtral of Experts" -- 대표적인 MoE 오픈 모델 논문입니다.
- Su et al., 2021 -- "RoFormer: Enhanced Transformer with Rotary Position Embedding" -- RoPE 원 논문입니다.
- Shazeer, 2020 -- "GLU Variants Improve Transformer" -- SwiGLU, GeGLU와 관련 변형을 다룹니다.
- Ainslie et al., 2023 -- "GQA: Training Generalized Multi-Query Transformer Models" -- GQA 논문입니다.
- Gemma 2 Team, 2024 -- "Gemma 2: Improving Open Language Models at a Practical Size" -- 완전 어텐션과 슬라이딩 어텐션의 하이브리드, pre+post norm을 다룹니다.
- Qwen Team, 2024 -- "Qwen 2.5 Technical Report" -- YaRN 문맥 확장과 긴 문맥 학습 레시피를 설명합니다.