microgpt

3 weeks ago 10

  • 200줄짜리 순수 Python 단일 파일로 GPT 모델의 학습과 추론 전 과정을 구현한 최소형 언어모델 구조
  • 데이터셋, 토크나이저, 자동미분 엔진, GPT-2 유사 신경망, Adam 옵티마이저, 훈련 및 추론 루프를 모두 포함
  • 이름 데이터셋을 학습해 새로운 이름을 생성하며, 자체 구현된 autograd와 Transformer 구조를 통해 GPT의 핵심 원리를 드러냄
  • 대규모 LLM과 달리 의존성 없이 순수 Python으로 작동, 알고리듬적 본질만 남긴 형태
  • microgpt를 이해하면 ChatGPT 등 대형 모델의 근본 알고리듬 구조를 이해할 수 있음

microgpt 개요

  • microgpt는 200줄의 Python 코드로 작성된 최소형 GPT 구현으로, 외부 라이브러리 의존성이 없음
    • 데이터셋, 토크나이저, 자동미분, GPT-2 유사 구조, Adam 옵티마이저, 학습 및 추론 루프를 모두 포함
  • Karpathy가 LLM을 본질 수준으로 단순화하기 위해 만든 예술적 프로젝트로, micrograd·makemore·nanogpt 등의 연장선상에 있음
  • 전체 코드는 GitHub Gist, 웹페이지, Google Colab에서 제공

데이터셋

  • 32,000개의 이름을 한 줄씩 포함한 텍스트 파일을 사용
  • 각 이름은 하나의 문서로 간주되며, 모델은 이 패턴을 학습해 새로운 이름을 생성
  • 학습 후 생성 예시: kamon, ann, karai, jaire, vialan

토크나이저

  • 고유 문자에 정수 ID를 부여하는 단순 문자 기반 토크나이저
  • 알파벳 a–z와 BOS(beginning of sequence) 토큰을 포함해 총 27개 토큰
  • 각 문서는 [BOS, e, m, m, a, BOS] 형태로 감싸져 학습됨

자동미분 (Autograd)

  • Value 클래스가 스칼라 값과 그래디언트를 추적하며, 연산 그래프를 구성
  • 덧셈, 곱셈, 거듭제곱, 로그, 지수, ReLU 등 기본 연산의 국소 미분값(local gradient) 을 저장
  • backward() 메서드가 체인룰을 적용해 역전파 수행
  • PyTorch의 .backward()와 동일한 알고리듬을 스칼라 단위로 직접 구현

파라미터 초기화

  • 모델은 약 4,192개의 파라미터를 가짐
  • 임베딩 테이블, 어텐션 가중치, MLP 가중치, 출력 프로젝션 등으로 구성
  • 각 파라미터는 가우시안 분포 난수로 초기화됨

모델 아키텍처

  • GPT-2 구조를 단순화한 형태로, RMSNorm, ReLU, 잔차 연결(residual connection) 사용
  • 주요 구성:
    • 임베딩 단계: 토큰과 위치 임베딩을 합산
    • 멀티헤드 어텐션: Q, K, V 벡터 계산 후 KV 캐시를 통해 과거 토큰 정보 활용
    • MLP 블록: 2층 피드포워드 네트워크로 지역적 계산 수행
    • 출력 단계: 어휘 크기(27)에 대한 로짓(logit) 생성
  • KV 캐시는 학습 중에도 활성 상태로, 역전파가 캐시를 통해 흐름

학습 루프

  • 각 스텝에서 문서를 선택해 [BOS, ... , BOS]로 토크나이즈
  • 모델이 다음 토큰 확률을 예측하고, 교차 엔트로피 손실을 계산
  • loss.backward()로 그래디언트 계산 후 Adam 옵티마이저로 파라미터 갱신
  • 학습률은 선형 감쇠(linear decay) 방식
  • 1,000 스텝 동안 손실이 약 3.3 → 2.37로 감소

추론(Inference)

  • 학습 완료 후, BOS 토큰으로 시작해 새 이름을 생성
  • 각 단계에서 softmax 확률에 따라 다음 토큰을 샘플링
  • temperature 값으로 창의성 조절 (낮을수록 보수적, 높을수록 다양)
  • 예시 출력: kamon, ann, karai, jaire, vialan, karia, yeran, anna

실행 방법

  • Python만 있으면 실행 가능 (python train.py)
  • 약 1분 내 학습 완료, 손실값이 단계별로 출력됨
  • Colab 노트북에서도 동일하게 실행 가능

코드 발전 단계

  • train0.py부터 train5.py까지 단계별 확장
    • Bigram → MLP → Autograd → Attention → Multi-head → Adam
  • 각 단계는 Gist의 build_microgpt.py 리비전에서 확인 가능

실제 LLM과의 차이

  • 데이터: microgpt는 32K 이름, 실제 LLM은 수조 개 토큰
  • 토크나이저: 문자 단위 vs. BPE 기반 서브워드
  • Autograd: 스칼라 기반 Python vs. GPU 텐서 연산
  • 아키텍처: 4K 파라미터 vs. 수천억 파라미터
  • 훈련: 단일 문서 반복 vs. 대규모 배치·혼합정밀도 학습
  • 최적화: 단순 Adam vs. 정밀 튜닝된 하이퍼파라미터 및 스케줄링
  • 후처리: SFT와 RL 단계를 거쳐 ChatGPT 형태로 발전
  • 추론 인프라: GPU 분산, KV 캐시 관리, 양자화, speculative decoding 등

FAQ 요약

  • 모델은 수학적 함수로, 입력 토큰을 다음 토큰 확률로 변환
  • “이해”는 없으며, 통계적 규칙 학습을 통해 예측 수행
  • ChatGPT와 동일한 토큰 예측 루프를 축소 형태로 구현
  • “환각(hallucination)”은 확률적 샘플링의 자연스러운 결과
  • 속도는 느리지만, LLM의 핵심 알고리듬을 완전하게 재현
  • 더 나은 결과를 위해 학습 스텝, 모델 크기, 데이터셋을 조정 가능
  • 데이터셋을 교체하면 도시명, 포켓몬 이름, 시 등 다양한 패턴 학습 가능

microgpt는 LLM의 모든 핵심 알고리듬을 최소 단위로 구현한 교육적·실험적 모델로, 대규모 언어모델의 작동 원리를 완전히 드러내는 예시임.

Read Entire Article