TÓM TẮT
nanochat là khung huấn luyện LLM mã nguồn mở của Andrej Karpathy cho phép bạn huấn luyện một chatbot cấp độ GPT-2 với chi phí dưới 50 đô la trong khoảng 2 giờ. Dự án sử dụng một nút GPU 8xH100 duy nhất, mã tối giản (~500 dòng cho mô hình cốt lõi) và một công tắc cấu hình (--depth) để tự động tối ưu hóa tất cả các siêu tham số. Các kỷ lục hiện tại cho thấy việc huấn luyện hoàn thành trong 1,65 giờ với điểm CORE là 0,2626, đánh bại GPT-2 năm 2019 của OpenAI, vốn tiêu tốn 43.000 đô la và mất 168 giờ.
Giới thiệu
Huấn luyện một mô hình ngôn ngữ lớn từng đòi hỏi hàng triệu đô la và một nhóm các nhà nghiên cứu có bằng tiến sĩ. Những ngày đó đã qua.
Andrej Karpathy vừa phát hành nanochat, một dự án mã nguồn mở huấn luyện một AI đàm thoại có khả năng với chi phí ít hơn một bữa tối ngon miệng. Toàn bộ quy trình chạy trên một nút GPU 8xH100 duy nhất và hoàn thành trong vòng chưa đầy 2 giờ.
Tại sao điều này lại quan trọng lúc này
Bức tranh AI đã thay đổi đáng kể vào đầu năm 2026. Những gì OpenAI đã mất 168 giờ và 43.000 đô la vào năm 2019 giờ đây chỉ mất 1,65 giờ và 48 đô la. Đó là một sự tăng tốc gấp 100 lần nhờ những cải tiến về thuật toán, phần cứng tốt hơn và tối ưu hóa cộng đồng.
Đối với các nhà phát triển API và các nhóm xây dựng ứng dụng hỗ trợ AI, điều này thay đổi mọi thứ. Giờ đây, bạn có thể thử nghiệm với việc huấn luyện mô hình tùy chỉnh, kiểm tra các thay đổi kiến trúc và hiểu rõ hơn về nội bộ LLM mà không cần ngân sách cơ sở hạ tầng khổng lồ.
Những gì bạn sẽ học
Sau khi đọc bài viết này, bạn sẽ hiểu:
- Cách nanochat đạt được giảm chi phí gấp 100 lần so với huấn luyện LLM truyền thống
- Kiến trúc hoàn chỉnh (mô hình GPT, trình tối ưu hóa Muon, tải dữ liệu)
- Hướng dẫn từng bước để huấn luyện mô hình của riêng bạn
- Cách sử dụng nanochat để nghiên cứu và thử nghiệm LLM nhanh chóng
- Những hạn chế thực tế và khả năng của GPT-2 thực sự có ý nghĩa gì
nanochat là gì?
nanochat là một bộ khung huấn luyện LLM tối giản bao gồm toàn bộ quy trình phát triển: mã hóa (tokenization), huấn luyện trước (pretraining), tinh chỉnh (finetuning), đánh giá (evaluation), suy luận (inference) và giao diện người dùng web giống ChatGPT.

