100달러로 ChatGPT 클론 만들기 - 단일 파일 풀스택 LLM 구현 솔루션

MITPythonnanochatkarpathy 33.3k Last Updated: October 25, 2025

nanochat 프로젝트 상세 소개

프로젝트 개요

nanochat은 저명한 AI 연구자 Andrej Karpathy가 개발한 풀스택 대규모 언어 모델(LLM) 구현 프로젝트입니다. 이 프로젝트의 핵심 철학은 최소한의 코드와 최저의 비용으로 ChatGPT와 유사한 챗봇을 처음부터 구축하는 방법을 완벽하게 보여주는 것입니다.

프로젝트 슬로건: "The best ChatGPT that $100 can buy." (100달러로 살 수 있는 최고의 ChatGPT)

핵심 특징

1. 극단적인 간소화 디자인 철학

  • 단일하고 명확하며 최소화된 수정 가능한 코드베이스
  • 낮은 의존성 설계
  • 약 8,300줄의 코드, 44개 파일
  • 총 약 83,497개 토큰 (약 334KB)

2. 엔드투엔드(End-to-End) 완전한 프로세스

nanochat은 LLM 구축의 모든 단계를 포함합니다:

  • 토큰화 (Tokenization)
  • 사전 학습 (Pretraining)
  • 미세 조정 (Finetuning)
  • 평가 (Evaluation)
  • 추론 (Inference)
  • 웹 서비스 (Web Serving)

3. 저비용 훈련

  • 기본 버전 (100달러 수준): 8×H100 노드에서 약 4시간 소요
  • 중급 버전 (300달러 수준): 약 12시간 소요, GPT-2보다 약간 우수한 성능
  • 고급 버전 (1000달러 수준): 약 41.6시간 소요

4. 교육적 목적

  • Eureka Labs의 LLM101n 과정 졸업 프로젝트로 설계됨
  • 코드가 매우 가독성이 높아 학습 및 이해 용이
  • LLM 훈련의 전체 과정을 깊이 이해하고자 하는 개발자에게 적합

빠른 시작

빠른 훈련 스크립트 실행

8×H100 GPU 노드에서 실행:

bash speedrun.sh

또는 screen 세션에서 실행 (권장):

screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh

약 4시간 대기 후, 사용 가능한 LLM 모델을 얻을 수 있습니다.

웹 인터페이스 시작

훈련 완료 후, 가상 환경을 활성화하고 서비스를 시작합니다:

source .venv/bin/activate
python -m scripts.chat_web

그 다음 표시된 URL(예: http://209.20.xxx.xxx:8000/)에 접속하면 ChatGPT를 사용하듯이 자신만의 LLM과 대화할 수 있습니다.

훈련 결과 예시

훈련 완료 후 report.md 파일이 생성되며, 모델의 평가 지표가 포함됩니다:

Metric         | BASE   | MID    | SFT    | RL
---------------|--------|--------|--------|-------
CORE           | 0.2219 | -      | -      | -
ARC-Challenge  | -      | 0.2875 | 0.2807 | -
ARC-Easy       | -      | 0.3561 | 0.3876 | -
GSM8K          | -      | 0.0250 | 0.0455 | 0.0758
HumanEval      | -      | 0.0671 | 0.0854 | -
MMLU           | -      | 0.3111 | 0.3151 | -
ChatCORE       | -      | 0.0730 | 0.0884 | -

Total wall clock time: 3h51m

참고: 100달러로 훈련된 모델의 성능은 제한적이며(약 4e19 FLOPs), "유치원 수준"의 언어 능력에 해당하지만, 전체 훈련 과정을 시연하기에는 충분합니다.

더 큰 모델로 확장

더 큰 모델(예: GPT-2 수준의 d26 모델)을 훈련하려면 speedrun.sh 파일을 약간만 수정하면 됩니다:

# 1. 더 많은 데이터 샤드 다운로드
python -m nanochat.dataset -n 450 &

# 2. 모델 깊이 증가, 메모리에 맞게 배치 크기 감소
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26 --device_batch_size=16

# 3. 중간 훈련 시 동일한 구성 유지
torchrun --standalone --nproc_per_node=8 -m scripts.mid_train -- --device_batch_size=16

실행 환경 요구 사항

권장 구성

  • 8×H100 80GB GPU 노드 (시간당 약 24달러)
  • 제공업체 추천: Lambda GPU Cloud

호환성

  • 8×A100 GPU: 실행 가능하지만 속도가 느림
  • 단일 GPU: 실행 가능하지만 훈련 시간이 8배 증가
  • 작은 VRAM GPU(<80GB): --device_batch_size 매개변수 조정 필요 (32에서 16, 8, 4, 2 또는 1로 감소)
  • 기타 플랫폼: PyTorch 기반이므로 이론적으로 xpu, mps 등을 지원하지만 추가 구성이 필요합니다.

기술 스택

  • 딥러닝 프레임워크: PyTorch
  • 분산 훈련: torchrun
  • 패키지 관리: uv
  • 데이터셋: HuggingFace Fineweb, Smoltalk
  • 토크나이저: 사용자 정의 Rust 구현 (rustbpe)

AI와 대화하며 코드 탐색

코드베이스가 간결하므로(~330KB), 전체 프로젝트를 패키징하여 LLM에 제공하여 분석할 수 있습니다:

files-to-prompt . -e py -e md -e rs -e html -e toml -e sh --ignore "*target*" --cxml > packaged.txt

또는 DeepWiki를 사용하여 온라인에서 직접 코드베이스를 탐색할 수 있습니다.

테스트

프로젝트에는 단위 테스트가 포함되어 있으며, 특히 토크나이저에 대한 테스트가 있습니다:

python -m pytest tests/test_rustbpe.py -v -s

프로젝트 포지셔닝 및 목표

nanochat은 다음이 아닙니다:

  • 모든 기능을 갖춘 LLM 프레임워크
  • 고도로 구성 가능한 모델 팩토리
  • 프로덕션 수준의 솔루션

nanochat은 다음입니다:

  • 교육 목적의 참조 구현
  • 수정 및 포크 가능한 강력한 기준선
  • 1000달러 미만 예산의 소형 모델 연구
  • LLM 개발의 인지적 복잡성 감소

프로젝트 역사 및 감사

  • 영감의 원천:

  • 감사의 말씀:

    • HuggingFace - fineweb 및 smoltalk 데이터셋 제공
    • Lambda - 개발에 필요한 컴퓨팅 자원 제공
    • Alec Radford - LLM 수석 고문

오픈 소스 라이선스

MIT 라이선스

인용 형식

@misc{nanochat,
  author = {Andrej Karpathy},
  title = {nanochat: The best ChatGPT that $100 can buy},
  year = {2025},
  publisher = {GitHub},
  url = {https://github.com/karpathy/nanochat}
}

프로젝트 현황

프로젝트는 여전히 활발히 개발 중이며, 소형 모델의 최첨단 수준을 지속적으로 개선하고 더 많은 사람이 합리적인 비용으로 LLM 훈련의 전체 과정을 경험할 수 있도록 하는 것을 목표로 합니다.


GitHub 주소: https://github.com/karpathy/nanochat

Star History Chart