- Andrej karpathy의 nanochat은 $100 예산으로 ChatGPT와 유사한 대화형 LLM을 직접 구축할 수 있는 오픈소스 프로젝트임
- 전체 파이프라인(토크나이즈, 사전학습, 미드트레이닝, 파인튜닝, 평가, 추론, 웹 서비스)이 간결하고 해커블하게 구현되어 있음
- 8XH100 GPU 노드 한 대에서 스크립트 하나로 4시간 내에 학습 완료되며, GPT-2 수준의 성능을 목표로 하는 d26 모델은 약 300달러에 12시간, 1000달러 티어는 41.6시간 소요
- 330KB 크기의 8,300줄, 44개 파일로 구성된 극도로 간결한 코드베이스로, 복잡한 설정 객체나 모델 팩토리 없이 읽기 쉽고 포크하기 쉬운 강력한 베이스라인 제공
- Eureka Labs의 LLM101n 과정의 캡스톤 프로젝트로 개발 중이며, 1000달러 미만 예산으로 접근 가능한 마이크로 모델의 최첨단 수준을 개선하는 것이 목표
nanochat 프로젝트 개요
- nanochat은 ChatGPT와 유사한 대화형 LLM을 $100 비용으로 구현하고 싶은 개발자를 위해 만들어진 오픈소스 프로젝트
- 전체 코드베이스가 단일, 읽기 쉬우며, 의존성이 적고, 간결하게 작성되어 있어 수정 및 실험이 용이함
- pretraining, finetuning, 평가, 추론, 웹 UI까지 모든 과정을 한 번에 관리할 수 있는 환경 제공
- speedrun.sh 스크립트로 전체 파이프라인을 자동으로 실행할 수 있어 초보자도 쉽게 시작 가능
- 최소한의 의존성과 해킹 가능한 구조로 설계되어, 쉽게 이해하고 수정할 수 있는 교육용 목적에 최적화
- 프로젝트는 Eureka Labs에서 개발 중인 LLM101n 강의의 캡스톤 프로젝트로 활용될 예정
빠른 시작 (Quick Start)
- GPU 환경(특히 8XH100 노드)에서 speedrun.sh를 실행하면 약 4시간 동안 학습과 추론 과정이 구성
- 8XH100 노드 기준 시간당 24달러로 총 4시간 소요
-
screen 세션 내에서 실행 권장하여 장시간 학습 중에도 안정적으로 모니터링 가능
-
screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh명령어 사용 -
Ctrl-a d로 분리 후tail speedrun.log로 진행 상황 확인
-
- 학습이 끝나면 간단한 웹 UI를 통해 LLM에게 자유롭게 질문하고 결과를 대화창에서 확인 가능
-
python -m scripts.chat_web
-
-
4e19 FLOPs 수준의 모델로 유치원생 수준의 대화 능력 제공
- 스토리/시 작성 요청 가능
- 환각(hallucination) 현상 확인 가능
- 하늘이 왜 파란지 등 기본적인 질문 응답 가능
- 학습 결과 및 여러 성능 지표는 report.md에 저장됨
학습 결과 리포트
-
report.md 파일에 학습 실행의 "성적표" 포함
- 각종 평가 지표와 메트릭 제공
- 최종 요약 테이블에 BASE, MID, SFT, RL 단계별 성능 표시
- 코드베이스 통계
- 문자 수: 333,989개
- 라인 수: 8,304줄
- 파일 수: 44개
- 토큰 수 (근사치): 83,497개
- 의존성 (uv.lock 라인 수): 2,004줄
- 벤치마크 성능 예시
- CORE: 0.2219 (BASE)
- ARC-Challenge: 0.2875 (MID), 0.2807 (SFT)
- GSM8K: 0.0250 (MID), 0.0455 (SFT), 0.0758 (RL)
- HumanEval: 0.0671 (MID), 0.0854 (SFT)
- 총 소요 시간: 3시간 51분
- 모델의 성능은 ChatGPT에 비해 낮지만, 저예산 LLM 구현 경험을 중시함
더 큰 모델 (Bigger Models)
- 100달러로는 고성능 ChatGPT 클론 학습 불가하며, 실제 LLM은 수백만 달러의 자본 지출로 유명
- 관심 대상이 되는 두 가지 추가 스케일 존재
- 약 300달러 티어 d26 모델 (depth=26): 약 12시간 학습, GPT-2 CORE 점수를 약간 상회
- 1000달러 티어: 약 41.6시간 소요, 깔끔한 라운드 숫자
- d26 모델 학습을 위한 speedrun.sh 수정 사항
-
더 많은 데이터 샤드 다운로드 필요
- 파라미터 수에 20을 곱해 토큰 수 계산
- 4.8을 곱해 문자 수 계산
- 2억 5천만으로 나눠 샤드 수 계산 (약 450개 필요)
- --depth=26 옵션 사용하고 device_batch_size를 32에서 16으로 절반 감소하여 OOM 방지
- 중간 학습(midtraining) 단계에서도 동일한 device_batch_size 사용 필요
-
더 많은 데이터 샤드 다운로드 필요
컴퓨팅 환경 요구사항
- 8XA100 GPU 노드에서도 실행 가능하지만 약간 느림
-
단일 GPU에서도 실행 가능
- torchrun 생략 시 거의 동일한 결과 생성
- 자동으로 gradient accumulation으로 전환
- 8배 더 긴 시간 소요
-
80GB 미만 VRAM을 가진 GPU의 경우 하이퍼파라미터 조정 필요
- --device_batch_size를 32(기본값)에서 16, 8, 4, 2, 1로 줄여 메모리 확보
- 1보다 작게 설정하려면 더 창의적인 접근 필요
-
바닐라 PyTorch 기반으로 xpu, mps 등 다양한 환경 지원 가능
- 기본 제공은 아니므로 약간의 수정 필요
활용도와 접근성
- nanochat의 최대 장점은 전체 파일을 한 번에 패키징하여 타 LLM, 문서 검색 서비스 등에 쉽게 질문할 수 있음
-
files-to-prompt 유틸리티 사용 예시
- py, md, rs, html, toml, sh 파일 포함
- rustbpe/target 폴더 제외
- cxml 출력 형식 선택
- 약 330KB(약 10만 토큰 이하), 45개 파일의 8천 줄 코드로 패키징
-
DeepWiki 사용 권장
- GitHub URL의 github.com을 deepwiki.com으로 변경하여 리포지토리에 대한 질문 가능
- Devin/Cognition에서 제공
기여 및 프로젝트 방향성
- nanochat은 아직 완성되지 않은 프로젝트
- 1000달러 미만 예산으로 처음부터 끝까지 작업 가능한 마이크로 모델의 최첨단 수준 개선이 목표
- 접근성은 비용뿐만 아니라 인지적 복잡성도 포함
- 거대한 설정 객체, 모델 팩토리, if-then-else 괴물 코드 없음
- 철저하게 설정 가능한 LLM "프레임워크"가 아님
-
단일하고 일관되며 최소한이고 읽기 쉬우며 해킹 가능하고 최대한 포크하기 쉬운 "강력한 베이스라인" 코드베이스
- 처음부터 끝까지 실행되어 구체적인 ChatGPT 클론과 성적표를 생성하도록 설계