從零開始構建 LLM:深入探討史丹佛大學的 CS336
在人工智慧快速發展的領域中,透過 API 使用預訓練模型與理解該模型的內部機制之間存在著巨大的鴻溝。對於大多數工程師而言,大型語言模型 (LLM) 的「魔力」發生在一個黑盒子中。史丹佛大學的 CS336: Language Modeling from Scratch 旨在拆解那個盒子,將語言模型的創建視為一項嚴謹的工程挑戰,而非一系列的函式庫調用。
類比於經典作業系統課程中學生從零開始構建 OS 的做法,CS336 強制學生實作現代基於 transformer 的系統中的每一個關鍵組件。這種方法確保學習者不僅理解注意力機制或縮放定律 (scaling laws) 的理論,還能理解數據清洗、GPU 記憶體管理和收斂穩定性等艱辛的現實。
課程大綱:從 Tokenization 到 Alignment
課程結構被設計為一個完整的流水線,反映了生產級語言模型的實際生命週期。課程作業分為五個密集型任務:
1. 基礎知識:架構與訓練
學生首先實作核心組件:tokenizer、transformer 架構以及 optimizer。目標是從零開始建立一個功能完備且最小化的語言模型,建立基本的數學與結構基準。
2. 系統優化:硬體介面
在超越基本功能之後,課程深入探討 AI 的系統層面。這包括對各層進行 profiling 和 benchmarking,以及使用 Triton 實作 FlashAttention2。此階段強調記憶體層級結構與分散式訓練的重要性,教導學生如何在多個 GPU 上高效運行模型。
3. 擴展規模:預測性能
理解模型隨著規模增長時的行為至關重要。學生分析各種 transformer 組件的功能,並使用訓練 API 來擬合 scaling laws,從而讓他們能夠預測模型性能如何隨著更多數據或參數而提升。
4. 數據工程:原始材料
在理論課程中常被忽視的部分,CS336 強調數據科學中的「數據」部分。學生處理原始的 Common Crawl dump,執行過濾和去重等必要任務,將雜亂的網頁抓取數據轉化為高品質的預訓練數據。
5. 對齊與推理:最後的拋光
最後一個階段涵蓋了訓練後處理。學生應用 Supervised Fine-Tuning (SFT) 和 Reinforcement Learning (RL) 來使模型能夠解決複雜的數學問題。選修模組還涵蓋了像 Direct Preference Optimization (DPO) 這樣的安全對齊方法。
嚴格的先修條件與高期望值
CS336 不是一門入門課程;它是一門 5 單位的、著重實作的課程。先修條件非常嚴苛,要求精通 Python、對 PyTorch 有深刻理解,並具備線性代數、微積分和機率論的基礎。
課程最引人注目的方面之一是其對 AI 工具的立場。雖然允許使用 LLM 來詢問概念性問題,但課程強烈不建議使用 AI 自動補全工具(如 GitHub Copilot 或 Cursor Tab)。講師認為這些工具會阻礙對教材的深度參與,有效地將通往真正精通的過程中所必需的掙扎自動化了。
自學與算力成本的現實
由於課程教材和 YouTube 講座是公開提供的,許多獨立學習者嘗試挑戰 CS336。然而,退學率很高。一位學習者指出,在一個最初有 30 人的自學小組中,到最後一次課程時只剩下 8 人,突顯了實作任務的極高難度。
算力成本是另一個重大障礙。課程建議使用提供 B200 GPU 的雲端供應商,價格大約每小時 5 到 7.50 美元。雖然這對於全規模訓練是必要的,但一些社群成員建議,開發的早期階段可以在較為平價的硬體上進行,例如消費級的 RTX 4090。
結語
CS336 代表了向「系統層級」AI 教育的轉型。透過要求學生實作 Triton kernels 並清洗 Common Crawl 數據,它彌補了 Transformer 論文中數學上的優雅與實際構建模型所需的工程毅力之間的差距。對於願意付出相應努力的人來說,這提供了一種成為語言模型真正架構師,而非僅僅是消費者之路。