時隔兩年,GPT的Pytorch訓練庫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 索引陣列。
$ cd data/openwebtext
$ python prepare.py
這將生成兩個檔案:train.bin 和 val.bin,每個檔案都包含一個代表 GPT-2 BPE token id 的 uint16 位元組原始序列。該訓練腳本試圖複製 OpenAI 提供的最小的 GPT-2 版本,即 124M 版本。
$ python train.py
假如你想使用 PyTorch 分散式資料並行(DDP)進行訓練,請使用 torchrun 運行腳本。
$ torchrun --standalone --nproc_per_node=4 train.py
為了讓程式碼更有效,使用者也可以從模型中進行取樣:
$ python sample.py
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 上只需要幾分鐘。下面是運行微調的一個例子
$ python train.py config/finetune_shakespeare.py
項目一上線,已經有人開始嘗試了:

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