본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 28. · 20 Views
nanochat 소개 - $100로 ChatGPT 만들기
Andrej Karpathy가 만든 nanochat 프로젝트를 통해 $100라는 놀라운 비용으로 ChatGPT 수준의 AI 챗봇을 만드는 방법을 살펴봅니다. 초급 개발자도 따라할 수 있는 실전 가이드입니다.
목차
- nanochat이란_무엇인가
- Karpathy가_만든_이유
- 비용_비교_100달러_vs_800달러_vs_1000달러
- speedrun으로_4시간_만에_ChatGPT_만들기
- nanoGPT와의_차이점
- 프로젝트_구조_전체_살펴보기
1. nanochat이란 무엇인가
어느 날 김개발 씨가 회사에서 점심을 먹다가 선배에게 질문을 받았습니다. "요즘 ChatGPT 많이 쓰잖아.
혹시 이런 거 직접 만들어 볼 생각 없어?" 김개발 씨는 고개를 저었습니다. "그거 만들려면 수십억은 들지 않나요?"
nanochat은 한마디로 "100달러로 만드는 나만의 ChatGPT"입니다. 마치 레고 블록으로 거대한 성을 작게 축소해서 만드는 것과 같습니다.
OpenAI가 수억 달러를 들여 만든 ChatGPT의 핵심 원리를 그대로 담으면서도, 개인 개발자가 감당할 수 있는 규모로 재구성한 프로젝트입니다.
다음 코드를 살펴봅시다.
# nanochat의 핵심 구조를 보여주는 간단한 예시
# 실제 프로젝트는 이보다 훨씬 정교합니다
class NanoChat:
def __init__(self, model_path):
# 사전 학습된 모델을 로드합니다
self.model = load_pretrained(model_path)
self.tokenizer = Tokenizer()
def chat(self, user_message):
# 사용자 입력을 토큰으로 변환
tokens = self.tokenizer.encode(user_message)
# 모델이 다음 토큰들을 생성
response_tokens = self.model.generate(tokens)
# 토큰을 다시 텍스트로 변환
return self.tokenizer.decode(response_tokens)
김개발 씨는 입사 6개월 차 주니어 개발자입니다. 요즘 회사에서 AI 관련 프로젝트가 늘어나면서, 자연스럽게 대규모 언어 모델(LLM)에 관심을 갖게 되었습니다.
하지만 ChatGPT 같은 서비스를 만들려면 천문학적인 비용이 든다는 이야기를 듣고 좌절했습니다. 그러던 어느 날, 선배 개발자 박시니어 씨가 흥미로운 소식을 전해주었습니다.
"김개발 씨, Andrej Karpathy라고 알아? 테슬라 AI 총괄이었던 분인데, 100달러로 ChatGPT 만드는 프로젝트를 공개했대." nanochat이란 정확히 무엇일까요?
쉽게 비유하자면, nanochat은 마치 비행기 조종 시뮬레이터와 같습니다. 실제 비행기를 사려면 수백억이 필요하지만, 시뮬레이터로는 비행의 원리를 완벽하게 배울 수 있습니다.
nanochat도 마찬가지입니다. ChatGPT의 모든 핵심 원리를 담고 있으면서도, 개인 컴퓨터나 저렴한 클라우드 서비스로 직접 학습시킬 수 있습니다.
이 프로젝트가 특별한 이유는 교육적 가치에 있습니다. 단순히 작동하는 코드를 제공하는 것이 아니라, 왜 이렇게 작동하는지를 이해할 수 있도록 설계되었습니다.
코드 한 줄 한 줄에 Karpathy의 깊은 통찰이 담겨 있습니다. nanochat의 핵심 구성 요소는 크게 세 가지입니다.
첫째, 사전 학습(Pretraining) 단계에서 모델이 언어의 기본 구조를 배웁니다. 둘째, 지도 미세조정(SFT) 단계에서 질문에 답하는 방법을 학습합니다.
셋째, 강화학습(RLHF) 단계에서 더 나은 답변을 생성하도록 최적화됩니다. 이 세 단계는 ChatGPT가 실제로 학습되는 과정과 동일합니다.
다만 규모가 작을 뿐입니다. 마치 축소 모형 자동차가 실제 자동차의 모든 부품을 갖추고 있는 것처럼, nanochat도 대규모 언어 모델의 모든 핵심 요소를 포함하고 있습니다.
실제로 nanochat으로 학습한 모델은 놀라운 성능을 보여줍니다. 물론 GPT-4와 같은 최신 모델에 비할 바는 아니지만, 기본적인 대화와 질문 응답이 가능한 수준입니다.
더 중요한 것은, 이 과정을 직접 경험하면서 AI의 작동 원리를 체득할 수 있다는 점입니다. 박시니어 씨의 설명을 들은 김개발 씨는 눈이 반짝였습니다.
"그러니까 이걸 직접 만들어보면, AI가 어떻게 작동하는지 제대로 이해할 수 있다는 거죠?" 박시니어 씨가 고개를 끄덕였습니다. "정확해.
이론만 공부하는 것보다 백 배는 나을 거야." nanochat은 단순한 토이 프로젝트가 아닙니다. 이것은 AI 시대를 살아가는 개발자들을 위한 필수 교과서입니다.
100달러라는 접근 가능한 비용으로, 수조 원짜리 기술의 핵심을 배울 수 있는 기회입니다.
실전 팁
💡 - nanochat을 시작하기 전에 기본적인 Python과 PyTorch 지식이 필요합니다
- GPU가 없어도 클라우드 서비스(Lambda Labs 등)를 활용하면 충분히 학습 가능합니다
2. Karpathy가 만든 이유
김개발 씨는 nanochat에 대해 더 알아보다가 문득 궁금해졌습니다. "도대체 왜 이런 프로젝트를 만든 거지?
이미 ChatGPT가 있는데?" 이 질문에 답하려면, 먼저 Andrej Karpathy라는 인물을 알아야 합니다.
Andrej Karpathy는 AI 분야의 전설적인 인물입니다. 테슬라의 AI 총괄, OpenAI의 창립 멤버를 거친 그는 "AI 민주화"를 평생의 사명으로 삼고 있습니다.
nanochat은 그의 철학이 집약된 프로젝트로, 누구나 AI의 핵심을 이해하고 직접 만들어 볼 수 있도록 하기 위해 탄생했습니다.
다음 코드를 살펴봅시다.
# Karpathy의 철학이 담긴 코드 스타일
# 복잡한 것을 단순하게, 단순한 것을 명확하게
def train_step(model, batch, optimizer):
"""
한 번의 학습 단계 - Karpathy 스타일로 명확하게
복잡한 추상화 없이 핵심만 담았습니다
"""
# 1. 순전파: 입력에서 출력까지
logits, loss = model(batch['input_ids'], batch['labels'])
# 2. 역전파: 기울기 계산
loss.backward()
# 3. 가중치 업데이트
optimizer.step()
optimizer.zero_grad()
return loss.item()
Andrej Karpathy를 모르는 개발자는 아마 없을 것입니다. 스탠퍼드에서 컴퓨터 비전으로 박사 학위를 받고, OpenAI의 창립 멤버로 활동했으며, 테슬라에서 자율주행 AI를 총괄했던 인물입니다.
하지만 그를 진정으로 특별하게 만드는 것은 따로 있습니다. Karpathy는 타고난 교육자입니다.
그의 유튜브 채널과 블로그는 AI를 공부하는 사람들의 필수 코스가 되었습니다. 복잡한 개념을 누구나 이해할 수 있도록 풀어내는 능력이 탁월합니다.
그가 만든 "Neural Networks: Zero to Hero" 시리즈는 수백만 조회수를 기록하며 수많은 개발자들의 AI 입문을 도왔습니다. 그렇다면 왜 nanochat을 만들었을까요?
첫 번째 이유는 투명성입니다. ChatGPT가 세상을 바꾸고 있지만, 대부분의 사람들은 그것이 어떻게 작동하는지 모릅니다.
마치 자동차를 운전하면서 엔진이 어떻게 돌아가는지 전혀 모르는 것과 같습니다. Karpathy는 이 "블랙박스"를 열어 보여주고 싶었습니다.
두 번째 이유는 접근성입니다. GPT-4를 학습시키려면 수천만 달러가 필요합니다.
일반 개발자는 엄두도 낼 수 없는 금액입니다. Karpathy는 핵심 원리만 남기고 규모를 줄여, 100달러로도 전체 과정을 경험할 수 있게 만들었습니다.
세 번째 이유는 실용성입니다. 이론만 아는 것과 직접 해보는 것은 하늘과 땅 차이입니다.
nanochat을 통해 개발자들은 사전 학습, 미세조정, 강화학습의 전 과정을 손으로 만져볼 수 있습니다. Karpathy는 자신의 유튜브 영상에서 이렇게 말했습니다.
"저는 LLM을 처음부터 끝까지 재현하고 싶었습니다. 전체 파이프라인을, 가능한 한 간단하고 hackable하게요." 여기서 hackable이라는 단어가 중요합니다.
이것은 누구나 코드를 열어보고, 수정하고, 실험해 볼 수 있다는 뜻입니다. 상용 서비스처럼 꽁꽁 숨겨진 것이 아니라, 마치 레고 블록처럼 분해하고 재조립할 수 있습니다.
박시니어 씨가 김개발 씨에게 덧붙였습니다. "Karpathy의 코드를 읽어보면 알겠지만, 정말 깔끔해.
복잡한 추상화 없이 핵심만 담겨 있어. 그래서 배우기 좋은 거야." 실제로 nanochat의 코드는 놀라울 정도로 읽기 쉽습니다.
수천 줄의 복잡한 프레임워크 대신, 핵심 로직만 담긴 간결한 코드가 있습니다. 이것이 바로 Karpathy의 교육 철학입니다.
복잡한 것을 단순하게, 단순한 것을 명확하게. nanochat은 단순한 오픈소스 프로젝트가 아닙니다.
이것은 AI 시대의 교육 혁명입니다. Karpathy는 자신의 지식과 경험을 아낌없이 나누며, 다음 세대의 AI 개발자들을 키워내고 있습니다.
실전 팁
💡 - Karpathy의 유튜브 채널 "Neural Networks: Zero to Hero" 시리즈를 먼저 시청하면 nanochat 이해가 훨씬 쉬워집니다
- 그의 GitHub에서 nanoGPT, minGPT 등 이전 프로젝트들도 함께 살펴보세요
3. 비용 비교 100달러 vs 800달러 vs 1000달러
김개발 씨가 nanochat을 공부하다가 재미있는 사실을 발견했습니다. 프로젝트 문서에 세 가지 다른 학습 옵션이 있었습니다.
"$100 모델", "$800 모델", "$1000 모델". 도대체 무슨 차이가 있는 걸까요?
nanochat은 예산에 따라 세 가지 학습 옵션을 제공합니다. $100 모델은 4시간 만에 기본적인 챗봇을 만들 수 있고, $800 모델은 하루 정도 걸리지만 훨씬 똑똑하며, $1000 모델은 벤치마크에서 인상적인 성능을 보여줍니다.
예산과 목적에 따라 선택할 수 있습니다.
다음 코드를 살펴봅시다.
# 각 모델별 설정 비교
# 실제 nanochat의 config 파일 구조를 단순화했습니다
configs = {
"100_dollar": {
"model_size": "tiny", # 작은 모델
"training_time": "4 hours", # 빠른 학습
"gpu": "1x H100", # GPU 1개
"tokens": "10B", # 100억 토큰
"use_case": "학습/실험용"
},
"800_dollar": {
"model_size": "small", # 중간 모델
"training_time": "1 day", # 하루 정도
"gpu": "1x H100", # GPU 1개
"tokens": "100B", # 1000억 토큰
"use_case": "실용적 챗봇"
},
"1000_dollar": {
"model_size": "medium", # 더 큰 모델
"training_time": "2 days", # 이틀 정도
"gpu": "8x H100", # GPU 8개
"tokens": "200B+", # 2000억+ 토큰
"use_case": "벤치마크 도전"
}
}
대규모 언어 모델을 학습시키는 데 얼마나 들까요? GPT-4의 경우 학습 비용만 수천만 달러로 추정됩니다.
일반 개발자에게는 그야말로 꿈같은 이야기입니다. 하지만 nanochat은 이 장벽을 획기적으로 낮췄습니다.
먼저 $100 모델을 살펴보겠습니다. 이것은 nanochat의 "speedrun" 버전입니다.
Lambda Labs의 H100 GPU 1개를 4시간 동안 사용하면 됩니다. 시간당 약 $2.49에 4시간이니 GPU 비용만 약 $10 정도입니다.
나머지 비용은 추가적인 실험과 데이터 처리에 들어갑니다. $100 모델로 만들어진 챗봇은 기본적인 대화가 가능합니다.
물론 GPT-4처럼 복잡한 추론을 하거나 긴 맥락을 기억하지는 못합니다. 하지만 "Hello, how are you?"라고 물으면 "I'm doing well, thank you for asking!"이라고 자연스럽게 대답합니다.
학습 목적으로는 충분합니다. 다음은 $800 모델입니다.
이 버전은 훨씬 더 많은 데이터로 학습됩니다. 약 1000억 개의 토큰을 처리하며, 학습 시간은 하루 정도 걸립니다.
결과물은 놀랍습니다. 간단한 코딩 질문에 답할 수 있고, 기본적인 추론도 가능합니다.
마지막으로 $1000 모델입니다. 이 버전은 여러 대의 GPU를 병렬로 사용합니다.
학습 데이터도 2000억 토큰 이상으로 늘어납니다. 결과물은 일부 벤치마크에서 상용 모델들과 비교할 만한 성능을 보여줍니다.
김개발 씨가 박시니어 씨에게 물었습니다. "저는 뭘로 시작해야 할까요?" 박시니어 씨가 대답했습니다.
"처음이라면 무조건 $100 버전부터 시작해. 전체 과정을 빠르게 경험하는 게 중요하거든." 여기서 중요한 점이 있습니다.
이 비용은 학습 비용입니다. 한 번 학습이 완료되면, 그 모델은 영원히 사용할 수 있습니다.
마치 책을 한 번 사면 평생 읽을 수 있는 것처럼요. 또한 이 비용들은 클라우드 GPU를 사용할 때의 비용입니다.
만약 본인 소유의 GPU가 있다면 비용은 전기료만 들 뿐입니다. RTX 4090 같은 고성능 게이밍 GPU로도 시간은 더 걸리지만 학습이 가능합니다.
재미있는 것은 비용 대비 성능의 변화입니다. $100에서 $800로 8배를 투자하면, 성능은 대략 2-3배 좋아집니다.
$800에서 $1000으로 25%만 더 투자해도 상당한 성능 향상이 있습니다. 이것은 **스케일링 법칙(Scaling Law)**이라고 불리는 현상을 직접 체험할 수 있는 기회이기도 합니다.
박시니어 씨가 마지막으로 조언했습니다. "비용만 보지 말고, 네가 뭘 배우고 싶은지 생각해봐.
AI의 원리를 이해하고 싶다면 $100으로 충분해. 실제로 쓸 수 있는 챗봇을 원한다면 $800을 고려해볼 만하고." 결국 중요한 것은 목적입니다.
학습과 이해가 목적이라면 $100 버전으로 충분합니다. 실용적인 결과물이 필요하다면 더 투자할 수 있습니다.
선택은 여러분의 몫입니다.
실전 팁
💡 - 처음 시작한다면 반드시 $100 버전부터 시작하세요. 실패해도 손실이 적습니다
- Lambda Labs 외에도 vast.ai, runpod.io 등 저렴한 GPU 대여 서비스가 있습니다
4. speedrun으로 4시간 만에 ChatGPT 만들기
김개발 씨는 드디어 실전에 돌입하기로 했습니다. nanochat 저장소를 클론하고 README를 읽어보니, "speedrun.sh"라는 파일이 눈에 들어왔습니다.
설명에는 "4시간 만에 ChatGPT 만들기"라고 적혀 있었습니다. 정말 가능한 걸까요?
speedrun.sh는 nanochat의 핵심 스크립트입니다. 이 하나의 파일을 실행하면 데이터 다운로드부터 사전 학습, 미세조정, 강화학습까지 전 과정이 자동으로 진행됩니다.
마치 요리 레시피처럼, 정해진 순서대로 모든 재료가 조리되어 완성된 요리가 나오는 것과 같습니다.
다음 코드를 살펴봅시다.
#!/bin/bash
# speedrun.sh의 핵심 구조를 단순화한 버전
# 실제 스크립트는 더 많은 설정과 에러 처리를 포함합니다
echo "Step 1: 데이터 다운로드 및 전처리"
python data/fineweb_edu.py # 교육용 웹 데이터
python data/hellaswag.py # 평가용 데이터셋
echo "Step 2: 사전 학습 (Pretraining)"
python train.py --config configs/pretrain.yaml
echo "Step 3: 지도 미세조정 (SFT)"
python train.py --config configs/sft.yaml
echo "Step 4: 강화학습 (RLHF)"
python train.py --config configs/rlhf.yaml
echo "완료! 당신만의 ChatGPT가 준비되었습니다"
프로그래밍을 배울 때 가장 좋은 방법은 무엇일까요? 바로 직접 해보는 것입니다.
nanochat의 speedrun.sh는 이 철학을 완벽하게 구현합니다. 복잡한 설정 없이, 단 하나의 명령어로 전체 과정을 경험할 수 있습니다.
먼저 환경을 준비해야 합니다. Lambda Labs에서 H100 GPU 인스턴스를 대여합니다.
시간당 약 $2.49입니다. SSH로 접속한 후, nanochat 저장소를 클론합니다.
필요한 패키지를 설치하고 나면 준비 완료입니다. 이제 마법의 명령어를 실행합니다.
./speedrun.sh 첫 번째 단계는 데이터 준비입니다. FineWeb-Edu라는 교육용 웹 데이터셋을 다운로드합니다.
이 데이터셋은 교육적 가치가 높은 웹 페이지들을 모아놓은 것입니다. 약 100억 개의 토큰이 준비됩니다.
두 번째 단계는 **사전 학습(Pretraining)**입니다. 이 단계에서 모델은 언어의 기본 구조를 배웁니다.
"The cat sat on the"라는 문장 다음에 "mat"이 올 확률이 높다는 것을 학습합니다. 마치 아기가 말을 배우는 것과 비슷합니다.
수많은 문장을 보면서 언어의 패턴을 익힙니다. 세 번째 단계는 **지도 미세조정(SFT, Supervised Fine-Tuning)**입니다.
사전 학습된 모델은 텍스트를 이어쓰는 것만 알지, 질문에 답하는 방법은 모릅니다. 이 단계에서 "질문-답변" 형식의 데이터로 학습시켜, 대화하는 방법을 가르칩니다.
네 번째 단계는 **강화학습(RLHF, Reinforcement Learning from Human Feedback)**입니다. 여기서 모델은 "더 좋은" 답변이 무엇인지 배웁니다.
사람이 선호하는 답변 스타일, 안전하고 유용한 응답 방식 등을 학습합니다. 이 단계가 ChatGPT를 특별하게 만드는 비밀입니다.
김개발 씨가 터미널 화면을 바라보며 기다렸습니다. 로그가 빠르게 스크롤되었습니다.
loss 값이 점점 낮아지는 것이 보였습니다. 약 4시간 후, 드디어 "Training complete!"라는 메시지가 나타났습니다.
"진짜 됐어?" 김개발 씨가 흥분된 목소리로 말했습니다. 테스트 스크립트를 실행해보았습니다.
"What is the capital of France?"라고 물었더니, "The capital of France is Paris."라고 답했습니다. 완벽하지는 않지만, 분명히 작동하는 챗봇이었습니다.
speedrun.sh의 진정한 가치는 단순함에 있습니다. 복잡한 설정 파일을 만질 필요도 없고, 여러 스크립트를 순서대로 실행할 필요도 없습니다.
한 번의 명령으로 전체 파이프라인이 실행됩니다. 물론 처음에는 그냥 실행만 해도 됩니다.
하지만 진정한 학습은 그 다음입니다. speedrun.sh 파일을 열어보세요.
각 단계가 어떻게 연결되어 있는지 살펴보세요. config 파일들을 수정해보세요.
하이퍼파라미터를 바꿔보고 결과가 어떻게 달라지는지 실험해보세요. 박시니어 씨가 말했습니다.
"speedrun은 시작점이야. 거기서 멈추지 말고, 왜 이렇게 작동하는지 파고들어봐.
그게 진짜 공부야."
실전 팁
💡 - 첫 실행은 그대로 두고, 성공한 후에 설정을 하나씩 바꿔가며 실험해보세요
- 학습 중 loss 그래프를 지켜보면 모델이 어떻게 학습되는지 직관적으로 이해할 수 있습니다
5. nanoGPT와의 차이점
김개발 씨가 GitHub에서 nanochat을 검색하다가 비슷한 이름의 프로젝트를 발견했습니다. "nanoGPT"라는 것이었습니다.
둘 다 Karpathy가 만들었고, 이름도 비슷한데 뭐가 다른 걸까요? 혼란스러워진 김개발 씨는 박시니어 씨에게 물었습니다.
nanoGPT와 nanochat은 모두 Karpathy의 교육용 프로젝트지만, 목적이 다릅니다. nanoGPT는 GPT-2를 재현하여 "텍스트 생성"에 집중하고, nanochat은 ChatGPT를 재현하여 "대화형 AI"에 집중합니다.
마치 자동차와 택시의 차이와 같습니다. 둘 다 자동차지만, 용도가 다릅니다.
다음 코드를 살펴봅시다.
# nanoGPT vs nanochat 핵심 차이 비교
# nanoGPT: 텍스트 완성 (GPT-2 스타일)
class NanoGPT:
def generate(self, prompt):
# 주어진 텍스트를 이어서 작성
return self.model.complete(prompt)
# 예시: "The quick brown fox" → "jumps over the lazy dog"
# nanochat: 대화형 응답 (ChatGPT 스타일)
class NanoChat:
def chat(self, user_message):
# 시스템 프롬프트 + 대화 히스토리 처리
formatted = self.format_chat(user_message)
# SFT + RLHF가 적용된 응답 생성
return self.model.respond(formatted)
# 예시: "What is Python?" → "Python is a programming language..."
Karpathy는 지난 몇 년간 여러 교육용 프로젝트를 공개해왔습니다. minGPT, nanoGPT, 그리고 nanochat까지.
이름만 보면 비슷해 보이지만, 각각 다른 시대의 AI 기술을 반영하고 있습니다. nanoGPT는 2022년에 공개되었습니다.
이것은 OpenAI의 GPT-2를 재현한 프로젝트입니다. GPT-2는 "텍스트 완성" 모델입니다.
문장의 시작 부분을 주면, 나머지를 이어서 작성합니다. "Once upon a time"이라고 주면, 동화 같은 이야기를 써내려갑니다.
nanoGPT로 만든 모델에게 "What is the capital of France?"라고 물으면 어떻게 될까요? 아마도 이렇게 대답할 것입니다.
"What is the capital of France? What is the capital of Germany?
What is the capital of..."처럼 비슷한 질문을 계속 생성할 가능성이 높습니다. 질문에 "답하는" 방법을 배우지 않았기 때문입니다.
반면 nanochat은 2024년에 공개되었습니다. 이것은 ChatGPT를 재현한 프로젝트입니다.
같은 질문을 하면 "The capital of France is Paris."라고 답합니다. 대화의 맥락을 이해하고, 질문에 적절히 응답하는 방법을 알고 있습니다.
이 차이는 어디서 올까요? 바로 학습 방법의 차이입니다.
nanoGPT는 오직 **사전 학습(Pretraining)**만 합니다. 대량의 텍스트를 보면서 "다음 단어 예측"을 반복합니다.
이것만으로도 언어의 구조와 지식을 학습할 수 있습니다. nanochat은 여기에 두 단계를 더 추가합니다.
**지도 미세조정(SFT)**에서 질문-답변 형식을 학습하고, **강화학습(RLHF)**에서 더 좋은 답변을 생성하는 방법을 배웁니다. 이 추가 단계들이 "텍스트 생성기"를 "대화형 AI"로 변환시킵니다.
박시니어 씨가 좋은 비유를 들어주었습니다. "nanoGPT는 글쓰기를 잘하는 사람이야.
나nanochat은 상담사 같은 사람이지. 둘 다 말을 잘하지만, 한 명은 독백을 하고, 한 명은 대화를 해." 코드 구조도 다릅니다.
nanoGPT는 단순합니다. model.py와 train.py 정도면 핵심이 다 들어있습니다.
반면 nanochat은 더 복잡합니다. 데이터 처리, 사전 학습, SFT, RLHF 각각의 모듈이 있고, 이들을 연결하는 파이프라인이 있습니다.
그렇다면 어떤 것을 먼저 공부해야 할까요? 추천하는 순서는 이렇습니다.
먼저 nanoGPT로 시작하세요. Transformer의 기본 구조와 사전 학습의 원리를 이해하기에 좋습니다.
코드가 간결해서 읽기도 쉽습니다. 그 다음 nanochat으로 넘어가세요.
nanoGPT에서 배운 기초 위에, SFT와 RLHF라는 새로운 개념을 쌓을 수 있습니다. 현대 AI 챗봇이 어떻게 만들어지는지 완전히 이해하게 됩니다.
김개발 씨가 고개를 끄덕였습니다. "아, 그러니까 nanoGPT가 기초고, nanochat이 심화 과정인 셈이네요." 박시니어 씨가 웃으며 답했습니다.
"정확해. 둘 다 공부하면 LLM의 거의 모든 것을 이해하게 될 거야."
실전 팁
💡 - nanoGPT를 먼저 학습한 후 nanochat으로 넘어가면 이해가 훨씬 쉬워집니다
- 두 프로젝트의 model.py를 비교해보면 핵심적인 차이점을 파악할 수 있습니다
6. 프로젝트 구조 전체 살펴보기
이제 김개발 씨는 nanochat을 직접 뜯어볼 준비가 되었습니다. 터미널에서 ls -la를 입력하자 수많은 파일과 폴더가 나타났습니다.
어디서부터 시작해야 할지 막막했습니다. 박시니어 씨가 옆에서 안내를 시작했습니다.
nanochat의 프로젝트 구조는 학습 파이프라인을 그대로 반영합니다. data 폴더에는 데이터 처리 스크립트가, train 폴더에는 학습 코드가, configs 폴더에는 설정 파일이 있습니다.
각 폴더가 하나의 단계를 담당하므로, 구조를 이해하면 전체 흐름이 보입니다.
다음 코드를 살펴봅시다.
nanochat/
├── data/ # 데이터 처리 모듈
│ ├── fineweb_edu.py # 사전학습용 웹 데이터
│ ├── sft_data.py # 미세조정용 대화 데이터
│ └── hellaswag.py # 평가용 벤치마크
├── train/ # 학습 코드
│ ├── pretrain.py # 사전 학습 (언어 모델링)
│ ├── sft.py # 지도 미세조정
│ └── rlhf.py # 강화학습
├── model/ # 모델 아키텍처
│ ├── gpt.py # GPT 모델 정의
│ └── tokenizer.py # 토크나이저
├── configs/ # 설정 파일
│ └── *.yaml # 각 단계별 하이퍼파라미터
├── speedrun.sh # 한 번에 실행하는 스크립트
└── README.md # 문서
좋은 코드는 구조만 봐도 무엇을 하는지 알 수 있습니다. nanochat의 디렉토리 구조는 바로 그런 코드입니다.
폴더 이름만 봐도 각각 어떤 역할을 하는지 직관적으로 이해할 수 있습니다. 가장 먼저 data 폴더를 살펴보겠습니다.
이 폴더에는 데이터를 준비하는 스크립트들이 있습니다. fineweb_edu.py는 사전 학습에 사용할 교육용 웹 데이터를 다운로드하고 전처리합니다.
sft_data.py는 미세조정에 사용할 대화 데이터를 준비합니다. 데이터 없이는 학습이 불가능하므로, 이 폴더가 모든 것의 시작점입니다.
다음은 model 폴더입니다. 여기에 신경망의 심장이 있습니다.
gpt.py에는 GPT 모델의 전체 구조가 정의되어 있습니다. Transformer 블록, 어텐션 메커니즘, 피드포워드 네트워크 등 모든 것이 이 파일 안에 있습니다.
Karpathy 스타일답게 단일 파일에 모든 것이 담겨 있어, 전체 구조를 한눈에 파악할 수 있습니다. train 폴더는 학습의 세 단계를 담당합니다.
pretrain.py는 사전 학습을, sft.py는 지도 미세조정을, rlhf.py는 강화학습을 수행합니다. 각 파일이 하나의 학습 단계만 담당하므로, 코드를 읽을 때 혼란이 없습니다.
configs 폴더에는 YAML 형식의 설정 파일들이 있습니다. 학습률, 배치 크기, 에폭 수 등 모든 하이퍼파라미터가 여기에 정의되어 있습니다.
코드를 수정하지 않고도 설정 파일만 바꿔서 다양한 실험을 할 수 있습니다. 그리고 이 모든 것을 하나로 묶는 것이 바로 speedrun.sh입니다.
이 쉘 스크립트는 데이터 준비 → 사전 학습 → SFT → RLHF의 전체 파이프라인을 순서대로 실행합니다. 한 번의 명령으로 모든 것이 돌아갑니다.
박시니어 씨가 조언했습니다. "처음에는 speedrun.sh를 실행해서 전체 흐름을 경험해봐.
그 다음에 각 단계를 하나씩 뜯어보는 거야." 실제로 코드를 읽는 순서도 중요합니다. 먼저 model/gpt.py를 읽어보세요.
Transformer의 구조를 이해해야 나머지가 이해됩니다. 그 다음 train/pretrain.py를 읽으면서 학습이 어떻게 진행되는지 파악합니다.
마지막으로 sft.py와 rlhf.py를 읽으면 전체 그림이 완성됩니다. 각 파일의 길이도 인상적입니다.
gpt.py는 약 300줄, pretrain.py는 약 200줄 정도입니다. 일반적인 딥러닝 프레임워크의 코드가 수천, 수만 줄인 것에 비하면 놀라울 정도로 간결합니다.
이것이 Karpathy 코드의 특징입니다. 핵심만 남기고 나머지는 과감히 버립니다.
김개발 씨가 코드를 읽어 내려가다가 감탄했습니다. "진짜 깔끔하네요.
주석도 잘 달려있고, 변수 이름도 직관적이에요." 박시니어 씨가 고개를 끄덕였습니다. "Karpathy는 교육자야.
코드를 쓸 때도 '이걸 읽는 사람이 이해할 수 있을까?'를 항상 생각해." 마지막으로 tests 폴더와 scripts 폴더도 있습니다. tests에는 각 모듈의 테스트 코드가, scripts에는 유틸리티 스크립트들이 있습니다.
처음 공부할 때는 이 폴더들은 나중에 봐도 됩니다. 전체 구조를 이해했다면, 이제 직접 실험해볼 차례입니다.
config 파일의 값을 바꿔보고, 결과가 어떻게 달라지는지 관찰해보세요. 모델 크기를 줄여보거나, 학습률을 바꿔보세요.
이런 실험을 통해 이론이 체화됩니다.
실전 팁
💡 - 먼저 model/gpt.py를 읽고, 그 다음 train 폴더의 파일들을 순서대로 읽어보세요
- configs 폴더의 YAML 파일들을 수정해가며 다양한 실험을 해보는 것이 좋습니다
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.