速攬2500星,Andrej Karpathy重寫了一份minGPT庫
作為人工智能領(lǐng)域「暴力美學(xué)」的代表作,GPT 可謂是出盡風(fēng)頭,從誕生之初的 GPT 1.17 億參數(shù),一路狂飆到 GPT-3 1750 億參數(shù)。隨著 GPT-3 的發(fā)布,OpenAI 向社區(qū)開放了商業(yè) API,鼓勵(lì)大家使用 GPT-3 嘗試更多的實(shí)驗(yàn)。然而,API 的使用需要申請(qǐng),而且你的申請(qǐng)很有可能石沉大海。
為了讓資源有限的研究者也能體驗(yàn)一把玩大模型的樂趣,前特斯拉 AI 負(fù)責(zé)人 Andrej Karpathy 基于 PyTorch,僅用 300 行左右的代碼就寫出了一個(gè)小型 GPT 訓(xùn)練庫,并將其命名為 minGPT。這個(gè) minGPT 能夠進(jìn)行加法運(yùn)算和字符級(jí)的語言建模,而且準(zhǔn)確率還不錯(cuò)。
時(shí)隔兩年,minGPT 迎來更新,Karpathy 又上線新版本,并命名為 NanoGPT,該庫用于訓(xùn)練和微調(diào)中型大小的 GPT。上線短短幾天,狂攬 2.5K 星。
項(xiàng)目地址:https://github.com/karpathy/nanoGPT
在項(xiàng)目介紹中,Karpathy 這樣寫道:「NanoGPT 是用于訓(xùn)練和微調(diào)中型尺度 GPT 最簡單、最快的庫。是對(duì) minGPT 的重寫,因?yàn)?minGPT 太復(fù)雜了,以至于我都不愿意在使用它。NanoGPT 還在開發(fā)當(dāng)中,當(dāng)前致力于在 OpenWebText 數(shù)據(jù)集上重現(xiàn) GPT-2。
NanoGPT 代碼設(shè)計(jì)目標(biāo)是簡單易讀,其中 train.py 是一個(gè)約 300 行的代碼;model.py 是一個(gè)約 300 行的 GPT 模型定義,它可以選擇從 OpenAI 加載 GPT-2 權(quán)重。」
為了呈現(xiàn)數(shù)據(jù)集,用戶首先需要將一些文檔 tokenize 為一個(gè)簡單的 1D 索引數(shù)組。
這將生成兩個(gè)文件:train.bin 和 val.bin,每個(gè)文件都包含一個(gè)代表 GPT-2 BPE token id 的 uint16 字節(jié)原始序列。該訓(xùn)練腳本試圖復(fù)制 OpenAI 提供的最小的 GPT-2 版本,即 124M 版本。
假如你想使用 PyTorch 分布式數(shù)據(jù)并行(DDP)進(jìn)行訓(xùn)練,請(qǐng)使用 torchrun 運(yùn)行腳本。
為了讓代碼更有效,用戶也可以從模型中進(jìn)行取樣:
Karpathy 表示,該項(xiàng)目目前在 1 個(gè) A100 40GB GPU 上一晚上的訓(xùn)練損失約為 3.74,在 4 個(gè) GPU 上訓(xùn)練損失約為 3.60。在 8 x A100 40GB node 上進(jìn)行 400,000 次迭代(約 1 天)atm 的訓(xùn)練降至 3.1。
至于如何在新文本上微調(diào) GPT,用戶可以訪問 data/shakespeare 并查看 prepare.py。與 OpenWebText 不同,這將在幾秒鐘內(nèi)運(yùn)行。微調(diào)只需要很少的時(shí)間,例如在單個(gè) GPU 上只需要幾分鐘。下面是運(yùn)行微調(diào)的一個(gè)例子
項(xiàng)目一上線,已經(jīng)有人開始嘗試了:
想要嘗試的小伙伴,可以參考原項(xiàng)目運(yùn)行。