AI-Chain

從零打造 ChatGPT:用 PyTorch 一步步實作大型語言模型的完整指南

99k 星星的開源專案,從 Tokenizer、Attention 機制到 GPT 模型、預訓練與微調,手把手帶你從零實現一個完整的 LLM,連硬體需求都只要普通筆電就能跑。

分享:
從零打造 ChatGPT:用 PyTorch 一步步實作大型語言模型的完整指南

為什麼要從零開始學 LLM?

在 2026 年這個 AI 浪潮已經進入第三波的時間點,我相信很多開發者都有過類似的感受:框架越來越多,API 越來越方便,但你越用越覺得自己在「使用」AI,而不是「理解」AI。

我最近花了一個多月的時間,跟著 rasbt/LLMs-from-scratch 這個專案,從零開始手刻了一個完整的 GPT-like 語言模型。這個專案在 GitHub 上已經獲得超過 99k 顆星星,而且直到一週前還持續有更新。它的配套書籍《Build a Large Language Model (From Scratch)》由 Sebastian Raschka 撰寫,他是維基百科上「Transformer」條目的貢獻者之一,在深度學習領域有非常扎實的學術背景。

這篇文章不是要介紹「如何用 Hugging Face 快速訓練模型」,而是要跟你分享一個我認為對每個想做 AI 的開發者都很有價值的視角:當你親自走過從 tokenizer 到注意力機制,再到預訓練和微調的完整流程,你會獲得什麼樣的洞察。

這個專案在做什麼?

簡單來說,這個專案的目標是:用 PyTorch 從零開始,一步步實現一個可以生成文字的語言模型。不是用現成的庫幫你包好一切,而是從底層開始,每個數學運算都是你自己寫的。

整個專案分為 7 個主章節和 4 個附錄,涵蓋了建立一個完整 LLM 的每個階段:

  • 第 1 章:理解大型語言模型的基本概念
  • 第 2 章:處理文字資料,實作 tokenizer
  • 第 3 章:編寫注意力機制(Attention Mechanism)
  • 第 4 章:從零實現 GPT 模型架構
  • 第 5 章:在未標記資料上進行預訓練
  • 第 6 章:針對文字分類任務進行微調
  • 第 7 章:針對指令跟随任務進行微調

每個章節都配套 Jupyter Notebook 和可執行的 Python 腳本,並且還有練習解答。

為什麼我認為這個專案值得關注?

1. 它解決了一個真正的痛點

在學過一大堆框架和 API 之後,很多人其實對 LLM 的「內部運作」還是模糊的。我知道 Transformer 很厲害,但注意力機制到底怎麼算?Position Embedding 為什麼重要?Softmax 在生成文字時到底做了什麼?這些問題,用 API 永遠不會逼你去搞清楚。

這個專案的做法是:不給你黑箱。每行代碼都附帶數學公式和文字解釋,讓你能夠「看到」模型在做什麼。

2. 硬體需求極低

這個專案最讓我驚豔的地方之一是:它設計成可以在普通筆電上跑完所有章節。不需要高端 GPU,不需要雲端資源。第 5 章的預訓練步驟,即使沒有 GPU,在 CPU 上也只需要幾個小時。這意味著任何開發者都能夠完整體驗整個流程。

3. 代碼品質極高

Sebastian Raschka 的代碼有一個顯著的特點:它不是為了「跑起來」而寫的,而是為了「讓人看懂」而寫的。每一個函數都有清晰的 docstring,每一個數學運算都有對應的公式說明,每個章節之間都有明確的銜接。

4. 配套書籍與影片課程

這個專案搭配了一本正式出版的書籍(Manning 出版)和一個 17 小時的影片課程。書籍的代碼和 GitHub 上的開源代碼保持同步更新,所以你可以選擇最適合自己的學習方式。

實際上手:如何開始使用

接下來我們來看看實際的使用方式。整個專案的結構非常清晰。

環境設置

# 克隆專案
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
cd LLMs-from-scratch

# 使用 uv 安裝依賴(推薦)
uv venv
uv pip install -r requirements.txt

# 或者使用 conda
conda create -n llms python=3.11
conda activate llms
pip install -r requirements.txt

第一個可驗證任務:跑完第二章的 tokenizer

