速攬2500星,Andrej Karpathy重寫了一份minGPT庫
作為人工智能領域「暴力美學」的代表作,GPT 可謂是出盡風頭,從誕生之初的 GPT 1.17 億參數,一路狂飆到 GPT-3 1750 億參數。隨著 GPT-3 的發布,OpenAI 向社區開放了商業 API,鼓勵大家使用 GPT-3 嘗試更多的實驗。然而,API 的使用需要申請,而且你的申請很有可能石沉大海。
為了讓資源有限的研究者也能體驗一把玩大模型的樂趣,前特斯拉 AI 負責人 Andrej Karpathy 基于 PyTorch,僅用 300 行左右的代碼就寫出了一個小型 GPT 訓練庫,并將其命名為 minGPT。這個 minGPT 能夠進行加法運算和字符級的語言建模,而且準確率還不錯。
時隔兩年,minGPT 迎來更新,Karpathy 又上線新版本,并命名為 NanoGPT,該庫用于訓練和微調中型大小的 GPT。上線短短幾天,狂攬 2.5K 星。

項目地址:https://github.com/karpathy/nanoGPT
在項目介紹中,Karpathy 這樣寫道:「NanoGPT 是用于訓練和微調中型尺度 GPT 最簡單、最快的庫。是對 minGPT 的重寫,因為 minGPT 太復雜了,以至于我都不愿意在使用它。NanoGPT 還在開發當中,當前致力于在 OpenWebText 數據集上重現 GPT-2。
NanoGPT 代碼設計目標是簡單易讀,其中 train.py 是一個約 300 行的代碼;model.py 是一個約 300 行的 GPT 模型定義,它可以選擇從 OpenAI 加載 GPT-2 權重。」

為了呈現數據集,用戶首先需要將一些文檔 tokenize 為一個簡單的 1D 索引數組。
這將生成兩個文件:train.bin 和 val.bin,每個文件都包含一個代表 GPT-2 BPE token id 的 uint16 字節原始序列。該訓練腳本試圖復制 OpenAI 提供的最小的 GPT-2 版本,即 124M 版本。
假如你想使用 PyTorch 分布式數據并行(DDP)進行訓練,請使用 torchrun 運行腳本。
為了讓代碼更有效,用戶也可以從模型中進行取樣:
Karpathy 表示,該項目目前在 1 個 A100 40GB GPU 上一晚上的訓練損失約為 3.74,在 4 個 GPU 上訓練損失約為 3.60。在 8 x A100 40GB node 上進行 400,000 次迭代(約 1 天)atm 的訓練降至 3.1。
至于如何在新文本上微調 GPT,用戶可以訪問 data/shakespeare 并查看 prepare.py。與 OpenWebText 不同,這將在幾秒鐘內運行。微調只需要很少的時間,例如在單個 GPU 上只需要幾分鐘。下面是運行微調的一個例子
項目一上線,已經有人開始嘗試了:

想要嘗試的小伙伴,可以參考原項目運行。


