Cơ sở mã nằm gọn trong một kho lưu trữ duy nhất không có cấu hình phức tạp hay sự phức tạp của khung công tác. Karpathy thiết kế nó như một "baseline mạnh mẽ" có thể đọc được, dễ sửa đổi và phân nhánh.
Khẳng định cốt lõi
Huấn luyện một mô hình có khả năng GPT-2 (1,6 tỷ tham số) với:
- 48 đô la theo yêu cầu (2 giờ với khoảng 24 đô la/giờ cho 8xH100)
- ~15 đô la trên các phiên bản spot
Để so sánh, việc huấn luyện GPT-2 gốc của OpenAI vào năm 2019 có chi phí khoảng 43.000 đô la và mất 7 ngày trên 32 chip TPU v3.
Những gì nanochat bao gồm
| Giai đoạn | Tập lệnh | Mô tả |
|---|---|---|
| Mã hóa (Tokenization) | scripts.tok_train |
Huấn luyện bộ mã hóa BPE (từ vựng 32.768) |
| Huấn luyện trước (Pretraining) | scripts.base_train |
Huấn luyện mô hình GPT cơ sở |
| Tinh chỉnh (Finetuning) | scripts.chat_sft |
Tinh chỉnh có giám sát cho chatbot |
| Đánh giá (Evaluation) | scripts.base_eval |
Chỉ số CORE, bits-per-byte |
| Suy luận (Inference) | scripts.chat_cli |
Giao diện trò chuyện CLI |
| Giao diện Web (Web UI) | scripts.chat_web |
Giao diện web giống ChatGPT |
Triết lý: Một nút điều khiển mọi thứ
Hầu hết các khung LLM đều khiến bạn ngập trong các tệp cấu hình. nanochat đi theo hướng ngược lại.
Toàn bộ hệ thống xoay quanh một tham số: --depth (số lượng lớp transformer).
# Mô hình kích thước GPT-1
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=12
# Mô hình có khả năng GPT-2
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=24
# Đẩy mạnh giới hạn
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26
Đặt độ sâu, và nanochat tự động tính toán mọi thứ khác:
- Chiều rộng Transformer (kích thước nhúng)
- Số lượng đầu chú ý (attention heads)
- Tốc độ học cho từng nhóm tham số
- Thời gian huấn luyện (tổng số bước)
- Lịch trình giảm trọng số (weight decay schedules)
- Kích thước lô (batch sizes)
Triết lý "một nút điều khiển" này cho phép điều mà Karpathy gọi là chuỗi nanochat miniseries: một họ các mô hình tối ưu về tính toán với các kích thước khác nhau, tất cả đều được huấn luyện bằng cùng một phương pháp nguyên tắc.
Tại sao điều này hiệu quả
Nhóm đã đo lường các quy luật mở rộng (scaling laws) trên hàng chục lần huấn luyện. Họ tìm thấy mối quan hệ có thể dự đoán giữa độ sâu, chiều rộng, kích thước lô và thời gian huấn luyện. Thay vì phơi bày tất cả các nút điều khiển này, nanochat mã hóa trực tiếp các mối quan hệ này vào tập lệnh huấn luyện.

