nanoGPT 소개 — GPT-2 재현의 가장 단순한 구현
nanoGPT 소개
nanoGPT는 minGPT를 다시 쓴 저장소로, 목표가 "교육"보다 "이빨(실제 성능)"에 있지만 코드는 여전히 매우 읽기 쉬워요. train.py(약 300줄 학습 루프)와 model.py(약 300줄 GPT 모델 정의)만으로 구성되고, OpenAI의 GPT-2 가중치를 선택적으로 불러올 수 있어요.
설치
pip install torch numpy transformers datasets tiktoken wandb tqdm
핵심 의존성은 PyTorch, NumPy, 그리고 GPT-2 체크포인트를 불러오는 transformers, OpenWebText를 처리하는 datasets, 빠른 BPE 코드인 tiktoken 등이에요.
빠른 시작 (셰익스피어 문자 레벨)
자료를 1MB 파일로 받아 정수 스트림으로 바꾸면 train.bin과 val.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