Karpathy의 nn-zero-to-hero가 어제 하루 별 93개를 받아 GitHub 트렌딩 14위에 다시 올라왔다. 새 커밋도, 새 영상도 없는 리포다. 그런데도 매일 새 별이 붙는다.
이 리포에는 우리가 보통 GitHub에서 기대하는 게 없다. 라이브러리도, CLI도, 데모 페이지도, 배포 스크립트도 없다. 있는 건 YouTube 강의 여섯 편과, 그 영상에 1:1로 대응되는 Jupyter Notebook 묶음뿐이다. micrograd, makemore part 1~5, 그리고 ‘Let’s build GPT’가 전부의 목차다. README 자체가 강의 인덱스에 가깝다.
그런데 커리큘럼 순서를 따라가 보면 의도가 또렷하다. micrograd는 스칼라 Value 클래스 하나에 _prev set과 _backward 클로저를 붙여 autograd DAG를 손으로 짜게 한다. PyTorch가 등장하기 전에, backward()라는 호출이 마법이 아니라 그래프 위의 함수 호출이라는 감각을 먼저 심는다. 그다음 makemore는 ‘이름 생성’이라는 똑같은 태스크를 다섯 번 다시 푼다. bigram count table에서 출발해, Bengio 2003 스타일 MLP, BatchNorm 직접 구현, WaveNet 식 계층 구조, 백프롭 손계산 순서다. 매번 데이터와 평가 루프는 그대로 두고 모델만 바뀐다. 그래서 무엇이 ‘진짜 달라지는 변수’인지 분리되어 보인다. 마지막 ‘Let’s build GPT’에서 attention, residual, LayerNorm, multi-head를 노출된 채로 쌓아 nanoGPT로 수렴시킨다.
보통의 ML 입문과 정확히 반대 방향이다. 대부분의 강의는 nn.Module과 Trainer 같은 두꺼운 추상에서 출발해, 필요할 때 안쪽을 ‘해부’해 보여준다. 여기는 가장 얇은 층에서 시작해 한 겹씩 덮어쓰는 구조다. 같은 문제를 다섯 번 다시 푸는 makemore의 반복이 그래서 핵심이다. attention이 등장할 때쯤 되면, 그것이 ‘어디서 갑자기 튀어나온 개념’이 아니라 앞서 쌓아온 행렬연산의 한 변주처럼 자리잡는다.
tension은 분명하다. 영상 한 편이 두 시간을 넘고, 노트북도 그만큼 길다. LLM API를 빨리 ‘써먹고 싶은’ 사람에게는 비효율로 보일 수 있다. 분산 학습이나 RLHF, 프로덕션 레벨의 GPU 최적화도 다루지 않는다. 그런데도 별이 매일 붙는다. 추상화가 빨라질수록 한 번쯤 바닥을 본 사람의 디버깅 감각과 논문 독해 속도가 다른 자리에 가 있기 때문이다. 새 코드가 없어도 이 리포가 트렌딩에 다시 올라오는 이유는 거기에 있다.