MiniMind:用 3 塊錢從零訓練一個 LLM
MiniMind 是一個從零開始訓練 LLM 的開源專案:64M 的 Dense 模型與 198M-A64M 的 MoE 模型,單張 3090 約 2 小時、約 3 元人民幣就能跑完 Pretrain → SFT → LoRA → DPO → PPO/GRPO/CISPO → Agentic RL 的完整流程。所有核心演算法用 PyTorch 原生實作,不依賴高階封裝。
MiniMind 是一個從零開始訓練 LLM 的開源專案:64M 的 Dense 模型與 198M-A64M 的 MoE 模型,單張 3090 約 2 小時、約 3 元人民幣就能跑完 Pretrain → SFT → LoRA → DPO → PPO/GRPO/CISPO → Agentic RL 的完整流程。所有核心演算法用 PyTorch 原生實作,不依賴高階封裝。
兩個國家級專案展示了從零訓練的另一種動機:瑞士的 Apertus 用 15T tokens、1,000+ 語言與嚴格的 opt-out 個資過濾對齊 EU AI Act;日本的 LLM-jp 由 NII 主導,2026 年 4 月的 LLM-jp-4 在 12T tokens 上訓練出多項 benchmark 超越 GPT-4o 的模型。它們回答的問題和效能路線不同:不是「跑得快」,而是「主權與合規下能訓出什麼」。
「開源 LLM」其實是一條光譜:只開權重(Llama)→ 權重加資料(多數 fully open 專案)→ 連資料順序、中間 checkpoint、訓練日誌都開(LLM360 K2、OLMo 3 的 model flow)。這篇拆解兩個把透明度推到極致的專案:OLMo 3 在 2025 年 11 月放出首個全開的 32B thinking 模型,K2 則是首個 65B 級、連 optimizer states 都公開的模型。
系列實作篇:在 RunPod 租一張 RTX 3090(Secure Cloud $0.5/hr、Community Cloud $0.22/hr),照 README 步驟跑完 MiniMind 的 pretrain(約 1.21h)+ SFT(約 1.10h),總成本約 $0.55–1.50 美元,就能在終端機跟自己從零訓出來的 64M 模型對話。
從零訓練只在三種情況成立:你要學習訓練本身、你有開放模型沒見過的 10B+ 乾淨語料、或你需要全透明的訓練過程做研究。否則微調或 RAG 幾乎總是更便宜的答案。這篇把系列走過的主要路線收斂成一張成本梯度表與決策樹。
YuLan-Mini 是中國人民大學 AI Box 實驗室用 48 張 A800 訓出來的 2.4B 開源模型:只餵 1.08T tokens,MATH-500 拿 37.8、HumanEval 64.0,數學與程式能力壓過用了 7T–18T tokens 的 Qwen2/Qwen2.5 同級模型。它公開的不是口號,是每個階段的資料配比、退火前的 optimizer 狀態、連消融實驗的 W&B logs。
傳統文件解析用固定 pipeline 一體適用,但合約、財報、技術手冊各需不同策略。Agentic Parsing 讓 LLM agent 觀察文件後動態選工具——AgenticOCR 只解析需要的區域(視覺 token 省 70%+)、ParseBench 2,000 頁企業文件實測最佳方案也只拿 84.9%,沒有銀彈。
ColPali 把 PDF 每頁渲染成圖片,用 vision-language model 產生 patch-level multi-vector embedding,用 MaxSim 做 late interaction 檢索。表格密集的金融 PDF 上 recall 從 62% 跳到 84%,完全跳過 OCR 和 chunking。代價是儲存量 ~100 倍、需要 GPU、BM25 不可用。
小 chunk embedding 精準但缺上下文、大 chunk 上下文完整但 embedding 被噪音稀釋——Hierarchical Chunking 用多層索引(2048→512→128 tokens)配 Auto-Merge 演算法解決這個兩難:葉節點精準命中,命中密度超過閾值就自動回傳父節點給 LLM。HiChunk 實測 evidence recall 提升 12.7%,LlamaIndex 和 Haystack 都已內建。
AI 讓寫 code 快了 34%,但 review 時間暴增 441%、實測交付反而慢 19%。四輪研究整理出當前全景:確定性護欄(hook 擋)vs 機率性護欄(prompt 引導)、乾淨 context review、自我改進回饋迴圈、規格驅動開發、AI 測試品質危機(覆蓋率高但 mutation score 低至 53%),以及 Replit agent 偽造測試結果的真實事故。
標準 RAG 一次檢索只找一組文件,但真實問題常需跨 2-4 份文件推理。IRCoT 開創交錯式檢索推理,PAR²-RAG 在四個基準上比 IRCoT 準確率高 23.5%,CompactRAG 把 LLM 呼叫壓到只有兩次。
Self-RAG 在 LLM 裡訓練四種 reflection token(Retrieve / IsREL / IsSUP / IsUSE),讓模型在生成過程中自主決定何時檢索、檢索結果是否相關、生成是否有據可查。ICLR 2024 Oral(top 1%),7B 模型在多個 QA benchmark 超越 ChatGPT 和 Llama2-chat + RAG。代價是必須 fine-tune,無法用在 API-only 模型。
Markdown-KV 格式在 LLM 理解準確度上達 60.7%,比 CSV 的 44.3% 高出 16 個百分點。但檢索用途的最佳格式不同於 LLM 理解用途——metadata prepend + row-wise key-value 是目前表格 RAG 的最佳組合。
looplane 已有 Cloudflare Durable Object run resource:非同步建立、狀態/取消/artifact、live NDJSON 與支援 Last-Event-ID 的 SSE;遠端 approval 走獨立短效 capability。Python 另有 attach client 與 stateful conversation WebSocket。production deploy、跨 runtime parity 與完整多租戶 hardening 尚未驗證。
Looplane 的 effect 已有 read/modify/modify_execute/execute 四級,未分類工具 fail closed;native MCP tool 預設 execute,只有可信 read-only annotation 才降級。審批仍先進 events.jsonl,grant 可精確到同一組變更或 backend;一般化 command 規則與全 runtime sandbox coupling 仍未完成。
looplane 已先做 bounded tool-program DSL:唯讀程式支援 list/read/search/diff、repeat 與 if_contains;modify/check transaction 會經整體 approval,失敗時回滾 touched paths。它還不是任意 JavaScript/Python code mode,也沒有平行 transaction execution。
五家成熟 agent 的 compaction 都要處理觸發、完整 turn 切點與失敗恢復。looplane 已補上 85% high-watermark、自動 compaction、原生 loop 的 deterministic fallback summary、checkpoint 落盤與 workspace context 重新注入;目前仍缺跨 runtime 等價 fallback、模型品質摘要,以及真實 provider 的長 session 驗證。
omp 與 claude-code 都有跨 session 記憶,其他參考專案主要靠 instruction files。looplane 已落地明確的 remember/list/inject baseline:型別化 JSONL 記憶可跨 session 注入 prompt,但目前只按 scope 與近期排序,還沒有語意檢索、去重、遺忘指令或自動萃取。
五家對自由 shell 的風險處理都包含放行/詢問/拒絕、複合指令檢查與 fail-closed。looplane 已補上 deny-first command classifier、critical floor、複合 shell 分段、timeout-deny、設定式 allow/deny rule 與可見的 policy reason;仍需擴大語法涵蓋與真實互動流程驗證。
我在寫自己的 Python coding agent「looplane」,這個系列把 pi、oh-my-pi、opencode、codex、claude-code 五個成熟專案的原始碼逐題對照,也對照 Looplane 現在已經落地的 TUI、外部 CLI runtime、local gateway、usage/OTel/session 工具與 Cloudflare 切片。每篇固定走「設計問題→五家做法→looplane 選擇→學術依據→改善路線」五段,證據一律給到 file#symbol 層級。