模型 / 資料集
rasbt/reasoning-from-scratch avatar
rasbt/reasoning-from-scratch

reasoning-from-scratch:在 Qwen3 之上用 PyTorch 手工補上推理能力

Implement a reasoning LLM in PyTorch from scratch, step by step

5,234 個 Star822 個 ForkJupyter NotebookApache-2.0

秒懂

它是什麼?
這個倉庫是 Manning 書籍《Build a Reasoning Model (From Scratch)》的官方程式碼,主線不是重寫一個 LLM,而是拿預訓練的 Qwen3 當底座,依序實作推論期擴展、自我精煉、GRPO 強化學習與蒸餾。它適合想動手看清推理訓練迴圈長什麼樣的人,不適合想直接拿去跑生產推論的人。
適合誰用?
這個倉庫的定位是教學材料而非推論框架。想讀懂 GRPO 的損失函數怎麼寫、自我精煉的迴圈怎麼收斂、蒸餾的資料從哪裡來,它是少數把整條路徑攤在 Notebook 裡的選擇,前提是你願意接受它綁在 Qwen3 與書本敘事上。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 9 天前。
用什麼語言寫的?
主要是 Jupyter Notebook(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

它解決的是「推理聽起來很玄」這個問題

推理模型的討論很容易停在名詞層面:chain-of-thought、test-time compute、GRPO、distillation。這些詞在部落格文章裡讀起來都對,但讀完仍然不知道一個 base model 是怎麼被改造成會先想再答的。這個倉庫針對的正是這段落差。README 開頭寫得很直白,書從一個預訓練 base LLM 出發,然後逐步用程式碼加上推理能力,讓讀者看見每一步發生什麼。

目標讀者是有 PyTorch 基礎、讀得懂 transformer 推論程式碼、但沒有親手跑過強化學習訓練迴圈的人。倉庫本身是書的配套,不是獨立可用的工具;章節順序就是學習順序,從 Ch 2 的生成、Ch 3 的評估,一路走到 Ch 6 的強化學習與 Ch 8 的蒸餾。它不處理「如何部署推理模型」這個問題,README 也沒有把它包裝成框架。

底座是 Qwen3,不是從零寫 transformer

書名裡的 from scratch 容易誤導。README 在 Companion Book 一節說明了分工:這本書專注在改善 LLM 推理的方法,工作方式是拿一個預訓練的開源 base LLM(Qwen3)當起點,在其上實作推論期擴展、強化學習與蒸餾。真正從零實作傳統 base LLM 的是作者的前一本書《Build a Large Language Model (From Scratch)》。

這個切分是有意義的。預訓練一個 base model 需要的是資料管線與算力,而推理能力的改造發生在後訓練與推論階段,兩者的工程量完全不同。把底座固定成 Qwen3,章節才能聚焦在獎勵設計、取樣策略、教師模型輸出這些真正決定推理品質的地方。代價是整個倉庫與 Qwen3 的 tokenizer、chat template 和權重格式綁在一起,換底座不是改一個設定值就能完成的事。

附錄 C 另外收了一份 Qwen3 LLM 的原始碼筆記本,讓讀者能對照底座模型的實作。這是理解「上面加了什麼」的必要參照,但也再次說明主線不在模型本身。

章節推進的順序,就是推理訓練的依賴順序

目錄顯示的路徑是有講究的。Ch 2 先讓預訓練模型生成文字,Ch 3 建立評估方式,這兩章是後面所有實驗的量尺;沒有評估,就無法判斷推理改善是真是假。Ch 4 與 Ch 5 處理推論期擴展,分別對應兩種不同的加算力方式:一種是取樣與搜尋層面的擴展,一種是讓模型對自己的輸出做自我精煉。這兩章不需要更新權重,改的是推論流程。

Ch 6 才進入強化學習,用 RL 訓練推理模型;Ch 7 接著改進 GRPO,也就是把 Ch 6 的訓練方法本身當成研究對象。Ch 8 是蒸餾,把推理能力從較大的模型轉移到效率更高的模型上。這個順序意味著一件事:前面章節的輸出會變成後面章節的輸入,跳著讀會斷鏈。

每章都有 main 與 exercise-solutions 兩個筆記本,附錄 B 說明習題解答就放在各章子資料夾裡,沒有集中成一份。附錄另外收了三份實務主題:D 談使用更大的 LLM,E 談批次與吞吐導向的執行,F 談常見的 LLM 評估方法。附錄 G 是一個聊天介面。這些是主線之外的補給,但 E 直接關係到硬體現實。

取得與執行的實際步驟

README 給的下載方式只有一行,用淺層複製避開完整歷史:

git clone --depth 1 https://github.com/rasbt/reasoning-from-scratch.git

也可以從 GitHub 的 Download ZIP 按鈕下載。README 另外提示第 2 章會說明安裝 Python、管理套件與設定開發環境,也就是說環境建置本身被寫進書裡,倉庫沒有提供一份獨立的安裝指令或 requirements 檔說明。這是配套倉庫的常見做法,但對只想先跑起來看看的人來說,得多翻一章。

執行單位是 Jupyter Notebook。主章節的程式碼位於各章 01_main-chapter-code 子目錄下的 chNN_main.ipynb,例如 ch02/01_main-chapter-code/ch02_main.ipynb、ch06/01_main-chapter-code/ch06_main.ipynb。習題解答在相鄰的 chNN_exercise-solutions.ipynb。附錄的命名規則略有不同,chD_main.ipynb 與 chE_main.ipynb 直接放在 chD/ 與 chE/ 底下,chF 又回到 01_main-chapter-code 的結構。這種不一致在瀏覽時會造成一點摩擦。

倉庫附有 troubleshooting.md,README 在目錄上方單獨列出連結。CI 方面有三個 GitHub Actions 工作流程分別在 Linux、macOS 與 Windows 上跑程式碼測試,README 以徽章形式呈現。這代表跨平台的基本可執行性有被自動檢查,但不代表每章的訓練單元都能在消費級顯卡上跑完。

硬體前提與它沒說清楚的部分

README 的 Hardware Requirements 一節寫著,主章節的程式碼設計成大致能在消費級硬體上、於合理時間內執行,不需要專門的伺服器硬體,並且程式碼會在有 GPU 時自動使用 GPU。這段話在提供的材料裡就停在這裡,後續被截斷,沒有給出顯存數字、訓練時長或具體的顯示卡型號。

這是採用前最需要自己驗證的地方。Ch 2 到 Ch 5 屬於推論與評估,負擔相對可預期;Ch 6 與 Ch 7 是強化學習訓練,涉及取樣多條軌跡再更新權重,顯存需求與推論完全不是同一個量級。附錄 E 專門談批次與吞吐導向的執行,側面說明預設執行方式未必把硬體吃滿,但材料沒有提供任何可引用的效能數據。README 也沒有說明是否支援多卡、是否提供預先訓練好的檢查點,或各章節的預期執行時間。這些空白必須在本地實測後才能補上。

另一個未解的問題是模型權重的取得方式。README 提到書中包含載入既有預訓練模型權重的程式碼,但沒有列出權重來源、下載大小或授權條款。Qwen3 本身的授權與這個倉庫的 Apache-2.0 是兩件事,使用前需要分別確認。

教學上的取捨,以及它不適合的場景

這個倉庫最明顯的設計選擇是把一切攤在 Notebook 裡。好處是每一步的輸入輸出都看得見,GRPO 的損失怎麼算、自我精煉的停止條件怎麼設,都能逐格檢查。代價是它不會被抽象成可重用的模組。同一段取樣邏輯可能在多章重複出現,命名與介面也隨章節演進而變動,這對照著書讀是優點,想直接 import 進自己的專案就是障礙。

它也不處理工程面向的問題。沒有服務化介面、沒有排程、沒有分散式訓練的封裝,附錄 G 的聊天介面是示範性質。如果你的目標是「在自有資料上微調一個推理模型並上線」,這個倉庫提供的是理解與起點,不是可部署的元件。

還有一個容易被忽略的限制:內容仍在進行中。README 的目錄標題直接標註 In Progress,最後一次推送時間為 2026 年 9 月,v1.0 發行於 2026 年 5 月。書與程式碼同步演進,意味著章節結構或筆記本內容仍可能調整,跟著某一版程式碼寫下的實驗紀錄日後未必對得上。

替代路徑:TRL 與 veRL 這類訓練框架

如果目的不是理解而是產出,Hugging Face 的 TRL 與 veRL 這類強化學習訓練框架走的是相反的路。它們把 GRPO、PPO 等演算法包成可配置的訓練器,你提供資料集與獎勵函數,框架負責取樣、批次、梯度累積與分散式通訊。差別在抽象層級:這個倉庫要你親手寫出損失與更新步驟,TRL 要你接受它的訓練迴圈與資料格式。

選擇取決於你要的是什麼。要能回答「為什麼這裡要除以標準差」「這條軌跡為什麼被丟棄」,逐格讀 Notebook 比讀框架原始碼快。要在多卡上跑大規模實驗、要接自己的獎勵模型與資料管線,框架提供的批次處理與容錯是這個倉庫沒有的。兩者並不互斥,先讀完 Ch 6 與 Ch 7 再轉去用 TRL,對配置項目的理解會具體得多。

至於推論端,vLLM 或 SGLang 這類推理引擎處理的是吞吐與排程,與這個倉庫的推論期擴展章節屬於不同層次。Ch 4 與 Ch 5 的取樣策略在教學規模下可行,直接搬到高併發服務場景並不現實。

授權、維護成本與該先確認的事

倉庫採用 Apache-2.0,允許商業使用、修改與再散布,需保留著作權與授權聲明,並包含專利授權條款。這是寬鬆授權,對照著書做實驗沒有額外負擔。但要注意兩點:書本內容本身由 Manning 出版,不在 Apache-2.0 的範圍內;Qwen3 權重有自己的授權,與倉庫授權無關。這裡不構成法律意見,實際使用前應自行確認。

維護成本主要來自版本漂移。倉庫以 Notebook 為主,套件版本、Qwen3 的模型介面、PyTorch API 任何一項變動都可能讓某一章節失效。CI 在三個平台上跑測試,能及早發現破壞性變更,但這只覆蓋被納入測試的程式碼。書本與倉庫同步更新,讀者若使用紙本,程式碼與書中片段出現落差是可以預期的。

決定投入前,先確認 ch02 的筆記本能在你的環境載入 Qwen3 權重並產生輸出,這一步會同時驗證套件、權重與硬體。接著確認 ch06 的訓練單元在你的顯存下能跑完一個最小批次,再決定要不要照章節順序往下走。這兩關過不了,後面的 GRPO 改進與蒸餾都只是閱讀材料。

編輯結論

這個倉庫的定位是教學材料而非推論框架。想讀懂 GRPO 的損失函數怎麼寫、自我精煉的迴圈怎麼收斂、蒸餾的資料從哪裡來,它是少數把整條路徑攤在 Notebook 裡的選擇,前提是你願意接受它綁在 Qwen3 與書本敘事上。要拿它做線上服務、要換底座模型、要非同步批次吞吐,都不該從這裡開始。動手前先確認三件事:ch02 能否在你的機器上載入 Qwen3 權重、ch06 的訓練單元需要多少顯存、以及各章 Notebook 對應的套件版本是否與你環境衝突。

官方來源

  1. License: Apache-2.0
  2. Project website
  3. rasbt/reasoning-from-scratch on GitHub
  4. README
  5. Releases
社群筆記

社群筆記