100달러로 ChatGPT 클론 만들기 - 단일 파일 풀스택 LLM 구현 솔루션
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 개발의 인지적 복잡성 감소
프로젝트 역사 및 감사
영감의 원천:
- nanoGPT - Karpathy의 초기 사전 훈련 프로젝트
- modded-nanoGPT - 게임화된 nanoGPT 변형
감사의 말씀:
- 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