Appearance
Q&A 問答集
Q1: nanochat 和 nanoGPT 有什麼不同? A: nanoGPT 只做 pre-training,nanochat 擴充到完整的 LLM pipeline:tokenizer 訓練、pre-training、SFT、RL、評估、聊天 UI。
Q2: 訓練 GPT-2 等級模型需要多少錢? A: 約 $48(8×H100 約 2 小時),若使用 spot instance 可降至 ~$15。2019 年 OpenAI 訓練 GPT-2 花費約 $43,000。
Q3: 為什麼 nanochat 只用一個 --depth 參數? A: 基於 μP(微縮遷移)理念:model dim = depth × aspect_ratio,其他超參數(batch size、LR、weight decay)透過 scaling laws 自動推導。
Q4: Muon 優化器與 AdamW 有何不同? A: Muon 對 2D 權重矩陣執行 SGD-momentum 後,再用 Polar Express 將更新方向正交化(近似 SVD)。Embedding、scalar 等非矩陣參數仍使用 AdamW。
Q5: 為什麼不使用標準的 PPO/DPO? A: nanochat 的 RL 實作偏向 REINFORCE:on-policy 所以不需要 importance ratio + clip,刪除 trust region(無 KL 正則化),advantage 僅減去 mean(無除以 std)。
Q6: BOS-aligned packing 和傳統 packing 有什麼差別? A: 每個 row 強制以 BOS token 開頭,確保每個 token 能看到文件的完整上下文。代價是 ~35% tokens 被裁切丟棄。
Q7: nanochat 支援 FP8 訓練嗎? A: 支援。使用自製的 Float8Linear(比 torchao 更簡潔),需要 H100+ GPU 和 bf16 compute dtype。支援 tensorwise 和 rowwise 兩種 scaling recipe。
Q8: 可以用單張 GPU 訓練嗎? A: 可以。不傳 torchrun 參數即可單 GPU 執行,程式會自動使用 gradient accumulation。但訓練時間會是 8-GPU 的 8 倍。
Q9: CORE metric 和 ChatCORE 的差別? A: CORE 評估 base model(pre-train 後),包含 MC/schema/LM 任務。ChatCORE 評估 chat model(SFT 後),加入 ARC、MMLU、GSM8K、HumanEval、SpellingBee。
Q10: nanochat 如何處理 tool use? A: Engine 在推論時實現狀態機:偵測 <|python_start|> 後收集 tokens → 到達 <|python_end|> 後用 use_calculator() 安全執行 → 將結果以 <|output_start|>...<|output_end|> 注入序列。
Q11: 如何在較小 VRAM 的 GPU 上跑? A: 減少 --device-batch-size(預設 32,可降至 16/8/4/2/1)。若 VRAM < 80GB 可能需要進一步調整其他 hyperparameters。
Q12: nanochat 的資料集如何取得? A: 執行 python -m nanochat.dataset -n 170 會自動從 HuggingFace 下載 ClimbMix-400B shards。
Q13: DPO 和 nanochat 的 RL 有什麼異同? A: DPO 透過偏好資料直接優化 policy(無需 reward model),nanochat 的 RL 使用 GRPO-like 方法——對同一個 prompt 產生多個 response,以 task reward 計算 advantage 進行策略梯度更新。