NanoChat - $100로 구매할 수 있는 최고의 ChatGPT
(github.com/karpathy)- 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 클론과 성적표를 생성하도록 설계
Hacker News 의견
-
흥미로운 AI 코딩 툴 사용 경험 공유임
어느 정도 코드를 직접 작성했는지 궁금해서 Karpathy에게 물어본 적이 있음
Karpathy: 질문 고맙고, 사실상 코드 대부분을 손수 작성함(tab 자동완성 사용)
claude/codex 에이전트를 몇 번 써봤지만 정확도가 떨어져서 별로 도움 안 됨
아무래도 내가 만든 레포가 데이터 분포에서 너무 동떨어져 있기 때문일 수 있음
원본 대화 링크-
"레포가 데이터 분포에서 너무 떨어짐"이라는 말이 내가 왜 항상 AI 모델을 쓸 때 도움이 안 됐는지 설명이 됨
내가 하는 모든 작업이 너무 독특해서 분포에서 멀어져 있음 -
Karpathy처럼 신뢰할 만한 사람이 그렇게 말해주니 반가움
AGI가 곧 올 것처럼 생각하는 사람들은 기대를 좀 낮추는 게 좋을 것 같음
나도 Claude Code를 좋아함
주기적으로 웹 코드를 써야 할 때가 있는데, 웹 쪽은 학습 데이터 coverage가 워낙 좋아서 Claude가 나보다 훨씬 나은 웹 개발자임
하지만 내 자동화 툴의 알고리즘 코어 부분을 파고들려면 Claude가 쓸 수 있는 게 적어서 실수도 더 많아짐
그래도 전체적으로는 플러스라서 기꺼이 비용을 내고 쓰게 됨
웹 개발 도우미로만 끝난다 해도 큰 도움임 -
이건 오히려 자연스러운 현상이라 생각함
새롭고 독창적으로 코드를 쓰는 상황임
많은 사람들이 Karpathy의 답변을 비판하고 있는데, 오히려 그가 claude/codex를 시도했다는 점에서 과거에는 그 툴들이 실제로 도움됐다는 정황임 -
Karpathy 트윗의 다른 미러 링크 여기
-
-
nanochat이 modded-nanoGPT에서 영감을 받은 점이 인상적임
계보는 Karpathy의 nano-GPT → Keller Jordan의 modded-nanoGPT(모델을 빠르게 학습하는 버전) → NanoChat임
modded-nanoGPT는 엄청나게 빠르게 작은 GPT모델을 학습시키는 게 주목할 만함
특히 AdamW 대신 Muon optimizer(저자 직접 개발)를 linear layer에 씀
modded-nanoGPT, Muon optimizer 소개-
Muon은 Keller Jordan이 이 빠른 학습 대회를 위해 만든 최적화기로, 다른 사람들의 개선도 곁들여짐
1년이 채 안 된 사이에 이미 모델 학습의 SOTA로 널리 쓰이고 있음 -
8xH100으로 단일 inference 노드를 돌린다는 게 꽤 충격적임
실제 시행용 프론티어 LLM들도 이 정도로 돌리나, 아니면 더 많은 VRAM/연산력을 먹는가 궁금함
시간당 약 $8, 요청 한 번에 5초 걸린다고 가정하면 대략 700건 정도 요청을 소화 가능
즉 요청당 약 1센트 수준임
내 계산에 틀림이 있는지 궁금함
-
-
지금도 실제로 학습 진행 중임(20분 전에 시작)
실습 로그 공개
4시간 뒤 모델이 완성되면 누구나 inference 테스트 가능하게 공유 예정임-
완성된 모델을 Hugging Face에 업로드했음
Karpathy만큼 좋은 결과는 못 냈지만(seed 운이 별로였나?)
그래도 실험해보기 재밌음
예시로, "개는 다리가 몇 개인가요?"라고 물으니
어시스턴트: "정말 흥미로운 질문이고, 수 세기 동안 개 애호가들 사이에서 논의되어 온 질문임. '정답'은 따로 없고 (...)"라 답함 -
첫 차트 옆의 코멘트에서
"진전의 주된 척도. Bits per byte가 Karpathy 말대로 '일반적인 cross-entropy loss보다 훨씬 더 나은 지표임. 각 토큰에 대해 바이트 수로 loss를 정규화해서, 토크나이저에 상관없이 비교 가능하게 만들어줌'"
이게 너무 명확한 설명이라, 내가 tinystories에 내 토크나이저 실험할 때 이걸 생각 못 했던 게 민망함
내 토크나이저가 실제로 얼마나 괜찮았는지 다시 분석해보고 싶음 -
이 저장소를 W&B로 학습하면서 돌리는 법에 대한 간단한 'howto'가 있으면 좋겠음
한 번도 모델 학습 흐름을 해본 적 없는 프로그래머에게 단계별로 공유해줄 수 있는지 궁금함
-
-
재밌음!
Karpathy의 셰익스피어 생성기는 ollama 이후에 내가 처음 실험해 본 프로젝트였음
LLM의 원리를 이해하고자 했던 것임
지난주부터 LLM에 몰두해서 제로베이스의 학습/추론 시스템을 두 가지 백엔드로 만들고 있음- CPU(JAX 기반)
- GPU(wgpu-py 기반)
rocm/pytorch는 번거로워서 거부감이 강함
Vulkan은 좋음. llama-cpp에서도 그렇게 사용함
지난주는 CPU/GPU 백엔드 모두 동작하게 만들었고 GPU 백엔드는 버그가 있어서 고치는 데 집중했음
WGSL 코드를 리팩터하고 효율성을 높였음
이 과정을 LLM에 적극 활용했는데, 놀랄 만큼 큰 변환점이었음
리팩터링 프롬프트를 쓰면 한 단계씩 오류를 잡고 최종적으로 astral ty로 타입 체크까지 되는 코드를 만들 수 있음
- pytorch는 거부감 있음?
이보다 비효율적인 선택은 더 이상 없을 것 같음
-
이번 주말에 nanoGPT(링크)를 써봤음
꽤 예전 프로젝트지만 직접 작은 셰익스피어 GPT를 만들고 학습해보는 멋진 실습임
약 0.8M 파라미터로 CPU에서 돌림
결과물은 대략 예상 범위 내에서 '별로'임
그래도 마법 같은 느낌을 받을 수 있었음
딥러닝 전공자가 아니고 그냥 실험해보고 해킹하는 걸 즐길 사람에게는 최고의 입문임
주말 nanoGPT 체험기를 아직 블로그로 다 못 적었음... 다 썼으면 여기에 걸었을 텐데 아쉬움-
소규모에서 좋은 ML 연구가 검증된다는 점에서 유익한 실습임
이 새로운 예시는 더 발전된 예시로, instruction following, tool use SFT, RLVR까지 다뤄줌
덕분에 더 쓸모 있는 baseline이 생성됨 -
셰익스피어 코드를 약간만 튜닝해서 다른 데이터로 학습하면 Magic The Gathering commander 덱 생성이 꽤 잘 됨
-
-
"chief LLM whisperer Alec Radford에게 조언 얻음"
Alec과 Andrej의 팟캐스트가 만약 나온다면 세상을 뒤흔들 것 같음
GPT1의 영광의 시절부터 지금 4시간 만에 GPT3까지 만들다니- 제발 꼭 팟캐스트 나왔으면 완벽할 것 같음
-
Eureka Labs: Github 링크
Andrej가 정말 다작하는, 놀라운 사람임
그의 작업을 따라가는 것 자체가 굉장한 경험임 -
인류에 최고의 공헌을 하는 방법은
내가 얼마나 많은 사람을 얼마나 깊게 돕는가의 곱셈이라는 생각을 항상 했음
Karpathy가 하는 오픈소스 작업은 이런 의미에서 최고의 레버리지를 가진 접근임
오늘날의 세상도 오픈소스 프로젝트 위에 세워진 것임
전 세계 누구나 무료로 코딩을 배워 소프트웨어를 만들 수 있는 자유 덕분임
AI/LLM 분야도 이런 긍정적인 방향을 따라가길 바람-
소프트웨어에서 이런 무료/공유의 전통이 정말 좋아하지만
LLM에서는 너무 높은 학습비용과 고성능 하드웨어 때문에 이 흐름을 유지하기 어려울 것 같음
앞으로는 소프트웨어 개발도 LLM 호스트에 '임대료'를 내며 따라가게 되는 구조일 듯
온프렘(local) 추론 환경을 다시 누구나 쓸 수 있게 만드는 방법이 나올 수도 있지만
아직은 높은 트레이닝 비용 때문에 불투명하게 보임
그리고 LLM 의존도가 높아질수록
프로그래밍 입문자용 튜토리얼 같은 '수작업' 컨텐츠 생산이 점점 줄어들까봐 걱정임 -
(살짝 길지만 다 더 나은 세상을 바라는 진심에서 나옴)
이 관점은 주요한 '반AI' 정서와는 좀 차이가 있음
지적재산권이라는 개념은 인류 직접 기여보다는 정보 소유를 특정 개인들이 쌓고, 인간 전체에 임대하는 구조임
하지만 창작자 개개인이 생계를 유지할 수 있는 환경도 꼭 필요함
Karpathy가 해주는 일뿐만 아니라, 수천 명의 유튜브 제작자들이 각자의 분야에서 사회에 큰 기여를 하고 있다고 생각함
다만 많은 사람들이 스폰서십에 의존해야 한다는 건 조금 씁쓸함
Patreon도 있지만 이상적이지는 않음
이 모든 노력이 사회에 큰 기여를 하는 방식임에는 동의함
최근 Daily Show에서 Jon Stewart가 AI 학습을 인류 지식의 strip mining이라고 말함
AI 학습이 도둑질 같은 것으로 일방적으로 치부되기도 하는데, 사실은 매우 다양한 견해가 존재함
이런 흐름이 결국 초자본주의적 지식 소유구조를 굳혀서
아이디어의 소유권이 점점 소수에게 집중되는 결과로 이어질 수 있음
이 현상이 세상 전체에는 별 도움이 안 되고, 몇몇 집단만 이득을 보는 구조임
지적재산권 거래도 결국 시간 지나면 더욱 소수로 집중됨
현대 사회에 맞는 논의와 새로운 해석이 꼭 필요하다고 생각함
항상 '위에서 막을 거다, 논의해봐야 소용없다'는 패배주의가 논의를 막는 점이 아쉬움
어떻게 해야 더 나은 방안이 나올 수 있을지 자유롭게 토론하는 게 중요함 -
그의 ANN/LLM from scratch 영상 시리즈를 자주 추천함
강의가 매우 명확하고, 코딩 스타일도 파이소닉하고 간결하면서도 읽기 쉬워서
(pytorch 벡터화 부분은 복잡하지만 그건 그냥 어려운 영역임)
영상 보면서 스타일도 함께 배워가는 점에서 모두에게 큰 도움임
-
-
내가 실제로 소유한 심리학 책, 자료, 보고서, 논문 전부로 모델을 학습시키고
1xH100 노드(링크)에서 필요할 때마다 특화 질문에 대해 추론을 할 수 있을지 궁금함-
실제로 그렇게 할 순 있지만 성능이 극도로 떨어질 것임
이런 경우엔 사전학습된 작은 모델을 가져와서 내 데이터를 파인튜닝하거나
RAG 워크플로우(Retrieval Augmented Generation), 혹은 둘을 조합하는 게 훨씬 나음 -
그렇게 할 수 있음
하지만 일반화 모델을 쓰고, 내 문서를 작업 콘텍스트에 넣어주는 다양한 방법(예: RAG, Apple의 hierarchical memories 등 논문 링크)이 오히려 더 좋은 결과를 줄 수 있음 -
해도 되지만, 내 데이터셋 자체가 워낙 작아서 사전학습 모델+파인튜닝, 혹은 작은 모델+RAG보다 훨씬 떨어지는 성능임
-
안됨
-
-
이 프로젝트가 정말 자극 됨!
실제 프롬프트 성능 예시나 테스트 결과를 알 수 있으면 좋겠음- Simon.incutio.com에서
여기에 실제 프롬프트 스크린샷이 있다는 걸 알려줌
- Simon.incutio.com에서