完成安裝後,最直接的上手方式是從第二章開始。第二章的代碼在 ch02/01_main-chapter-code/ch02.ipynb,你可以在 Jupyter Notebook 裡一步步執行。

這個 Notebook 會帶你實現一個基本的 Byte-Pair Encoding (BPE) tokenizer,這是 GPT 系列模型使用的 tokenization 策略。你會看到:

  1. 如何從文字資料中統計 token 頻率
  2. 如何逐步合併最頻繁的 token 對
  3. 如何將任意文字轉換為 token ID 序列

執行完第二章後,你就能夠將任意英文句子轉換成模型能理解的形式。這是一個非常具體、可以驗證的成果。

進階任務:完成預訓練

如果你想挑戰更高難度,可以一路做到第五章。第五章的代碼在 ch05/01_main-chapter-code/ch05.ipynb,它會帶你訓練一個完整的 GPT 模型。

訓練完成後,你可以使用 gpt_generate.py 腳本來生成文字:

python gpt_generate.py --prompt "The future of AI is" --max_new_tokens 50

這會輸出你的模型根據提示生成的文字。看著自己從零訓練出來的模型產出第一句完整的文字,那種成就感是非常獨特的。

幾個關鍵概念的實作洞察

在實作這個專案的過程中,我認為有三個概念特別值得深入理解:

Tokenizer 不只是「切字」

很多框架會幫你自動處理 tokenizer,但當你手刻一個 BPE tokenizer 時,你會理解到 tokenization 其實是一種壓縮策略。它不只是簡單地把文字切開,而是在學習「哪些字元組合在語言中最常出現」,然後優先為這些組合分配獨立的 token。這直接影響了模型的效率和表現。

Attention 機制的數學之美

第三章是整個專案最精彩的部分。你會親手實現 Multi-Head Attention,這涉及到 Q(查詢)、K(鍵)、V(值)矩陣的計算。當你親眼看到 Softmax 將注意力權重分配給不同的位置時,你會真正理解「為什麼 Transformer 能捕捉長距離依賴」。

預訓練的「魔法」在哪裡?

第五章的預訓練過程可能是整個專案中最讓人興奮的。當你看到 Loss 曲線隨著訓練步驟逐漸下降,當你的模型開始能夠完成句子、甚至產生有意義的段落時,你就會明白為什麼大家稱呼這個過程為「訓練」。這不是魔法,但確實是一種非常美妙的過程。

限制與需要注意的地方

當然,這個專案也有它的限制:

  • 它訓練的是「迷你」模型:這個專案的目標是教育用途,所以模型的參數量遠小於商業級的 LLM。它無法與 GPT-4 或 Claude 相比。
  • 需要投入時間:完整走過所有章节可能需要數週到數月的時間,取決於你的背景知識。
  • 代碼使用學術授權:專案使用的是非商業授權,如果是商業用途需要留意。
  • 主要針對英文:Tokenizer 和訓練資料主要是英文,如果要處理其他語言需要額外調整。

誰適合開始這個專案?

我認為以下幾類開發者會從這個專案中獲得最大的收穫:

  • 想要深入理解 LLM 的 AI 工程師:如果你已經在用 Hugging Face 但想了解底層原理,這個專案是最好的補充。
  • 有 PyTorch 基礎的學生:這本書和專案搭配使用,可以建立起扎實的深度學習實作能力。
  • 技術決策者:了解模型是如何工作的,能幫助你在選擇模型和設計系統時做出更明智的判斷。

如果你對 LLM 的內部運作感到好奇,或者你覺得自己一直在「使用」模型卻從未真正「理解」過它們,那這個專案非常適合你。

結論

rasbt/LLMs-from-scratch 不僅僅是一個 GitHub 專案,它是目前市面上最完整的 LLM 實作教程。Sebastian Raschka 用他深厚的學術功底和極高的代碼品質,把一個看似複雜的主題拆解成了每個開發者都能跟進的步驟。

在 AI 工具日新月異的今天,能夠從底層理解模型的運作方式,不再是一個「加分項」,而是越來越成為一個「必要項」。這個專案提供的不僅是代碼,更是一種思考方式——一種讓你真正理解 AI 如何工作的思考方式。


參考資料