「這是我寫過最瘋狂的代碼之一。」
本週一,AI 領域大神 Andrej Karpathy 發佈了自己的最新開源項目,瞬間引來了整個社區的關注。
這個名為 nanochat 的項目據說可以教你從零開始,以 100 美元的成本自建 ChatGPT。它覆蓋 LLM 的訓練和推理,只要跟著學就可以瞭解構建大模型的所有步驟了。
總共是 8000 行代碼,在 GitHub 上放出不到 12 個小時,star 量就已經超過 4500:
GitHub 鏈接:https://github.com/karpathy/nanochat
與 Karpathy 之前發佈的 nanoGPT 倉庫(只覆蓋了預訓練階段)不同,nanochat 是一個從零開始實現的、極簡但完整的 ChatGPT 克隆版訓練 / 推理全流程項目,所有內容都集中在一個依賴極少、結構乾淨的代碼庫中。
你只需要啟動一臺雲 GPU 機器,運行一個腳本,大約 4 小時後就可以在 ChatGPT 風格的 Web 界面裡和你自己的 LLM 聊天。
倉庫大約8,000 行代碼,但已經實現了以下全部功能:
使用全新的 Rust 實現訓練分詞器。
在 FineWeb 數據集上預訓練 Transformer LLM,並在多個指標上評估 CORE 分數。
Mid-train 階段訓練 SmolTalk 的用戶 - 助手對話、多選問答、工具使用等數據。
SFT 微調,並評估模型在世界知識類多選題(ARC-E/C、MMLU)、數學(GSM8K)、代碼(HumanEval)上的表現。
可選:使用 GRPO 在 GSM8K 上進行 RL 強化訓練。
高效推理引擎,支持 KV Cache、prefill/decode 推理、工具調用(輕量沙箱中的 Python 解釋器),可通過 CLI 或 ChatGPT 風格 WebUI 交互。
自動生成 Markdown 評分報告卡,總結與遊戲化展示整個訓練過程。
Karpathy 表示,只花約 100 美元成本(8×H100 上 4 小時訓練),你就能訓練一個「能聊的」迷你 ChatGPT,可以寫故事 / 詩歌、回答簡單問題。大約 12 小時訓練即可超過 GPT-2 的 CORE 指標。
如果進一步擴展到 1000 美元預算(訓練 41.6 小時),模型連貫性會快速提升,能解決基礎數學 / 代碼任務,並通過一些多選測試。例如,一個 30 層深度、訓練 24 小時的模型(相當於 GPT-3 Small 125M 的 FLOPs,約為 GPT-3 的 1/1000 規模)即可在 MMLU 拿到 40+ 分、ARC-Easy 70+ 分、GSM8K 20+ 分 等。
Karpathy 的目標是把一整套「強勢基線」能力完整地打包進一個結構統一、可讀性強、易於 hack、方便 fork 的倉庫中。nanochat 將會是 LLM101n 課程的壓軸項目(課程仍在開發中)。
Karpathy 認為 nanochat 也有潛力像 nanoGPT 一樣,逐漸成長為一個 研究平臺或標準基準。它現在還遠未算完美,也沒有特別調優或性能優化(他認為很接近了)。不過,整體框架已經成型,因而適合放到 GitHub 上,讓社區協同迭代改進每個模塊。
使用 WebUI 與價值 100 美元、耗時 4 小時的 nanochat 進行的示例對話。
下圖是 Karpathy 這次 100 美元快速訓練(speedrun)示例在報告中產出的一些指標摘要。
這樣看來,構建一個具備聊天功能的大模型是如此的簡單且低成本,並且有了 Karpathy 成熟的開源代碼支持,那我們創建一個屬於自己的個人化的模型來輔助工作可行嗎?
有網友提出了大家都會關心的問題:
但 Karpathy 卻對這類應用破了一盆冷水,他認為這不是一個適合個性化目的的代碼。
Karpathy 認為,應該把這個微型模型更多地看作是非常年幼的孩子,並沒有那麼強大的原始智能。如果你在自己的數據上微調 / 訓練它,你可能會得到一些有趣的鸚鵡學舌效果,感覺像是你在風格上寫作,但它會一團糟。
要實現個性化模型的效果,大致需要這樣幾個步驟:
準備原始數據
在此基礎上進行大量的合成數據生成和重寫(複雜、不明顯、需要研究)
用這些數據去微調一個當前較強的開源大模型(比如 tinker )
微調時還可能需要混入大量預訓練數據,以避免模型丟失太多通用智能能力
可以說,要真正把這個方案跑得效果好,現在還是偏科研的事情。
更多詳細技術介紹與分步構建示例請參閱以下鏈接:
https://github.com/karpathy/nanochat/discussions/1
本文來自微信公眾號“機器之心”,作者:關注AI的機器之心,36氪經授權發佈。