Bạn có được quá trình huấn luyện tối ưu về tính toán mà không cần phải có bằng tiến sĩ về học sâu.
Bảng xếp hạng: Cuộc đua đánh bại GPT-2
nanochat duy trì một bảng xếp hạng công khai theo dõi khả năng "thời gian đạt được GPT-2". Mục tiêu là đánh bại điểm CORE gốc của OpenAI là 0.256525 trên 22 tác vụ đánh giá (ARC, MMLU và các tác vụ khác từ bộ benchmark DCLM).
Kỷ lục hiện tại
| Lần chạy | Mô hình | Thời gian | Điểm CORE | Đổi mới chính |
|---|---|---|---|---|
| GPT-2 gốc | 1.6B | 168 giờ | 0.2565 | Baseline của OpenAI 2019 |
| Lần chạy 1 | d24 | 3.04 giờ | 0.2585 | Baseline ban đầu |
| Lần chạy 2 | d26 | 2.91 giờ | 0.2578 | Huấn luyện FP8 |
| Lần chạy 3 | d26 | 2.76 giờ | 0.2602 | Kích thước lô 1M token |
| Lần chạy 4 | d24 | 2.02 giờ | 0.2571 | Bộ dữ liệu ClimbMix |
| Lần chạy 5 | d24 | 1.80 giờ | 0.2690 | Các tối ưu hóa do AI khám phá |
| Lần chạy 6 | d24 | 1.65 giờ | 0.2626 | Cải thiện smear/backout |
Cách AI khám phá các tối ưu hóa
Các lần chạy 5 và 6 đã kết hợp các thay đổi từ hệ thống "autoresearch" của Karpathy. Một tác nhân AI đã khám phá các sửa đổi kiến trúc trên các mô hình d12 nhỏ (chạy huấn luyện 5 phút), sau đó chuyển các thay đổi chiến thắng sang thiết lập d24 đầy đủ.
Hệ thống đã tìm thấy những cải tiến cho:
- Cơ chế Backout: Trừ phần dư ở lớp giữa tốt hơn
- Triển khai Smear: Trộn bigram hiệu quả hơn từ các token trước
Những thay đổi này đã giảm thời gian huấn luyện từ 2,02 giờ xuống còn 1,65 giờ, một cải tiến 19% được khám phá thông qua thử nghiệm tự động.
nanochat hoạt động như thế nào
Cơ sở mã bao gồm khoảng 3.000 dòng trên các mô-đun cốt lõi. Hãy cùng xem xét từng thành phần.
1. Mô hình GPT (nanochat/gpt.py)
Transformer tuân theo các thực hành tốt nhất hiện đại với một số tối ưu hóa:
Tính năng kiến trúc:
- Nhúng xoay (Rotary embeddings - RoPE): Mã hóa vị trí tương đối không có nhúng vị trí được học
- Chuẩn hóa QK (QK normalization): Ổn định quá trình huấn luyện ở quy mô lớn
- Trọng số không liên kết (Untied weights): Các lớp nhúng token và chiếu đầu ra riêng biệt
- Kích hoạt ReLU² (ReLU² activation): ReLU bình phương trong MLP thay vì GeLU
- Chú ý truy vấn nhóm (Grouped Query Attention - GQA): Ít đầu KV hơn đầu truy vấn để suy luận nhanh hơn
- Chú ý cửa sổ trượt (Sliding window attention): Mẫu cấu hình (ví dụ: "SSSL" xen kẽ ngữ cảnh ngắn/dài)
- Flash Attention 3: Tối ưu hóa GPU Hopper với dự phòng SDPA
Nhúng giá trị (ResFormer): Các lớp xen kẽ bao gồm các nhúng giá trị có thể học được trộn lẫn thông qua cơ chế cổng phụ thuộc đầu vào:
# Phần dư giá trị: trộn nhúng giá trị với cổng theo từng đầu
if ve is not None:
ve = ve.view(B, T, self.n_kv_head, self.head_dim)
gate = 3 * torch.sigmoid(self.ve_gate(x[..., :self.ve_gate_channels]))
v = v + gate.unsqueeze(-1) * ve
Điều này bổ sung khả năng mà không tốn nhiều chi phí tính toán.
Các thủ thuật hiệu quả:
Mô hình bao gồm ba cơ chế học được giúp cải thiện động lực huấn luyện:
# 1. Chia tỷ lệ phần dư theo từng lớp
x = self.resid_lambdas[i] * x + self.x0_lambdas[i] * x0
# 2. Smear: trộn nhúng token trước đó để có thông tin bigram
gate = self.smear_lambda * torch.sigmoid(self.smear_gate(x[:, :, :24]))
x = x + gate * x_pre_smear
# 3. Backout: trừ phần dư ở lớp giữa
x = x - self.backout_lambda * x_backout
2. Trình tối ưu hóa Muon (nanochat/optim.py)
nanochat sử dụng chiến lược trình tối ưu hóa hỗn hợp:
| Loại tham số | Trình tối ưu hóa | Mục đích |
|---|---|---|
| Nhúng, lm_head | AdamW | Tối ưu hóa thích ứng tiêu chuẩn |
| Tham số vô hướng | AdamW | Hệ số chia tỷ lệ được học |
| Ma trận 2D | Muon | Cập nhật được trực giao hóa |
Muon (MomentUm được trực giao hóa bởi Newton-Schulz):
Trình tối ưu hóa Muon trực giao hóa các cập nhật trọng số bằng cách sử dụng phương pháp lặp Newton-Schulz bậc năm gọi là "Polar Express":
# Hệ số Polar Express (5 lần lặp)
polar_express_coeffs = [
(8.156, -22.483, 15.879),
(4.043, -2.809, 0.500),
# ... các hệ số khác
]
# Vòng lặp trực giao hóa
for a, b, c in polar_express_coeffs[:ns_steps]:
A = X.mT @ X
B = b * A + c * (A @ A)
X = a * X + X @ B
Giảm phương sai NorMuon:
Sau khi trực giao hóa, các cập nhật được chuẩn hóa theo từng nơ-ron để ngăn chặn sự sụp đổ thang đo:
v_mean = g.float().square().mean(dim=red_dim, keepdim=True)
v_norm = v_mean.sum(dim=(-2, -1), keepdim=True).sqrt()
final_scale = step_size * (v_norm / v_norm_new.clamp_min(1e-10))
g = g * final_scale.to(g.dtype)
Huấn luyện phân tán:
Đối với các thiết lập đa GPU, trình tối ưu hóa triển khai phân chia kiểu ZeRO-2 với giao tiếp không đồng bộ ba pha:
Pha 1: Khởi chạy tất cả các thao tác reduce_scatter không đồng bộ
Pha 2: Chờ giảm, tính toán cập nhật, khởi chạy all_gathers
Pha 3: Chờ gom, sao chép lại các tham số đã cập nhật
Điều này chồng chéo giao tiếp với tính toán, tối đa hóa việc sử dụng GPU.
3. Quản lý độ chính xác (nanochat/common.py)
nanochat quản lý độ chính xác một cách rõ ràng thay vì sử dụng torch.amp.autocast:
| Phần cứng | Kiểu dữ liệu mặc định | Lý do |
|---|---|---|
| CUDA SM 80+ (A100, H100) | bfloat16 | Các lõi tensor BF16 gốc |
| CUDA SM < 80 (V100, T4) | float32 | Không hỗ trợ BF16 |
| CPU / MPS | float32 | Không có lõi độ chính xác giảm |
Lớp Linear tùy chỉnh chuyển đổi trọng số để khớp với kiểu dữ liệu tính toán trong quá trình chuyển tiếp:
class Linear(nn.Linear):
def forward(self, x):
return F.linear(x, self.weight.to(dtype=x.dtype))
Trọng số chính vẫn ở FP32 để trình tối ưu hóa có độ chính xác cao. Đối với GPU H100 và Blackwell, huấn luyện FP8 có sẵn thông qua --fp8, chuyển đổi hầu hết các lớp sang Float8Linear với chia tỷ lệ tensorwise.
4. Tải dữ liệu (nanochat/dataloader.py)
Bộ tải dữ liệu sử dụng đóng gói tốt nhất căn chỉnh BOS:
- Mọi dòng bắt đầu bằng token BOS (Beginning of Sequence)
- Các tài liệu được đóng gói bằng thuật toán best-fit để giảm thiểu lãng phí
- Khi không có tài liệu nào phù hợp, một tài liệu sẽ bị cắt để lấp đầy chính xác
- Sử dụng 100% với khoảng 35% cắt token ở độ dài chuỗi 2048
Điều này đảm bảo mọi token có thể chú ý ngược lại đến BOS và xem toàn bộ ngữ cảnh tài liệu.
# Tìm tài liệu lớn nhất vừa vặn hoàn toàn
best_idx = -1
best_len = 0
for i, doc in enumerate(doc_buffer):
doc_len = len(doc)
if doc_len <= remaining and doc_len > best_len:
best_idx = i
best_len = doc_len
if best_idx >= 0:
doc = doc_buffer.pop(best_idx)
# Thêm tài liệu đầy đủ
else:
# Cắt tài liệu ngắn nhất để lấp đầy không gian còn lại
5. Hợp nhất Flash Attention (nanochat/flash_attention.py)
Dự án cung cấp một giao diện hợp nhất tự động chuyển đổi giữa FA3 và PyTorch SDPA:
from nanochat.flash_attention import flash_attn
# Hoạt động trên mọi phần cứng - tự động chọn backend tốt nhất
y = flash_attn.flash_attn_func(q, k, v, causal=True, window_size=window_size)
Trên GPU Hopper với bfloat16, nó sử dụng Flash Attention 3. Ở những nơi khác, nó sẽ chuyển sang sử dụng scaled dot-product attention của PyTorch.
6. Công cụ suy luận (nanochat/engine.py)
Lớp Engine xử lý việc tạo hiệu quả với:
- Bộ nhớ đệm KV (KV Cache): Bộ nhớ đệm prompt được điền sẵn với
flash_attn_with_kvcachecủa FA3 - Sử dụng công cụ (Tool Use): Các token đặc biệt kích hoạt máy tính Python thông qua
eval() - Tạo lô (Batch Generation): Sao chép bộ nhớ đệm KV để lấy mẫu song song
Công cụ điều phối luồng hội thoại, bao gồm cả việc ép buộc các token đầu ra công cụ khi mô hình gọi máy tính.
Hướng dẫn từng bước: Huấn luyện mô hình của riêng bạn
Toàn bộ quy trình nằm trong runs/speedrun.sh. Đây là cách chạy nó.
Điều kiện tiên quyết
- Nút GPU 8xH100 (hoặc tương tự)
- ~20 GB dung lượng đĩa cho bộ dữ liệu
- Python 3.10+
- Trình quản lý gói uv
Bước 1: Thiết lập môi trường
# Cài đặt uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Tạo và kích hoạt môi trường ảo
uv venv
source .venv/bin/activate
# Cài đặt các phần phụ thuộc
uv sync --extra gpu
Bước 2: Tải xuống dữ liệu huấn luyện
# Tải xuống ~2B ký tự từ bộ dữ liệu ClimbMix
python -m nanochat.dataset -n 170
# Điều này tải xuống ~170 mảnh với mỗi mảnh ~100MB
# Tổng cộng: ~17 GB đã nén
Tập lệnh tải xuống các mảnh dữ liệu huấn luyện trước với khóa tệp để xử lý phối hợp đa cấp.
Bước 3: Huấn luyện bộ mã hóa (Tokenizer)
# Huấn luyện bộ mã hóa BPE với 32.768 từ vựng
python -m scripts.tok_train
# Đánh giá tỷ lệ nén
python -m scripts.tok_eval
Bộ mã hóa sử dụng mẫu chia tách kiểu GPT-4 với BPE dự phòng byte. Huấn luyện hoàn thành trong khoảng 10 phút trên 2 tỷ ký tự.
Bước 4: Huấn luyện trước mô hình cơ sở
# Huấn luyện mô hình d24 (khả năng GPT-2)
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \
--depth=24 \
--target-param-data-ratio=8 \
--device-batch-size=16 \
--fp8 \
--run=my-first-model
Các tham số chính:
--depth=24: Mô hình kích thước GPT-2--target-param-data-ratio=8: Huấn luyện hơi thiếu để tăng tốc độ--device-batch-size=16: Kích thước lô trên mỗi GPU--fp8: Bật huấn luyện FP8 (chỉ H100+)
Thời gian chạy dự kiến: ~2 giờ.
Bước 5: Tinh chỉnh có giám sát
# Tải xuống các cuộc hội thoại danh tính
curl -L -o ~/.cache/nanochat/identity_conversations.jsonl \
https://karpathy-public.s3.us-west-2.amazonaws.com/identity_conversations.jsonl
# Chạy SFT cho khả năng trò chuyện
torchrun --standalone --nproc_per_node=8 -m scripts.chat_sft -- \
--device-batch-size=16 \
--run=my-sft
Điều này dạy mô hình định dạng hội thoại, các token đặc biệt và cách sử dụng công cụ.
Bước 6: Trò chuyện với mô hình của bạn
# Trò chuyện CLI
python -m scripts.chat_cli -p "Tại sao bầu trời màu xanh?"
# Hoặc khởi chạy giao diện web
python -m scripts.chat_web
Giao diện web chạy trên cổng 8000 và cung cấp giao diện giống ChatGPT.
Quy trình nghiên cứu: Thử nghiệm nhanh chóng
Để thử nghiệm các ý tưởng mới, hãy sử dụng các mô hình nhỏ hơn để lặp lại nhanh hơn.
Thử nghiệm nhanh (~5 phút)
OMP_NUM_THREADS=1 torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- \
--depth=12 \
--run="d12-test" \
--core-metric-every=999999 \
--sample-every=-1 \
--save-every=-1
Điều này huấn luyện một mô hình d12 (kích thước GPT-1) với việc ghi nhật ký tối thiểu. Hoàn hảo để thử nghiệm các thay đổi kiến trúc.
Các chỉ số cần theo dõi
Theo dõi các chỉ số này trong Weights & Biases:
- val_bpb: Validation bits-per-byte (mất mát độc lập với kích thước từ vựng)
- core_metric: Điểm đánh giá DCLM CORE
- train/mfu: Sử dụng FLOPS của mô hình (hiệu quả phần cứng)
- train/tok_per_sec: Thông lượng huấn luyện
Yêu cầu kiểm thử
Bất kỳ cải tiến nào cũng phải hoạt động trên tất cả các độ sâu (từ d12 đến d26). Điều này ngăn chặn việc quá khớp với một kích thước mô hình duy nhất và đảm bảo các tiến bộ có nguyên tắc.
Tại sao nanochat lại quan trọng
Khả năng tiếp cận về chi phí
| Phương pháp | Chi phí | Thời gian | Phần cứng |
|---|---|---|---|
| OpenAI GPT-2 (2019) | 43.000 đô la | 168 giờ | 32 TPU v3 |
| nanochat (2026) | 48 đô la | 2 giờ | 8xH100 |
| nanochat spot | ~15 đô la | 2 giờ | 8xH100 spot |
Điều này đưa việc huấn luyện LLM trong tầm tay của:
- Các nhà nghiên cứu cá nhân
- Các startup nhỏ
- Các khóa học đại học
- Người có sở thích
Giá trị giáo dục
Cơ sở mã đóng vai trò là một tài nguyên học tập:
- ~500 dòng cho mô hình GPT
- ~530 dòng cho trình tối ưu hóa
- Các bình luận rõ ràng về mọi quyết định thiết kế
- Không có cấu hình ẩn
Sinh viên có thể đọc, sửa đổi và thử nghiệm với một quy trình LLM hoàn chỉnh.
Tốc độ nghiên cứu
Giảm thời gian huấn luyện từ vài ngày xuống vài giờ cho phép:
- Thử nghiệm giả thuyết nhanh hơn
- Nhiều thí nghiệm hơn mỗi tuần
- Chi phí thất bại thấp hơn
- Hợp tác cộng đồng thông qua bảng xếp hạng
Tính minh bạch
Mọi lựa chọn thiết kế đều được tài liệu hóa:
- Các quy luật mở rộng trong
dev/LOG.md - Các nghiên cứu cắt bỏ trong Thảo luận GitHub
- Chi tiết tái tạo đầy đủ cho các mục nhập bảng xếp hạng
- Tiết lộ đóng góp AI rõ ràng
Hạn chế và thực tế
nanochat rất ấn tượng nhưng có những giới hạn rõ ràng.
Yêu cầu phần cứng
Con số 48 đô la giả định có quyền truy cập vào một nút 8xH100. Chi phí thuê đám mây khác nhau:
- Lambda Labs: ~25 đô la/giờ cho 8xH100
- RunPod: ~15 đô la/giờ giá spot
- Tổng thời gian chạy: ~2 giờ huấn luyện trước + SFT
Bạn sẽ cần khoảng 50-100 đô la cho một lần chạy đầy đủ tùy thuộc vào nhà cung cấp.
Giới hạn khả năng
nanochat đạt được hiệu suất cấp độ GPT-2 (công nghệ năm 2019). Điều này có nghĩa là:
Những gì nó có thể làm:
- Trò chuyện cơ bản
- Lý luận đơn giản
- Toán học cơ bản
- Ghi nhớ sự kiện (hạn chế)
Những gì nó không thể làm:
- Lý luận đa bước phức tạp
- Tạo mã ngoài các chức năng đơn giản
- Tuân thủ hướng dẫn tinh tế
- Cạnh tranh với GPT-4, Claude hoặc Gemini
Hãy nghĩ về nó như một đứa trẻ mẫu giáo: có khả năng trò chuyện cơ bản nhưng không phải là công việc cấp chuyên gia.
Yêu cầu dữ liệu
Toàn bộ quá trình speedrun tải xuống:
- ~170 mảnh dữ liệu
- ~17 GB đã nén
- ~2 tỷ ký tự tổng cộng
Bạn sẽ cần đủ dung lượng lưu trữ và băng thông.
Hạn chế của chỉ số
Điểm CORE đo lường 22 tác vụ nhưng không nắm bắt được:
- Chất lượng cuộc trò chuyện trong thế giới thực
- Kiến thức chuyên biệt theo lĩnh vực
- Sự tinh tế trong việc tuân thủ hướng dẫn
- An toàn và sự phù hợp
Các hạt giống ngẫu nhiên khác nhau tạo ra phương sai CORE ~0,016. Kết quả của bạn có thể khác nhau.
Câu hỏi thường gặp
Chi phí để huấn luyện mô hình với nanochat là bao nhiêu?
Khoảng 48 đô la theo yêu cầu (24 đô la/giờ × 2 giờ) hoặc ~15 đô la trên các phiên bản spot. Điều này chỉ bao gồm huấn luyện trước. Thêm khoảng 30 phút cho SFT.
Tôi cần GPU nào?
Tối thiểu: Một GPU duy nhất (bất kỳ GPU trung tâm dữ liệu hiện đại nào). Tối ưu: 8xH100 hoặc 8xA100 để huấn luyện nhanh nhất. Mã này mở rộng từ 1 GPU lên 8 GPU với việc tích lũy gradient tự động.
Thời gian huấn luyện mất bao lâu?
1,65 đến 3 giờ tùy thuộc vào cấu hình và phần cứng. Kỷ lục bảng xếp hạng hiện tại là 1,65 giờ cho một mô hình d24.
Chỉ số CORE là gì?
Điểm DCLM CORE đánh giá các mô hình trên 22 tác vụ bao gồm ARC (câu hỏi khoa học), MMLU (hiểu ngôn ngữ đa tác vụ) và các benchmark khác. GPT-2 đạt 0,256525. nanochat thường xuyên vượt quá 0,26.
Tôi có thể huấn luyện trên một GPU duy nhất không?
Có. Bỏ qua torchrun và mã sẽ tự động sử dụng tích lũy gradient. Huấn luyện sẽ mất thời gian gấp 8 lần nhưng tạo ra kết quả gần như giống hệt nhau.
nanochat sử dụng bộ dữ liệu nào?
Phiên bản tốt nhất hiện tại sử dụng ClimbMix (bộ dữ liệu web được NVIDIA tuyển chọn). Các phiên bản trước sử dụng FineWeb-EDU. Bộ mã hóa huấn luyện trên ~2 tỷ ký tự từ khoảng 8 mảnh đầu tiên.
nanochat có hoạt động trên Apple Silicon không?
Có. Mã này chạy trên MPS (Metal Performance Shaders) với độ chính xác float32. Huấn luyện chậm hơn CUDA nhưng hoạt động được để thử nghiệm.
Tôi có thể tiếp tục huấn luyện từ một checkpoint không?
Có. Sử dụng --resume-from-step=<step> để tiếp tục từ một checkpoint đã lưu. Trạng thái bộ tải dữ liệu cũng được lưu để tiếp tục chính xác.
Sự khác biệt giữa nanochat và nanoGPT là gì?
nanoGPT chỉ bao gồm huấn luyện trước. nanochat mở rộng ra toàn bộ quy trình: mã hóa (tokenization), huấn luyện trước (pretraining), SFT, RLHF, đánh giá (evaluation), suy luận (inference) và giao diện người dùng web.
Kết luận
nanochat chứng minh rằng việc huấn luyện LLM không còn đòi hỏi ngân sách khổng lồ hay cơ sở hạ tầng chuyên biệt. Những gì tốn 43.000 đô la vào năm 2019 giờ đây chỉ tốn dưới 50 đô la.
Tác động của dự án vượt xa việc giảm chi phí thô. Bằng cách cung cấp một cơ sở mã tối giản, dễ đọc với giao diện "một nút điều khiển", Karpathy đã tạo ra cả một công cụ nghiên cứu và một tài nguyên giáo dục.
Những điểm chính
- Giảm chi phí gấp 100 lần: Từ 43.000 đô la xuống 48 đô la cho khả năng GPT-2
- Tăng tốc gấp 100 lần: Từ 168 giờ xuống 1,65 giờ
- Một nút cấu hình duy nhất:
--depthđiều khiển mọi thứ - Quy trình hoàn chỉnh: Từ mã hóa đến giao diện web
- Cộng đồng thúc đẩy: Bảng xếp hạng công khai với những cải tiến liên tục
Các bước tiếp theo
Bạn đã sẵn sàng huấn luyện mô hình của riêng mình chưa? Bắt đầu với kho lưu trữ nanochat và tập lệnh runs/speedrun.sh.
Đối với các nhà phát triển API xây dựng ứng dụng hỗ trợ AI, việc hiểu rõ nội bộ huấn luyện LLM chưa bao giờ dễ tiếp cận đến thế. Rào cản gia nhập đã giảm từ "startup được đầu tư mạo hiểm" xuống "dự án cuối tuần."
