nanochat 소개
nanochat은 前 OpenAI의 AI 연구자이자 前 테슬라 AI 총괄 출신으로 유명한 Andrej Karpathy가 개발한 미니멀한 LLM(ChatGPT 유사 모델) 프로젝트입니다. 이 저장소의 목표는 “100달러로 ChatGPT를 만들어보자(The best ChatGPT that $100 can buy)” 라는 문구에서 드러나듯, 대규모 인프라 없이도 작동 가능한 저비용 LLM 구현을 실현하는 것입니다.
이 프로젝트는 전형적인 ChatGPT 시스템의 모든 구성요소를 하나의 깔끔한 코드베이스 안에 통합해 두었습니다. 즉, 토크나이징(tokenization) 부터 사전학습(pretraining), 미세조정(finetuning), 평가(evaluation), 추론(inference), 웹 서비스 제공(web serving) 까지의 전체 파이프라인을 포함하고 있습니다. 단일 GPU 서버(예: 8xH100 노드)에서 스크립트 한 줄로 모든 과정을 실행할 수 있도록 설계된 것이 핵심입니다.
Karpathy는 nanochat을 통해 AI 연구 입문자들이 복잡한 분산 학습 인프라 없이 ‘LLM이 어떻게 만들어지는가’를 직접 체험할 수 있도록 하는 것을 목표로 하고 있습니다. nanochat은 앞으로 그가 진행 중인 Eureka Labs의 LLM101n 강의의 핵심 실습 프로젝트로 발전할 예정이기도 합니다.
nanoGPT 및 기존 LLM과의 비교
nanochat은 Karpathy의 이전 프로젝트인 nanoGPT에서 출발했습니다. nanoGPT는 LLM의 사전학습(pretraining) 단계만을 다루는 프로젝트로, PyTorch 기반의 매우 단순한 GPT 구현체였습니다. 그러나 nanochat은 거기서 한발 더 나아가 “ChatGPT 전체 스택” 을 재현하는 데 초점을 맞추고 있습니다.
즉, nanoGPT가 GPT 모델의 ‘학습을 모사한 프로젝트’라면, nanochat은 그 결과물을 활용하여 실제 대화형 AI로 동작하는 완전한 시스템을 제공합니다. 웹 UI 인터페이스까지 포함되어 있어, 학습이 끝난 후 바로 웹 브라우저에서 자신이 만든 LLM과 대화할 수 있습니다.
또한 nanochat은 거대한 Hugging Face Transformers나 DeepSpeed 같은 의존성 없이도 작동할 수 있도록 설계되어 있습니다. “dependency-lite” 구조 덕분에 연구자나 개발자는 코드 전체를 손쉽게 이해하고, 마음대로 수정 및 포크할 수 있습니다. Karpathy는 이를 “maximally hackable LLM codebase” 라고 부르고 있습니다.
nanochat 사용법
빠른 시작(Quick Start)
nanochat의 핵심은 speedrun.sh
스크립트입니다. 해당 스크립트를 실행하는 명령 한 줄이면 모든 훈련과 추론을 자동으로 진행할 수 있습니다:
bash speedrun.sh
speedrun.sh
스크립트는 약 4시간 동안 8xH100 GPU 노드에서 실행되며, 총 100달러 수준의 비용으로 nanochat 모델을 완성합니다. (H100 GPU는 시간당 약 24달러 수준이므로 약 4시간이면 총 96달러가 소요됩니다.)
실행 후에는 학습 결과물과 함께 report.md
파일이 생성되며, 여기에는 학습 성능 지표(ARC, GSM8K, MMLU, HumanEval 등)가 표로 정리되어 있습니다. 다음은 report.md
파일의 예시입니다:
- Characters: 333,989
- Lines: 8,304
- Files: 44
- Tokens (approx): 83,497
- Dependencies (uv.lock lines): 2,004
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 규모의 모델, 즉 “유치원생 수준의 ChatGPT” 정도의 성능을 보여줍니다:
python -m scripts.chat_web
훈련이 끝난 후 위 명령을 실행하면 ChatGPT 유사한 웹 UI가 활성화되어, 브라우저에서 직접 모델과 대화할 수 있습니다.
더 큰 모델 학습하기
Karpathy는 nanochat이 단순한 장난감이 아니라, 더 큰 스케일의 모델로도 확장 가능한 기반임을 강조합니다. 현재 공식적으로 지원되는 기본 구성은 $100 모델이지만, 코드 내에서 몇 가지 파라미터만 수정하면 다음과 같은 규모로 확장할 수 있습니다:
- $300 모델 (depth=26, 약 12시간 훈련) : GPT-2 성능에 근접
- $1000 모델 (약 41시간 훈련) : 더 정교한 ChatGPT 복제 프로젝트
예를 들어, 다음과 같이 변경하여 실행할 수 있습니다:
# 데이터셋 샤드 수 증가
python -m nanochat.dataset -n 450 &
# 모델 깊이 증가 및 배치 크기 조정
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26 --device_batch_size=16
이렇게 학습하면 nanochat은 GPT-2 수준의 모델 성능에 도달할 수 있으며, 여전히 단일 노드에서 학습이 가능합니다.
환경 및 실행 팁
- GPU 종류: H100 외에도 A100에서도 실행 가능 (다소 느림)
- 단일 GPU 지원: torchrun 없이도 단일 GPU로 실행 가능 (8배 느림)
- VRAM 제한 시:
--device_batch_size
값을 32 → 16 → 8 → 4로 줄이면 OOM(메모리 부족)을 방지할 수 있음 - 기본 프레임워크: 대부분 순수 PyTorch 코드이므로, xpu, mps 등에서도 약간의 수정으로 실행 가능
테스트 및 확장성
nanochat은 코드의 간결함과 직관성을 중시합니다.
일부 단위 테스트가 포함되어 있으며, 특히 Rust로 구현된 BPE 토크나이저(rustbpe) 모듈 테스트가 포함되어 있습니다.
python -m pytest tests/test_rustbpe.py -v -s
또한 Karpathy는 files-to-prompt 툴을 활용해 nanochat 전체 코드를 하나의 프롬프트로 압축해 대형 언어모델에게 분석시키는 실험도 제안합니다. 이를 통해, AI 모델에게 “자기 자신(nanochat)을 이해시키는” 독특한 실험이 가능합니다.
프로젝트 목표와 철학
nanochat은 복잡한 LLM 프레임워크가 아닙니다. Karpathy는 거대한 설정 파일, 수십 개의 하이퍼파라미터, 수백 개의 if-else 로직 대신, “하나의 일관된 코드로 동작하는 강력한 최소 구현체(strong baseline)” 를 추구합니다.
즉, nanochat은 다음 두 가지를 동시에 달성합니다:
-
저비용 접근성(Accessibility): 100~1000달러 수준에서도 ChatGPT 구조를 학습 가능
-
인지적 단순성(Cognitive Simplicity): 복잡한 설정 없이 코드 흐름을 직관적으로 이해 가능
Karpathy는 이를 “강력하지만 읽기 쉬운 ChatGPT 구현체”로 정의하며, AI 연구의 민주화를 실현하기 위한 도구로 제시하고 있습니다.
라이선스
nanochat 프로젝트는 MIT License로 공개되어 있으며, 상업적 이용과 수정이 모두 자유롭게 허용됩니다.
nanochat 프로젝트 GitHub 저장소
더 읽어보기
-
The Little Book of llm.c: Andrej Karphathy의 llm.c를 해설한 GPT-2 학습 도서 [영문/PDF&EPUB/255p]
-
minibpe: 작고, 깔끔하고, 학습용으로 적합한 BPE(Byte Pair Encoding) 코드 (feat. Andrej Karpathy)
-
Andrej Karpathy, 개발자를 위한 LLM 소개 영상 'ChatGPT와 같은 LLM 심층 분석' 공개 📺 [영어/YouTube/3:31:23]
-
nano-llama31, 단일 파일로 Llama 3.1 모델을 추론하는 프로젝트 (feat. Andrej Karpathy)
-
SpreadSheet is All You Need: 스프레드시트(또는 엑셀)로 이해하는 nanoGPT의 동작 원리
-
[GN⁺] GPT-2, NanoGPT, GPT-3와 같은 LLM 모델들의 시각화(Visualization) 설명
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~