TopGit
Đánh giá repo GitHub

nanochat: tự train GPT-2 chỉ với khoảng $48

karpathy/nanochat
NTopGit review image for karpathy/nanochat
Review by Topgit.dev for karpathy/nanochat, with GitHub repository stats and README context.
Nhận định nhanh

nanochat là bộ khung tối giản của Andrej Karpathy để train một mô hình chat kiểu GPT-2 trên một node GPU duy nhất, đóng gói trọn pipeline trong một codebase dễ đọc thay vì một framework cồng kềnh. Không có mê cung config ở đây: một núm vặn `--depth` duy nhất thay đổi kích thước cả mô hình. Sự tập trung đó khiến nanochat trở thành công cụ học tập và nghịch code thực sự tốt, chứ không phải một serving stack cho production.

Sao
★ 58.7k
Fork
⑂ 8.2k
Ngôn ngữ
Python
Giấy phép
MIT
Chủ đề
AI Tools
Cập nhật
Sep 2026
Trang chủ
—
GitHub

nanochat là gì

nanochat là một codebase viết từ đầu để train một mô hình ngôn ngữ nhỏ kiểu ChatGPT trên một node GPU duy nhất, bao gồm tokenization, pretraining, finetuning, evaluation và inference trong cùng một chỗ. Một núm vặn duy nhất, `--depth`, quy định kích thước transformer và tự suy ra phần còn lại của hyperparameter. Script tham chiếu `runs/speedrun.sh` chạy trọn pipeline đó trên một node 8xH100 và đưa cho bạn một CLI để chat khi xong.

nanochat phủ những gì từ đầu đến cuối

  • ✓Pipeline đầy đủ trong một repo: train tokenizer (BPE kiểu GPT-4), pretraining, supervised finetuning, RL, evaluation và inference đều nằm trong `nanochat/` và `scripts/`.
  • ✓Một núm vặn độ phức tạp duy nhất: đặt `--depth` cho transformer sẽ tự suy ra độ rộng, số attention head, lịch learning rate, thời lượng train và weight decay cho một mô hình compute-optimal ở kích thước đó.
  • ✓Kiểm soát precision tường minh thay vì `torch.amp.autocast` — một biến global `COMPUTE_DTYPE` duy nhất (bfloat16, float32 hoặc float16) tự nhận diện phần cứng và có thể ghi đè bằng biến môi trường `NANOCHAT_DTYPE`.
  • ✓Các tác vụ evaluation dựng sẵn — ARC, GSM8K, HumanEval, MMLU và SmolTalk — nằm trong `tasks/` để chấm điểm mô hình chat, cộng với một bộ đánh giá DCLM CORE score cho base model.
  • ✓Một inference engine dùng KV cache (`nanochat/engine.py`) và một module thực thi công cụ (`nanochat/execution.py`) cho phép mô hình đã train chạy code Python như một tool.
  • ✓Một bảng xếp hạng GPT-2 speedrun công khai, theo dõi thời gian wall-clock và DCLM CORE score để tái lập năng lực GPT-2, kèm commit và người đóng góp cho từng mục.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Cài đặt với uv

nanochat dùng uv để quản lý dependency thay vì một requirements.txt thuần hay môi trường Conda. Chạy `uv sync --extra gpu` trên máy CUDA (A100, H100, v.v.) hoặc `uv sync --extra cpu` cho CPU-only hay Apple Silicon, sau đó `source .venv/bin/activate`. Nếu định sửa code, thêm `--group dev` vào lệnh sync gpu để cài thêm pytest, matplotlib, ipykernel và transformers phục vụ development. Không có package pip riêng để cài — bạn clone repo và làm việc ngay bên trong đó.

Chạy script speedrun GPT-2

Toàn bộ workflow tái lập GPT-2 nằm trong một file, `runs/speedrun.sh`, thiết kế để chạy trên node 8xH100 — thuê một node GPU từ nhà cung cấp cloud, chạy `bash runs/speedrun.sh` trong một screen session, rồi chờ khoảng 1,5 giờ. Xong thì activate lại venv và chạy `python -m scripts.chat_cli` để chat với mô hình qua một CLI đơn giản. Cùng đoạn code đó chạy được trên một GPU đơn bằng cách bỏ `torchrun`, chuyển sang gradient accumulation, nhưng bạn sẽ phải chờ lâu gấp khoảng tám lần. Nếu GPU có dưới 80GB VRAM, bạn cần giảm `--device-batch-size` từ mặc định 32 xuống 16, 8, 4, 2 hoặc 1 cho tới khi hết out-of-memory.

