訓練 / 微調中型 GPT,最簡單最快的庫來了!
其名為:NanoGPT。
從名字就能看出是個 " 納米武器 ",據作者介紹,該庫代碼簡單易讀,2 個僅 300 行代碼的文件。
現已基于 OpenWebText 重現 GPT-2 ( 124M ) ,在單個 8XA100 40GB 節點上,訓練時間為 38 小時。
值得一提的是,該庫發布者是前特斯拉 AI 總監,李飛飛高徒,Andrej Karpathy。此次發布的 NanoGPT,正是他 2 年前 MinGPT 的升級版。
目前,此項目在 GitHub 所獲 star 已超 6k,HackerNews 上 points 也破千。
毫無意外地,評論區一片 " 喜大普奔 "。
有網友表示,這才是咱獨立開發者喜聞樂見的 AI 工具。
還有人對其一直開放傳授分享知識的做法,表示感謝。
那麼,這個最簡單最快的 NanoGPT 怎麼用?
下面展開講講。
NanoGPT 的打開方式
發布文件裡面包含一個約 300 行的 GPT 模型定義(文件名:model.py),可以選擇從 OpenAI 加載 GPT-2 權重。
還有一個訓練模型 PyTorch 樣闆(文件名:train.py),同樣也是 300 多行。
作者補充道,代碼并不難,很容易就能滿足大家需求——無論是從頭開始訓練新模型,還是基于預訓練進行微調(目前可用的最大模型為 1.3B 參數的 GPT-2)。
△ 一個訓練實例展示
上手前,需要提前準備好依賴項:
pytorch <3
numpy <3
pip install tiktoken for OpenAI ’ s fast BPE code <3
pip install wandb for optional logging <3
pip install tqdm
$ cd data/openwebtext
$ python prepare.py
這将創建一個 train.bin 和 val.bin 文件,将 GPT2 BPE token id 放入一個序列中。
然後準備訓練,目前腳本默認是嘗試重現 GPT-2,124M 參數版本,但作者更鼓勵大家閱讀代碼查看文件頂部的設置及路徑。
$ python train.py
如需使用 PyTorch 分布式數據并行 ( DDP ) 進行訓練,請使用 torchrun 運行腳本。
比如,要在 4 個 GPU 節點上運行,代碼如下:
$ torchrun --standalone --nproc_per_node=4 train.py
要從模型節點中采樣,就需将一些檢查點寫入輸入目錄中。
$ python sample.py
據作者目前自己的測試,他在 1 個 A100 40GB GPU 上訓練一晚,損失約為 3.74。如果是在 4 個 GPU 上訓練損失約為 3.60。
如果在 8 個 A100 40GB 節點上進行約 50 萬次叠代,時長約為 1 天,atim 的訓練降至約 3.1,init 随機概率是 10.82,已将結果帶到了 baseline 範圍。
觀察不同參數下訓練 / 驗證 loss 值如下:
至于如何基于新文本微調 GPT,作者也簡介了方法。
先訪問 data/shakespeare,查看 prepare.py。
運行一個微調示例,如下:
$ python train.py config/finetune_shakespeare.py
該操作将加載配置參數,覆蓋 config/finetune_shakespeare.py 文件。
作者指出,一般情況下,基本操作就是從 GPT-2 檢查點初始化 init_from,再正常訓練。
此外,如果手裡隻有 macbook 或一些 " 力量 " 不足的小破本,作者建議使用 shakespeare 數據集,然後在一個很小的網絡上運行。
先渲染數據;
$ cd data/shakespeare
$ python prepare.py
再用一個較小的網絡來運行訓練腳本。
比如下面就創建了一個小得多的 Transformer(4 層,4 個 head,64 嵌入大小),隻在 CPU 運行,在作者自己的蘋果 AIR M1 本上,每次叠代大約需要 400 毫秒。
$ cd ../..
$ python train.py --dataset=shakespeare --n_layer=4 --n_head=4 --n_embd=64 --device=cpu --compile=False --eval_iters=1 --block_size=64 --batch_size=8
關于NanoGPT 的後續計劃,Andrej Karpathy 也在網上有所分享。
他将試圖讓 NanoGPT 更快複現其他 GPT-2 模型,然後将預訓練擴展至更大規模的模型 / 數據集中,此外,他還計劃改進下微調部分的文檔。
轉戰教育和開源的特斯拉前 AI 總監
熟悉 Karpathy 的圈内人肯定知道,他此前是李飛飛高徒,也長期緻力于讓更多人接觸了解神經網絡和相關數據集。
2020 年 8 月,他就曾發布 NanoGPT 前一代,MinGPT,同樣旨在讓 GPT 做到小巧、簡潔、可解釋,同樣主打 300 行代碼搞定。
Karpathy 另一大身份是前特斯拉 AI 核心人物。
在馬斯克麾下,他曆任特斯拉高級 AI 主管、特斯拉自動駕駛 AutoPilot 負責人、特斯拉超算 Dojo 負責人、特斯拉擎天柱人形機器人負責人…
2022 年 7 月,Karpathy Andrej 離職,在業内引發不小讨論。他表示,未來将花更多時間在 AI、開源技術教育上,比如他做了一檔 AI 課程,現還在更新中。
此番發布 NanoGPT 同時,Karpathy 還下場安撫了下催更黨——新視頻正從 0 開始構建,計劃 2 周内發布。
最後附上:
NanoGPT 項目:https://github.com/karpathy/nanoGPT
Andrej Karpathy 課程:https://karpathy.ai/zero-to-hero.html