매일 아침 거대 언어 모델(LLM)을 다루는 개발자들은 이미 완성된 모델을 불러와 추론하는 과정에 익숙해져 있다. 하지만 모델 내부에서 토큰이 어떻게 임베딩되고 어텐션 메커니즘이 데이터를 처리하는지 그 근본적인 구조를 이해하는 것은 완전히 다른 차원의 문제다. 최근 공개된 이 워크숍 프로젝트는 블랙박스 형태의 라이브러리 호출을 배제하고, GPT의 핵심 구성 요소를 직접 코드로 작성하며 학습 파이프라인을 완성하는 과정을 담고 있다.

10M 파라미터 모델의 학습 파이프라인 구축

이번 프로젝트는 Andrej Karpathy의 nanoGPT(GPT 모델의 구조를 수백 줄의 코드로 구현한 교육용 저장소)에서 영감을 받아 설계되었다. 기존 nanoGPT가 124M 파라미터의 GPT-2 재현을 목표로 했다면, 이번 워크숍은 10M 파라미터 규모의 소형 모델을 사용하여 학습 시간을 1시간 이내로 단축했다. 사용자는 PyTorch(메타에서 개발한 오픈소스 머신러닝 라이브러리)를 활용해 모델의 아키텍처를 직접 설계하며, 학습 데이터로 셰익스피어 텍스트를 사용한다. 모든 학습 과정은 Apple Silicon GPU(MPS), NVIDIA GPU(CUDA), 혹은 CPU 환경에서 자동으로 감지되어 실행된다. 개발자는 다음 명령어를 통해 환경을 설정할 수 있다.

bash

uv(파이썬 패키지 관리자) 설치

curl -LsSf https://astral.sh/uv/install.sh | sh

로컬 환경이 구축되지 않은 경우 Google Colab(구글에서 제공하는 클라우드 기반 주피터 노트북 환경)을 이용할 수 있다. 저장소를 업로드한 뒤 의존성을 설치하고 학습을 시작하면 된다.

bash
!pip install torch numpy
!python train.py

블랙박스 없는 모델 구현과 토큰화 방식의 차이

예전에는 Hugging Face의 AutoModel.from_pretrained()와 같은 고수준 API를 통해 모델을 불러오는 것이 표준이었다. 이제는 모델의 각 구성 요소를 직접 작성하는 방식으로 학습의 본질을 파고든다. 특히 이번 워크숍은 데이터셋의 규모를 고려하여 BPE(Byte Pair Encoding, 텍스트를 빈도 기반으로 조각내는 토큰화 방식) 대신 문자 단위 토큰화(Character-level tokenization)를 채택했다. 10M 파라미터 수준의 작은 모델에서 5만 개 이상의 어휘를 가진 BPE를 사용할 경우, 대부분의 토큰 쌍이 너무 희소하여 모델이 패턴을 학습하기 어렵기 때문이다. 설정값은 vocab_size=65, block_size=256으로 고정되어 있으며, 이는 모델이 셰익스피어 스타일의 텍스트를 생성하는 데 최적화된 수치다. 다만, 더 큰 데이터셋을 다룰 때는 5단계 과정에서 BPE로 전환하는 방법을 별도로 다룬다.

개발자가 체감하는 실무적 변화

개발자가 이 워크숍을 통해 얻는 실질적인 결과물은 model.py, train.py, generate.py로 구성된 자신만의 학습 파이프라인이다. 이는 단순히 이론을 공부하는 것에 그치지 않고, 모델의 파라미터가 학습 과정에서 어떻게 변화하는지, 손실 함수(Loss function)가 어떻게 수렴하는지를 직접 눈으로 확인하게 한다. 6개월 뒤 실제 서비스 환경에서 특정 도메인에 최적화된 소형 모델을 튜닝하거나, 모델의 경량화가 필요할 때 이 경험은 강력한 기술적 토대가 된다. 공식 저장소와 유사한 철학을 공유하는 이 프로젝트는 복잡한 추상화 계층을 걷어내고 모델의 밑바닥을 이해하려는 엔지니어에게 최적의 실습 환경을 제공한다.

모델의 구조를 직접 설계하는 경험은 추상화된 API 뒤에 숨겨진 연산의 비용과 한계를 명확히 인지하게 만든다.