Nanocode: $200로 TPU에서 JAX로 구현하는 나만의 Claude Code 학습 라이브러리
Nanocode: The best Claude Code that $200 can buy in pure JAX on TPUs
TL;DR Highlight
이 오픈소스 라이브러리는 Constitutional AI 방식으로 $200 TPU에서 1.3B 파라미터 규모의 coding agent 모델을 처음부터 학습하게 하며 개발자가 AI 학습 파이프라인 전체를 직접 이해하고 실습할 수 있는 환경을 제공한다.
Who Should Read
Constitutional AI나 RLHF 같은 alignment 학습 기법을 직접 구현해보고 싶은 ML 엔지니어, 또는 Claude 같은 coding agent가 내부적으로 어떻게 만들어지는지 end-to-end로 파악하고 싶은 개발자.
Core Mechanics
- nanocode는 Anthropic의 Claude 모델 학습에 사용된 Constitutional AI 방식을 최대한 단순하게 따라서, 누구나 자신만의 coding agent 모델을 처음부터 학습할 수 있도록 보여주는 라이브러리다.
- 전체 학습 인프라와 철학은 Karpathy의 nanochat 프로젝트에서 가져왔고, nanochat에 익숙한 사람이라면 nanocode도 비슷하게 느껴질 정도로 구조가 유사하다.
- 코드는 전부 JAX로 작성됐고, Google TPU에서 학습하도록 최적화돼 있다. NVIDIA GPU에서도 동작은 하지만 TPU 최적화 코드라는 점을 감안해야 한다.
- 1.3B 파라미터 모델인 nanocode-d24는 TPU v6e-8에서 약 9시간이면 학습 완료되고, 비용은 약 $200(약 27만원) 정도다.
- 477M 파라미터짜리 작은 모델 nanocode-d20은 약 1.5시간, $34(약 4.5만원)면 학습할 수 있어서 빠르게 실험해보기 좋다.
- Google TRC(TPU Research Cloud) 프로그램을 통해 한 달간 무료 TPU를 받을 수 있고, 새 Google Cloud 계정이면 $300 크레딧도 받을 수 있어서 비용 없이 시작도 가능하다.
- 학습 파이프라인은 SOUL.md 작성(모델의 가치 기준 정의) → agentic interface 정의 → 합성 데이터(synthetic data) 생성 → preference optimisation(선호도 최적화)으로 구성된다.
- 저자는 TRC 프로그램으로 3개월간 TPU를 사용했고, spot instance가 거의 중단되지 않아 같은 pod를 일주일 이상 유지할 수 있었다고 한다.
Evidence
- 데모 영상에서 nanocode가 'falsey 값을 리스트에서 제거하되 새 리스트를 만들지 말라'는 프롬프트에 list comprehension(새 리스트를 만드는 방식)으로 답하는 걸 보고, 요구사항을 정확히 이해하지 못한 틀린 코드를 생성한 거 아니냐는 지적이 나왔다. 진짜로 원본 리스트를 in-place로 수정하려면 reversed range + pop을 써야 한다는 올바른 구현 예시도 댓글로 공유됐다.
- '무료 coding 모델이 많은데 왜 $200 써서 직접 학습하냐'는 질문이 올라왔다. 이는 사용보다는 학습 원리를 직접 이해하고 싶은 목적의 프로젝트라는 맥락을 놓친 것으로 보이며, 별도의 명확한 답변은 달리지 않았다.
- 'Claude Code는 LLM을 호출하고 tool을 실행하는 harness(실행 프레임워크)이지, 그 자체를 학습할 수 있는 게 아닌데 용어를 잘못 쓴 거 아니냐'는 날카로운 지적도 있었다. 프로젝트 이름이 Claude Code를 오마주한 것이지 실제 Claude Code 자체를 학습한다는 의미가 아님을 이해해야 한다.
- nanocoder라는 비슷한 이름의 다른 오픈소스 프로젝트(https://github.com/Nano-Collective/nanocoder)가 있어서 혼동할 수 있다는 주의 댓글이 달렸다.
- ML 경험이 전혀 없는 사람도 내용이 이해하기 쉽게 잘 쓰였다는 긍정적인 반응이 있었던 반면, 'Anthropic이 실제로 이 방식을 쓰는 건지, 실제로 동작하는지' 검증을 요구하는 회의적인 댓글도 있었다.
How to Apply
- Constitutional AI 방식으로 alignment된 모델을 직접 만들어보고 싶다면, Google TRC 프로그램에 신청해 무료 TPU를 받은 뒤 nanocode-d20(477M 파라미터) 학습부터 시작해보면 $34, 1.5시간 안에 전체 파이프라인을 한 번 돌려볼 수 있다.
- 회사나 팀 고유의 코딩 스타일, 규칙, 가치 기준을 반영한 coding agent를 만들고 싶다면, SOUL.md를 직접 작성해서 그 기준에 맞는 합성 데이터를 생성하고 preference optimisation으로 학습하는 nanocode 파이프라인을 참고하면 된다.
- JAX와 TPU 기반 학습 인프라를 처음 접하는 경우, nanochat 프로젝트를 먼저 읽고 나서 nanocode를 보면 거의 동일한 명령어와 구조를 사용하기 때문에 학습 곡선을 크게 낮출 수 있다.
- NVIDIA GPU 환경에서 실험하고 싶다면 nanocode가 GPU에서도 동작하긴 하지만, TPU 최적화 코드 기반이라 성능 차이가 있을 수 있음을 감안하고 비용/속도 트레이드오프를 직접 측정해보는 게 좋다.
Terminology
관련 논문
레이어 하나면 충분한가? 단일 Transformer 레이어 학습이 전체 파라미터 RL 학습과 동등한 성능
LLM의 RL 후처리 학습(post-training)에서 성능 향상의 대부분이 중간 레이어 소수에 집중되며, 단 하나의 레이어만 학습해도 전체 파라미터 학습과 비슷하거나 더 나은 결과를 낼 수 있다는 연구 결과. 이는 RL 학습 비용을 대폭 줄일 수 있는 가능성을 시사한다.
Black-Box LLM에서 지식 증류하기: Proxy-KD 기법 (2024)
GPT-4 같은 내부 구조에 접근할 수 없는 독점 LLM에서 작은 모델로 지식을 효과적으로 전달하는 Proxy-KD 기법을 소개하는 논문으로, 전통적인 White-Box 방식보다 성능이 높다는 점에서 주목할 만하다.
NanoEuler – 순수 C/CUDA로 처음부터 만든 GPT-2 규모 언어 모델
PyTorch나 autograd 없이 C와 CUDA만으로 GPT-2 수준의 LLM을 처음부터 구현한 교육용 프로젝트로, 역전파·BPE 토크나이저·FlashAttention까지 직접 손으로 작성했다.
Neural Particle Automata: 자기조직화 파티클 시스템을 학습하는 신경망 모델
고정된 격자 대신 움직이는 파티클 위에서 동작하는 Neural Cellular Automata의 확장 버전으로, 형태 생성·포인트 클라우드 분류·텍스처 합성 등 다양한 작업에서 자기조직화 동작을 학습할 수 있다.
PyTorch Training Loop 완전 해부: 각 줄이 하는 일과 순서를 바꾸면 생기는 문제
PyTorch 학습 루프의 각 코드 줄이 왜 그 위치에 있어야 하는지, 순서를 바꾸거나 빠뜨렸을 때 어떤 문제가 생기는지를 단계별로 설명한 심층 가이드다.
좋은 Verifier도 망가질 수 있다: Self-Improving VLM이 새로운 태스크에서 오히려 퇴보하는 현상
VLM 자가학습 루프에서 verifier가 특정 태스크에 맞지 않으면 학습할수록 오히려 성능이 떨어지는데, DPO 손실값은 멀쩡히 내려가서 눈치채기도 어렵다.