AI News HubLIVE
站內改寫1 分鐘閱讀

NanoEuler:純C/CUDA從零實現的GPT-2級語言模型

NanoEuler是一個完全用C/CUDA從零構建的GPT-2級語言模型,不使用PyTorch或自動求導。專案包含手寫的BPE分詞器、前向/反向傳播、在書籍和網路語料上的預訓練以及監督微調(SFT)。支援CPU和GPU訓練,GPU版本使用cuBLAS和FlashAttention。該模型是教育和研究性質的,展示了完整的訓練流程。

來源Hacker News AI作者: vforno

NanoEuler 是一個 GPT-2 級別的語言模型,完全使用 C 和 CUDA 從零構建,不依賴 PyTorch、自動求導或任何機器學習庫。專案的核心在於工程和教育價值,展示了完整的深度學習訓練流程,包括手寫的位元組對編碼(BPE)分詞器、前向和反向傳播、在書籍和網路語料上的預訓練,以及監督微調(SFT)成對話模型。

該模型得名於尤拉(Euler),因為其殘差塊結構與尤拉前向積分方法形式相同:每個殘差連線類似於一個微分方程的離散化步驟。專案包含兩種配置:一個在 CPU 上執行的小型展示模型(約 1.05M 引數),以及一個在單個 RTX 4070 上訓練的 GPU 模型(約 116M 引數)。GPU 模型使用手寫的 CUDA 引擎,包括 cuBLAS 矩陣乘法和 FlashAttention,並透過全模型梯度檢查(雙精度有限差分)驗證了反向傳播的正確性。

NanoEuler 的架構是典型的解碼器僅變換器,採用 RMSNorm(無偏置)、旋轉位置編碼(RoPE)、SwiGLU 前饋網路、分組查詢注意力(GQA)和多令牌預測(MTP)。分詞器是位元組級 BPE,使用 GPT-2 風格的預分詞,詞彙表大小為 4096。

專案目前處於研究和教育階段。訓練出的模型雖然能生成流暢的英文,但缺乏真實世界知識,並非有用的助手。預訓練資料來自古登堡計劃的經典文學(如奧斯汀、狄更斯、托爾斯泰等)和 FineWeb-Edu 的高質量教育網路文本,SFT 使用 Alpaca 指令資料。專案的路線圖包括下一步實現直接偏好最佳化(DPO)以及將模型規模擴充套件到約 270M 引數。

NanoEuler 採用 MIT 許可,所有程式碼和資料生成指令碼均開源。該專案的意義在於提供了一個完全從頭開始、可理解且可驗證的語言模型訓練實現,有助於深度學習教學和實驗。