How to Train Your GPT 소개
언어 모델을 배우려고 자료를 찾다 보면 두 부류로 갈립니다. 한쪽은 라이브러리 호출 몇 줄로 학습을 끝내서 내부에서 무슨 일이 일어나는지 알려주지 않고, 다른 한쪽은 논문 수준의 표기법으로 시작해 선형대수 기초가 없으면 첫 페이지에서 막힙니다. 특히 어텐션(Attention)은 "쿼리와 키의 내적을 구한다"는 설명까지는 따라가도, 왜 \sqrt{d_k} 로 나누는지, 인과 마스크가 정확히 어느 시점에 적용되는지를 스스로 설명할 수 있는 상태로 넘어가기가 어렵습니다.
How to Train Your GPT는 그 간극을 메우려고 만들어진 학습용 저장소입니다. 12개 장, 7,500줄이 넘는 분량의 대화형 교재와 함께 RoPE, 어텐션, RMSNorm, SwiGLU, KV 캐시, AdamW, 혼합 정밀도 같은 개별 기법을 다루는 28개의 독립 해설 문서가 들어 있습니다. 모든 코드에 그 줄이 무엇을 하는지(WHAT)와 왜 필요한지(WHY)를 함께 주석으로 붙여 두었고, 토크나이저부터 임베딩, 어텐션, 학습 루프, 추론 엔진까지 독자가 직접 작성하도록 구성했습니다. 저자는 저장소 첫머리에서 자신이 완전히 이해하지 못했던 부분, 특히 어텐션을 제대로 알기 위해 이 자료를 만들었다고 밝히고 있습니다.
구현 대상은 GPT-2 시절 구조가 아니라 공개적으로 문서화된 최신 디코더 전용 트랜스포머입니다. LLaMA 3와 Mistral, Qwen 계열이 사용하는 RoPE, RMSNorm, SwiGLU, 사전 정규화(Pre-Norm)를 그대로 따라가며, 사전 지식은 파이썬 기초만 요구합니다. 본 게시물에서는 이 교재가 어떤 순서로 진행되는지, 실제 구현 코드가 어떤 모습인지, 그리고 어떤 환경에서 돌려볼 수 있는지를 정리합니다.
기존 학습 자료와 How to Train Your GPT의 차이
저자는 대부분의 머신러닝 튜토리얼이 두 함정 중 하나에 빠진다고 정리하면서, 이 교재의 위치를 다음처럼 설명합니다.
| 항목 | 얕은 튜토리얼 | 학술적 자료 | How to Train Your GPT |
|---|---|---|---|
| 설명 방식 | model = GPT().fit(data) |
40쪽짜리 논문과 촘촘한 표기법 | 쉬운 비유에서 시작해 동작하는 코드까지 |
| 요구 배경 | API 호출법만 익힘 | 머신러닝 전공 수준 | 머신러닝 경험 없이 파이썬 기초만 |
| 어텐션 설명 | "어텐션은 모델이 집중하도록 돕습니다" | 수식 위주 | 실제 숫자를 넣은 8단계 계산과 분산 논증 |
| 학습 코드 | 기존 Trainer 클래스 사용 | 예제 없음 | AdamW, 코사인 워밍업, 혼합 정밀도, 그래디언트 누적을 직접 구현 |
| 추론 코드 | model.generate() 호출 |
다루지 않음 | 온도, top-k, top-p, 빔 서치, KV 캐시를 직접 구현 |
각 장은 네 단계 구조를 반복합니다. 먼저 일상 언어로 된 비유로 직관을 세우고, 실제 숫자를 넣은 계산 예시로 무슨 일이 일어나는지 보여준 다음, 줄마다 주석이 달린 코드를 제시하고, 마지막에 Mermaid 흐름도나 ASCII 다이어그램으로 데이터 흐름을 정리합니다. 코드에서 길을 잃으면 비유로 돌아가고 수식에서 막히면 계산 예시로 건너뛰라는 안내도 함께 있습니다.
How to Train Your GPT는 누구에게 유용한가
파이썬은 쓸 줄 알지만 트랜스포머 내부를 한 번도 직접 열어보지 못한 개발자에게 가장 잘 맞습니다. 다른 튜토리얼에서 어텐션 부분을 읽다 막힌 경험이 있다면 8단계 계산 예시가 그 지점을 다시 짚어 줍니다. 반대로 이미 프로덕션 모델을 학습해 본 엔지니어라면 새로 얻을 내용이 제한적이고, 저자 스스로 학습 목적으로 만든 자료임을 밝히고 있으므로 실서비스용 학습 코드로 가져다 쓰기에는 적합하지 않습니다. 저장소 배지에도 용도가 학습용이라고 명시되어 있습니다. 3,500줄 규모의 주석 달린 코드를 읽을 각오가 필요하다는 점도 미리 알아 두면 좋습니다.
How to Train Your GPT가 안내하는 학습 경로
12개 장은 환경 준비에서 시작해 추론까지 한 줄기로 이어집니다.
| 장 | 다루는 내용 |
|---|---|
| 0. 개요 | GPT란 무엇인가, 전체 그림 |
| 1. 설정 | 도구 설치, GPU와 CPU, 가상 환경, 파이토치 기초 |
| 2. 토큰화 | BPE 과정, "unbelievably" 가 토큰으로 쪼개지는 방식 |
| 3. 임베딩 | 숫자가 의미가 되는 과정 |
| 4. 위치 인코딩 | RoPE, 위치를 더하지 않고 회전시키는 이유 |
| 5. 어텐션 | 쿼리·키·값, 스케일링, 인과 마스크의 8단계 계산 |
| 6. 트랜스포머 블록 | RMSNorm, SwiGLU, 잔차 연결, 사전 정규화와 사후 정규화 비교 |
| 7. 전체 GPT 모델 | 151M 파라미터 모델, 가중치 공유, 로짓 |
| 8. 학습 파이프라인 | 교차 엔트로피, 역전파, AdamW, 코사인 워밍업, 혼합 정밀도 |
| 9. 추론 | KV 캐시, 온도, top-k/p, 빔 서치, 반복 페널티 |
| 10. 전체 스크립트 | 한 파일로 실행하는 main.py |
| 11. 용어집 | 기법별 출처 표와 파라미터 분해 |
각 장에는 같은 이름의 주피터 노트북이 짝지어져 있습니다. 교재가 왜 그렇게 하는지를 설명한다면, 노트북은 설명을 걷어내고 위에서 아래로 실행되는 코드만 남겨 실제로 학습이 진행되는 모습을 보여줍니다. Colab용 학습 노트북도 준비되어 있어 로컬 GPU가 없어도 시도해 볼 수 있습니다.
How to Train Your GPT가 채택한 구성 요소
교재가 구현하는 기법과 그 출처는 chapters/11_glossary.md 의 표로 정리되어 있습니다. 주요 항목은 다음과 같습니다.
| 기법 | 출처 모델 | 저자가 설명하는 의미 |
|---|---|---|
| RoPE | LLaMA, Mistral, Qwen | 학습 파라미터 없이 상대 위치를 표현 |
| RMSNorm | LLaMA, Mistral, Gemma | LayerNorm보다 15% 빠르면서 효과는 동등 |
| SwiGLU | PaLM, LLaMA, Gemini | 어떤 정보를 통과시킬지 학습 |
| Pre-Norm | GPT-3 이후 대부분 | 100층 이상에서도 안정적인 학습 |
| 가중치 공유 | GPT-2, GPT-3 | 파라미터 30% 절약, 학습 신호 개선 |
| 혼합 정밀도 | 프로덕션 LLM 전반 | 2배 속도, 절반 메모리 |
저자는 GPT-4와 Claude의 구조가 공개되지 않았다는 점을 명시하면서, 이 교재는 공개적으로 확인 가능한 최신 구성인 LLaMA 3와 Mistral, Qwen 2.5 계열을 가르친다고 밝히고 있습니다.
How to Train Your GPT의 어텐션 구현
교재의 결론에 해당하는 코드는 저장소 루트의 main.py 한 파일에 모여 있습니다. 트랜스포머 블록은 사전 정규화와 잔차 연결을 두 줄로 압축해 보여줍니다.
class TransformerBlock(nn.Module):
def __init__(self, d_model, num_heads, dropout=0.1):
super().__init__()
self.norm1 = RMSNorm(d_model)
self.attention = MultiHeadAttention(d_model, num_heads, dropout)
self.norm2 = RMSNorm(d_model)
self.ffn = SwiGLU(d_model)
def forward(self, x, mask=None):
x = x + self.attention(self.norm1(x), mask)
x = x + self.ffn(self.norm2(x))
return x
멀티 헤드 어텐션은 QKV 사영을 한 번에 계산한 뒤 헤드로 나누고, 쿼리와 키에만 회전 위치 임베딩을 적용합니다. 스케일링에 head_dim 이 쓰이는 지점과 인과 마스크가 소프트맥스 직전에 들어가는 지점이 코드에서 그대로 드러납니다.
def forward(self, x, mask=None):
batch_size, seq_len, _ = x.shape
qkv = self.qkv_proj(x)
qkv = qkv.reshape(batch_size, seq_len, 3, self.num_heads, self.head_dim)
qkv = qkv.permute(2, 0, 3, 1, 4)
q, k, v = qkv[0], qkv[1], qkv[2]
q = self.rotary(q, seq_len)
k = self.rotary(k, seq_len)
attn_scores = (q @ k.transpose(-2, -1)) / math.sqrt(self.head_dim)
if mask is not None:
attn_scores = attn_scores.masked_fill(mask == 0, float('-inf'))
attn_weights = F.softmax(attn_scores, dim=-1)
attn_weights = self.attn_dropout(attn_weights)
attn_output = attn_weights @ v
attn_output = attn_output.transpose(1, 2).contiguous()
attn_output = attn_output.reshape(batch_size, seq_len, self.d_model)
output = self.out_proj(attn_output)
return self.resid_dropout(output)
SwiGLU도 세 개의 선형 계층과 SiLU 한 번으로 끝납니다. w1 의 출력에 SiLU를 적용해 게이트를 만들고 w2 의 출력과 곱한 뒤 w3 로 되돌리는 구조입니다.
class SwiGLU(nn.Module):
def __init__(self, d_model, expansion_factor=4):
super().__init__()
hidden_dim = expansion_factor * d_model
self.w1 = nn.Linear(d_model, hidden_dim, bias=False)
self.w2 = nn.Linear(d_model, hidden_dim, bias=False)
self.w3 = nn.Linear(hidden_dim, d_model, bias=False)
def forward(self, x):
return self.w3(F.silu(self.w1(x)) * self.w2(x))
How to Train Your GPT 실행 방법
저장소를 받아 가상 환경을 만들고 의존성을 설치하면 바로 학습을 돌려볼 수 있습니다.
git clone https://github.com/raiyanyahya/how-to-train-your-gpt.git
cd how-to-train-your-gpt
python -m venv gpt_env
source gpt_env/bin/activate # macOS / Linux
pip install torch tiktoken datasets numpy matplotlib --index-url https://download.pytorch.org/whl/cpu
python main.py
기본 설정은 작은 모델이라 CPU에서도 몇 분이면 끝납니다. main.py 의 GPTConfig 를 보면 어떤 값으로 시작하는지 한눈에 들어옵니다.
@dataclass
class GPTConfig:
vocab_size: int = 50257
d_model: int = 256
num_heads: int = 4
num_layers: int = 4
max_seq_len: int = 128
dropout: float = 0.1
learning_rate: float = 3e-4
weight_decay: float = 0.1
warmup_steps: int = 50
max_steps: int = 500
batch_size: int = 4
grad_accum_steps: int = 2
GPT-2 규모(151M 파라미터, 768차원, 12개 층)로 올리려면 같은 파일의 큰 설정을 주석 해제하면 되고, 이때는 GPU가 필요합니다. 노트북 디렉토리에는 작은 데이터셋으로 학습했을 때의 손실 곡선도 함께 들어 있습니다.
How to Train Your GPT의 주제별 해설과 파인튜닝 자료
장별 교재와 별개로 28개의 주제 해설이 explanations and examples WIP/ 디렉토리에 들어 있습니다. RoPE와 어텐션, BPE 같은 기본 개념부터 그룹 쿼리 어텐션, Flash Attention, 전문가 혼합(Mixture of Experts), 추측 디코딩(Speculative Decoding)처럼 교재 본문에서 다루지 않는 확장 주제까지 각각 별도 문서로 정리되어 있습니다. 손실 곡선을 보고 학습 문제를 진단하는 문서와 수식·하이퍼파라미터를 한 장에 모은 치트시트도 여기에 있습니다.
이 디렉토리의 마지막 두 문서는 서사형 정리입니다. 한 문장이 모델 전체를 통과하는 과정을 따라가는 글과 22개 부분으로 전체 구성 요소를 이어 붙인 글로, 각 장을 끝낸 뒤 읽으면 흩어진 조각이 연결됩니다. 별도의 fine-tuning/ 디렉토리에는 LoRA와 QLoRA, 데이터 준비, 전체 파인튜닝을 다루는 문서와 실습 노트북이 따로 준비되어 있습니다.
How to Train Your GPT의 라이선스
How to Train Your GPT는 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.
How to Train Your GPT 첫 번째 장
How to Train Your GPT 프로젝트 GitHub 저장소
더 읽어보기
이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다. ![]()
이 도구를 직접 설치해 사용해보셨다면, 파이토치 한국 사용자 모임
회원들을 위해 경험이나 팁을 댓글로 남겨주세요! ![]()


