Train Your Own LLM from Scratch
개요
이 워크샵은 GPT 학습 파이프라인의 모든 구성 요소를 직접 작성하여 각 컴포넌트의 기능과 목적을 이해하는 실습 경험을 제공합니다.
주요 내용
* 목표: 사용자가 직접 작성한 코드(model.py, train.py, generate.py)로 맥북에서 Shakespeare 스타일 텍스트를 생성하는 GPT 모델을 학습시키는 것을 목표로 합니다.
* 구축 요소:
* Tokenizer: 텍스트를 모델이 처리 가능한 숫자로 변환합니다.
* Model architecture: 임베딩, 어텐션, 피드-포워드 레이어를 포함하는 Transformer 아키텍처를 구현합니다.
* Training loop: 순전파, 손실 계산, 역전파, 옵티마이저, 학습률 스케줄링을 포함하는 학습 루프를 작성합니다.
* Text generation: 학습된 모델에서 샘플링하여 텍스트를 생성합니다.
* 기술 스택 및 환경:
* Python 3.12+ 환경이 필요하며, ML 경험은 필수가 아닙니다.
* Apple Silicon GPU (MPS), NVIDIA GPU (CUDA), 또는 CPU를 자동으로 사용하며, Google Colab에서도 실행 가능합니다.
* uv 패키지 매니저를 사용하여 로컬 환경을 설정하거나, Colab에서 pip 명령어로 의존성을 설치합니다.
* 워크샵 단계별 구성:
* Part 1: Tokenization: 문자 수준 토크나이저 구현 및 문자 인코딩, 어휘 크기, BPE의 한계점을 다룹니다.
* Part 2: The Transformer: GPT 모델 아키텍처, 임베딩, 셀프 어텐션, 레이어 정규화, MLP 블록을 구현합니다.
* Part 3: The Training Loop: 손실 함수, AdamW 옵티마이저, 그래디언트 클리핑, 학습률 스케줄링을 포함하는 완전한 학습 파이프라인을 구축합니다.
* Part 4: Text Generation: 온도, top-k 샘플링, 자기회귀 디코딩 등 추론 및 샘플링 기법을 구현합니다.
* Part 5: Putting It All Together: 실제 데이터로 학습하고, 손실 곡선, 스케일링 실험 등을 통해 모델 성능을 평가하며, 다음 단계 실험을 탐구합니다.
* Part 6: Competition: 가장 뛰어난 AI 시인을 만들기 위한 데이터셋 탐색, 모델 스케일업, 결과 제출 등 경쟁을 진행합니다.
* 아키텍처 세부 사항:
* 입력 텍스트는 문자 수준 토크나이저를 거쳐 토큰 ID 시퀀스가 됩니다.
* 토큰 임베딩과 위치 임베딩을 통해 벡터 표현으로 변환됩니다.
* 다수의 Transformer 블록을 통과하며, 각 블록은 LayerNorm, Self-Attention, Residual 연결, MLP(Feed-Forward Network)로 구성됩니다.
* 최종적으로 LayerNorm과 Linear 레이어를 거쳐 다음 토큰에 대한 확률 분포(logits)를 출력합니다.
* 모델 구성 예시: Tiny (~0.5M params), Small (~4M params), Medium (~10M params) 등 다양한 크기의 모델 구성이 가능하며, 훈련 시간은 모델 크기에 따라 달라집니다. 모든 구성은 문자 수준 토큰화(vocab\_size=65)와 block\_size=256을 사용합니다.
* 토큰화 방식: 본 워크샵에서는 Shakespeare 데이터셋에 문자 수준 토큰화를 사용합니다. BPE 토큰화는 작은 데이터셋에서는 희귀한 토큰 빈도로 인해 패턴 학습에 어려움이 있을 수 있습니다. Part 5에서 BPE로 전환하는 방법을 다룹니다.
* 참고 자료: nanoGPT 프로젝트, build-nanogpt 비디오 강의, Karpathy의 microgpt, nanochat, Attention Is All You Need 논문, GPT-2 논문, TinyStories 논문 등이 주요 참고 자료로 제시됩니다.
시사점
이 워크샵은 LLM의 작동 방식을 근본적으로 이해하고자 하는 개발자들에게 LLM의 각 구성 요소를 직접 구현해보는 실질적인 학습 기회를 제공하여, AI 모델 개발에 대한 심도 있는 통찰력과 자신감을 얻게 할 수 있습니다.
댓글
GitHub Discussions