초기부터 자체 LLM 학습하기
GPT 학습 파이프라인의 모든 구성 요소를 직접 작성하여 각 구성 요소가 수행하는 작업과 그 이유를 이해하는 실습 워크숍입니다.
Andrej Karpathy 의 nanoGPT 는 저에게 LLM 과 트랜스포머에 대한 첫 번째 실제 경험이었으며, 수백 줄의 PyTorch 코드로 작동 가능한 언어 모델을 구축하는 방법을 보며 AI 에 대한 사고방식을 완전히 바꾸고 이 분야로 더 깊이 탐구하도록 영감을 주었습니다.
이 워크숍은 다른 사람들도 동일한 경험을 할 수 있도록 시도합니다. nanoGPT 는 GPT-2 (124M params) 를 복제하는 것을 목표로 하며 많은 내용을 다룹니다. 이 프로젝트는 핵심 요소만 남기고 ~10M param 모델로 축소하여 노트북에서 1 시간 이내에 학습되도록 설계되었습니다.
무엇을 만들지
MacBook 에서 초기부터 학습한 작동 가능한 GPT 모델을 생성하며, 셰익스피어 같은 텍스트를 생성할 수 있습니다. 작성할 것입니다:
- Tokenizer — 모델을 처리할 수 있는 숫자로 텍스트 변환
- 모델 아키텍처 — 트랜스포머: 임베딩, 주의 (attention), 전파 층 (feed-forward layers)
- 학습 루프 — 순전파 (forward pass), 손실 (loss), 역전파 (backprop), 옵티마이저, 학습률 스케줄링
- 텍스트 생성 — 훈련된 모델에서 샘플링
사전 요구 사항
- 어떤 노트북이나 데스크톱 (Mac, Linux, Windows)
- Python 3.12+
- Python 코드 읽기 능력 필요 (ML 경험은 필요 없음)
학습은 Apple Silicon GPU (MPS), NVIDIA GPU (CUDA) 또는 CPU 를 자동으로 사용합니다. 또한 Google Colab 에서도 작동합니다 — 파일을 업로드하고 !python train.py 로 실행하세요.
시작하기
로컬 (권장)
사용하지 않는 경우 uv 를 설치하세요:
curl -LsSf https://astral.sh/uv/install.sh | sh
...
그런 다음 프로젝트를 설정하세요:
uv sync
mkdir scratchpad && cd scratchpad
Google Colab
로컬 환경이 없는 경우, 레포지토리를 Colab 에 업로드하고 의존성을 설치하세요:
!pip install torch numpy tqdm tiktoken
data/shakespeare.txt 를 Colab 파일에 업로드한 후, 노트북 셀에서 코드를 작성하거나 .py 파일을 업로드하고 !python train.py 로 실행하세요.
문서를 순서대로 진행하세요. 각 부분은 파이프라인의 구성 요소를 작성하는 방법을 안내하며, 각 구성 요소가 수행하는 작업과 그 이유를 설명합니다. 마지막에는 작성한 작동 가능한 model.py, train.py, 및 generate.py 를 갖게 될 것입니다.
아키텍처: GPT 한눈에 보기
이 워크숍을 위한 모델 설정
| Config | Params | n_layer | n_head | n_embd | Train Time (M3 Pro) |
|---|
| Tiny | ~0.5M | 2 | 2 | 128 | ~5 min |
| ... | | | | | |
| 모든 설정은 문자 단위 토크나이저 (vocab_size=65) 와 block_size=256 을 사용합니다. | | | | | |
Tokenization: 문자 vs BPE
이 워크숍은 셰익스피어에 대해 문자 단위 토크나이저를 사용합니다. BPE 토크나이저 (GPT-2 의 50k 보어디) 는 작은 데이터셋에서 작동하지 않습니다 — 대부분의 토크인 이그램은 모델이 패턴을 학습할 수 있는 것이 너무 희귀합니다.
| Tokenizer | 보어디 크기 | 필요한 데이터셋 크기 |
|---|
| 문자 단위 | ~65 | 작은 (셰익스피어, ~1MB) |
| BPE (tiktoken) | 50,257 | 큰 (TinyStories+, 100MB+) |
Part 5 는 더 큰 데이터셋을 위해 BPE 로 전환하는 내용을 다룹니다.
주요 참고 자료