Điểm mạnh

  • ✓Một file duy nhất (`runs/speedrun.sh`) đưa bạn từ một máy GPU trắng tinh đến một mô hình chat được ngay — không cần tự ráp data pipeline, train tokenizer hay dựng eval harness riêng.
  • ✓Núm vặn `--depth` loại bỏ cả một mảng đoán mò hyperparameter: chọn kích thước mô hình, còn độ rộng, số head, learning rate và weight decay đều được suy ra sẵn.
  • ✓Precision tường minh và dễ kiểm tra (`COMPUTE_DTYPE` trong `nanochat/common.py`) thay vì giấu trong `autocast`, điều này quan trọng khi bạn debug số liệu trên phần cứng lạ.
  • ✓Codebase đủ nhỏ để đọc trọn từ đầu đến cuối, đúng trọng tâm nếu mục tiêu của bạn là hiểu cách pretraining, SFT và RL thực sự hoạt động thay vì coi chúng như hộp đen.

Những gì nanochat chưa làm được (ít nhất là chưa)

  • △Chính README cũng nói phần lớn code chưa được thử nghiệm trên phần cứng ngoài CUDA — xpu và các backend không phải NVIDIA/Apple chưa được kiểm chứng và có thể còn lỗi vặt.
  • △Train float16 được hỗ trợ GradScaler tự động cho giai đoạn SFT, nhưng README nói RL training hiện chưa có — bạn chỉ dùng được bfloat16 hoặc float32 ở đó.
  • △Chạy trên CPU hay Apple Silicon (`runs/runcpu.sh`) thu nhỏ mô hình rất nhiều, đến mức README cảnh báo bạn sẽ không có kết quả tốt. Đây chỉ là smoke test, không phải một hướng train thật sự.
  • △Đây là codebase nghiên cứu của một cá nhân, thiết kế cố tình chống framework: không có config object, không có model factory, nên muốn mở rộng thì phải sửa thẳng script chứ không truyền vào một config.

Lựa chọn thay thế để train LLM quy mô nhỏ

nanoGPT — dự án trước đó, hẹp hơn, của chính Karpathy; nanochat gần như là phiên bản kế thừa, phủ thêm finetuning, RL và evaluation trên nền pretraining-only của nanoGPT. ↗LLMs-from-scratch — một dự án sách kèm code để học cách LLM được xây dựng từng dòng; chậm và mang tính giải thích hơn cách tiếp cận chạy-script-ra-mô-hình của nanochat. ↗unsloth — một thư viện tập trung vào finetuning, giúp SFT và LoRA nhanh và rẻ hơn trên GPU nhỏ, thay vì phủ trọn pipeline từ pretrain đến chat như nanochat. ↗transformers — thư viện tổng quát của HuggingFace để train và chạy rất nhiều kiến trúc mô hình; linh hoạt hơn nhưng cũng nhiều code hơn hẳn so với pipeline cố định, duy nhất của nanochat. ↗

Câu hỏi thường gặp

Cần phần cứng gì để chạy nanochat?

Workflow tham chiếu của nanochat, `runs/speedrun.sh`, được thiết kế cho một node 8xH100 thuê từ nhà cung cấp cloud; README ghi rằng nó cũng chạy được trên node 8xA100, chỉ chậm hơn. Bạn cũng chạy được trên một GPU đơn, nhưng train sẽ lâu gấp khoảng tám lần vì tính song song của torchrun chính là thứ giúp lượt chạy 8 GPU nhanh hơn.

Train một mô hình GPT-2 class với nanochat mất bao lâu?

Train một mô hình GPT-2 class bằng script speedrun của nanochat mất khoảng 1,5 giờ trên node 8xH100, theo README, vốn cũng ghi con số này đã giảm từ khoảng 3 giờ ở các bản script trước đó. Với giá GPU cloud hiện tại, README tính chi phí compute cho lượt chạy đó vào khoảng $48.

nanochat có miễn phí không và dùng license gì?

