nanoGPT 소개 — GPT-2 재현의 가장 단순한 구현

nanoGPT 소개

nanoGPT는 minGPT를 다시 쓴 저장소로, 목표가 "교육"보다 "이빨(실제 성능)"에 있지만 코드는 여전히 매우 읽기 쉬워요. train.py(약 300줄 학습 루프)와 model.py(약 300줄 GPT 모델 정의)만으로 구성되고, OpenAI의 GPT-2 가중치를 선택적으로 불러올 수 있어요.

출처: https://github.com/karpathy/nanoGPT

설치

pip install torch numpy transformers datasets tiktoken wandb tqdm

핵심 의존성은 PyTorch, NumPy, 그리고 GPT-2 체크포인트를 불러오는 transformers, OpenWebText를 처리하는 datasets, 빠른 BPE 코드인 tiktoken 등이에요.

빠른 시작 (셰익스피어 문자 레벨)

자료를 1MB 파일로 받아 정수 스트림으로 바꾸면 train.binval.bin이 생겨요:

python data/shakespeare_char/prepare.py

이어서 256 컨텍스트, 384 채널, 6레이어×6헤드 Transformer를 A100 한 장으로 학습하면 약 3분 만에 끝나요:

python train.py config/train_shakespeare_char.py
python sample.py --out_dir=out-shakespeare-char

노트북(CPU)이면 --device=cpu --compile=False 같은 옵션으로 작게 줄여서 돌리면 돼요. Apple Silicon에서는 --device=mps를 붙이면 온칩 GPU로 상당히 가속돼요.

GPT-2 재현

OpenWebText를 토크나이즈한 뒤, 8XA100 노드에서 DDP로 학습하면 약 4일 걸려요:

python data/openwebtext/prepare.py
torchrun --standalone --nproc_per_node=8 train.py config/train_gpt2.py

추론 / 샘플링

sample.py로 사전학습 GPT-2 또는 직접 학습한 모델에서 샘플을 뽑아요:

python sample.py     --init_from=gpt2-xl     --start="What is the answer to life, the universe, and everything?"     --num_samples=5 --max_new_tokens=100

더 알아보기