nanochat được phát hành theo license MIT, nên bạn được tự do dùng, sửa và phân phối lại, kể cả cho mục đích thương mại. README có yêu cầu pull request công khai phần nào được viết với sự hỗ trợ đáng kể từ LLM, nhưng đó là quy định đóng góp, không phải giới hạn khi sử dụng code.

Chạy nanochat trên một GPU tiêu dùng hay CPU được không?

Được — README nói toàn bộ code chạy trên một GPU đơn chỉ bằng cách bỏ `torchrun`, cho kết quả gần như giống hệt nhờ gradient accumulation thay vì chạy song song, dù bạn sẽ phải chờ lâu hơn nhiều lần. Cũng có sẵn script `runs/runcpu.sh` riêng cho CPU hoặc Apple Silicon, nhưng README cảnh báo nó thu nhỏ mô hình đến mức kết quả sẽ không mạnh.

nanochat khác nanoGPT ở điểm nào?

nanochat là dự án nối tiếp nanoGPT của Andrej Karpathy, và README mô tả nanoGPT chỉ phủ phần pretraining. nanochat mở rộng ra trọn pipeline — tokenization, pretraining, supervised finetuning, reinforcement learning, evaluation và inference — nên bạn có được một mô hình chat nói chuyện được, chứ không chỉ một checkpoint base model.

nanochat có hỗ trợ fine-tuning và RL training không?

Có — thư mục `scripts/` của nanochat gồm `chat_sft.py` cho supervised finetuning và `chat_rl.py` cho reinforcement learning trên nền base model đã pretrain. README lưu ý một điểm về precision: train float16 được hỗ trợ GradScaler tự động cho SFT, nhưng chưa có cho RL training.

Vấn đề mà nanochat giải quyết

Phần lớn code train LLM công khai hiện nay hoặc là script đồ chơi train một mô hình tí hon trong notebook, hoặc là một framework production như những hệ thống đứng sau các sản phẩm ChatGPT thực thụ, được bọc trong nhiều lớp config dành cho cả team chứ không phải một người dùng GPU đi thuê. nanochat nằm ở khoảng giữa: nó chạy trọn pipeline từ tokenize đến chat, cho ra một mô hình GPT-2 class thật sự nói chuyện được, trên phần cứng mà một người có thể thuê trong vài giờ, mà không giấu giai đoạn nào sau lớp trừu tượng.

Trường hợp sử dụng tốt nhất

  • •Học cách một mô hình kiểu ChatGPT thực sự được xây dựng, từng giai đoạn một, bằng cách đọc và chạy code train thật thay vì xem sơ đồ hay đọc blog post.
  • •Chạy vòng lặp thử nghiệm nhanh tại chỗ — ví dụ trong README train một mô hình 12 layer, cỡ GPT-1, trong khoảng 5 phút để test một thay đổi code trước khi chạy full GPT-2 class.
  • •Tái lập một điểm cụ thể trên đường cong compute-optimal scaling cho nghiên cứu, dùng `runs/scaling_laws.sh` hoặc `runs/miniseries.sh` để quét `--depth` qua một dải kích thước mô hình.
  • •Có một mô hình ngôn ngữ nhỏ, chat được thật sự, với chi phí khoảng $48 tiền GPU cloud, mà không cần license một mô hình hosted hay xin API access.

Ai nên thử — và ai nên bỏ qua

nanochat hợp với developer và researcher muốn tự tay chạy mọi giai đoạn train LLM — tokenizer, pretraining, SFT, RL và inference — và không ngại thuê một node 8xH100 hoặc chờ một lượt train chậm hơn trên GPU đơn. Đây là lựa chọn tốt nếu bạn học bằng cách đọc code chạy thật, dày đặc, thay vì đọc documentation, và không phiền vì không có hệ thống config để dựa vào. Bỏ qua nếu bạn cần một mô hình chạy production ngay ngày mai, cần hỗ trợ multi-node hay phần cứng không phải NVIDIA mà README không hề nhắc tới, hoặc thà finetune một checkpoint có sẵn qua thư viện như transformers hay unsloth còn hơn train từ đầu.

Repo liên quan

Nguồn & ghi công

Thông tin và trích dẫn lấy từ repo GitHub karpathy/nanochat và README của repo (github.com/karpathy/nanochat).

Dữ liệu GitHub · đồng bộ lần cuối 15 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Chưa chắc nanochat có hợp với bạn?

Để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm bên dưới và xem AI nói gì về nanochat.

GitHub