卡神新項目刷屏!AI老鳥深度解析Karpathy的開發Trick,網友:700塊復刻ChatGPT!終于能親自研究ChatGPT 原創
編輯 | 云昭
復刻 ChatGPT 有多難?
商業層面看,很難。但對于眾多的開發者、甚至實驗室的研究生而言,從今天起,可能就要有標準答案了。
100美元,就能得到一個陪“幼兒園朋友”聊天,能寫詩、講故事,回答“天空為什么是藍的”簡單問題的模型。
300美元,就能讓你得到一個可以超過GPT-2的模型:翻譯、完形填空、閱讀理解都可以處理。
800美元,理解和推理能力就可以做到GPT-3 Small的水準;
1000美元左右,這個模型就已經可以解決簡單的數學和代碼問題以及多項選擇題了。(接近GPT4水平)
就在今天,知名大神Karpathy在X上宣布自己的新作:NanoChat!
圖片
Karpathy:自己寫的最瘋狂項目之一
顧名思義,這個新項目炸裂之處,就在于他是一個類似 ChatGPT 的 LLM 的全棧實現。
圖像
據卡神的在Github上的介紹,這套框架運行上,你只需要8個H100節點,關鍵在于,它的依懶性極低,安裝非常簡單。就連卡神自己都忍不住稱“這是我寫過的最瘋狂、最放飛自我的項目之一!”
與我之前類似的代碼庫 nanoGPT(僅涵蓋預訓練)不同,nanochat 是一個極簡的、從零開始的全棧訓練/推理流程,它基于一個單一且依賴性極低的代碼庫,是一個簡單的 ChatGPT 克隆版本。
你只需啟動一個云 GPU 設備,運行一個腳本,只需 4 小時,就可以在類似 ChatGPT 的 Web UI 中與你的 LLM 進行交流。
為什么說瘋狂呢?不僅僅是因為這個“100美元就可以買到一個最好的LLM模型”這個想法瘋狂,更關鍵的是,這個想法在實驗過程中得到了驗證。
訓練不到4個小時,8304行代碼,只有44個文件,卻擊敗了上億參數規模的GPT-2,甚至在部分評估集上以微弱優勢超過了GPT-4(預訓練分詞器的評估實驗)。
圖片
比如,在訓練分詞器方面,卡神實現了約 4.8 的壓縮比(這意味著平均 4.8 個原文字符變成 1 個 token)。此外,還卡神將這個分詞器與 GPT-2 和 GPT-4 分詞器進行比較。與 GPT-2(擁有 50257 個 token)相比,NanoChat的分詞器在文本壓縮方面全面優于 GPT-2,而后者則在數學部分略勝一籌:
圖片
與GPT-4的分詞器相比,NanoChat也有驚喜!
盡管我們在 fineweb 上的詞匯量較小,但我們實際上還是以一點點優勢擊敗了 GPT-4,因為那是我們實際訓練的數據集,所以我們的標記器非常匹配該文檔分布(例如,我們可能在壓縮英語方面具有優勢)。
圖片
Github地址:??https://github.com/karpathy/nanochat??
討論地址:??https://github.com/karpathy/nanochat/discussions/1??
價值太高!連OpenAI背后訓練GPT的動作的曝出來了
大家之所以對于NanoChat項目呼聲如此之高。
除了上面提到的成本便宜,還有一點就是極大地降低了大家認知ChatGPT底層原理的門檻。
根據卡神在項目自述文件的描述,整個項目的訓練過程、使用到的技術都和OpenAI訓練ChatGPT的方法基本相同。
那么,這8304行代碼究竟是如何來復刻ChatGPT的?
- 預訓練階段,使用全新的Rust實現訓練分詞器;
卡神特別提到,在FineWeb上對TransformerLLM進行預訓練,評估多個指標下的CORE分數; - 中期訓練階段,卡神在來自SmolTalk的用戶-助手對話、多項選擇題、工具使用數據上進行中期訓練;
- 接下來是SFT階段,在世界知識多項選擇題(ARC-E/C、MMLU)、數學(GSM8K)、代碼(HumanEval)上評估聊天模型
- 然后是訓練的最后一個階段,使用「GRPO」在GSM8K上對模型進行強化學習微調(RL)
- 推理方面,卡神選擇在帶有KV緩存的引擎中實現高效推理,只需要簡單的prefill/decode,tool-use(在輕量級沙箱中的Python解釋器),通過CLI或類ChatGPT的網頁界面與其交互。
- 撰寫一份單一的Markdown成績單,總結并將整個過程游戲化。
最后一個酷似ChatGPT的Mini高級應用就躍然眼前了!
圖片
為什么可以訓練如此之快?AI老鳥總結卡神的Trick
當然,成本能夠如此之低,自然還是卡神的智慧。在上面各個環節都設計得非常巧妙。
比如你去從文件結構去看,會發現比較有意思的是:有 data loader、data set engine,還有個叫 GPT pi 的東西,看起來挺有趣。還有 muon optimizer,這里還有 distributed muon,細心地網友稱:這估計是給 H100 GPU 用的。
另外,參數部分也挺吸引人。序列長度是 24,層數 12,768 維度,看起來是個中小型模型。因為我自己也在搭模型,所以看到這些配置挺有參考價值。
網友注意到一個trick的細節。他爆料到,一般來說,Karpathy 總喜歡讓數字“好看”——比如用 2 的平方倍數。
但其實這次,上面這些參數都不是嚴格的 2 的平方,但可能能被分解成一些平方的倍數。比如上面的這三個參數:24、12、768,都不是。所以他猜測卡神肯定是發現最后這幾個數字更合適。
“我本來預期 hidden size 會是 148,不知道他為什么選了 768。”
還有,正則方面,卡神沒有采用 Pytorch自帶的 RoPE(旋轉位置編碼),而是采用了自己寫的版本。
實現特別簡潔,簡直是我見過最優雅的代碼。他的思路是把向量一分為二,然后用旋轉矩陣分別處理,再拼接回來。雖然我還沒完全吃透旋轉矩陣的部分,但能看出這是個非常輕量、教學導向的實現。
這還沒完,在 自回歸注意力(causal self-attention) 模塊里,卡神把 query、key、value 的線性層分開實現。其實也可以優化成一次線性變換,然后再分割結果張量,這樣可以減少內存讀寫。
激活函數方面,他使用了一個叫 ReLU2(ReLUSquared) 的激活函數,據說在一些實驗中收斂更快。
卡神還提到了預計算 旋轉嵌入(rotary embeddings) 的技巧:提前把 cos 和 sin 值算好放在 GPU 內存里,因為它們不依賴訓練參數。
在優化器部分,他把參數拆成兩組:embedding 和 LM head 用 AdamW,矩陣參數用 Muon Optimizer。這個優化器是最近新出的,據說在特征學習(feature learning)上表現不錯。
當然,也有一些業界所公認的Trick,比如大框架還是經典的 Transformer 結構:自注意力 + MLP + 殘差。
再比如采用 KV cache,來加速推理。代碼里根據 cache 是否存在分支執行不同邏輯,這點和大多數 LLM 實現類似。
還有,MLP 部分,卡神沒用 Mixture of Experts,理由很合理:MoE 更適合推理階段,而不是研究階段。MLP 更易于理解和調試。
下一步:發展成一個研究工具或基準
卡神在X上表示,項目還沒完工,自己的目標是將完整的“強基線”堆棧整合到一個內聚、精簡、可讀、可修改且最大程度可分叉的倉庫中。
而NanoChat 將成為 LLM101n(仍在開發中)的頂點項目。
我認為它也有潛力發展成為一個研究工具或基準,類似于之前的 nanoGPT。它遠未完成、調整或優化(實際上我認為可能還有不少唾手可得的成果),但我認為它的整體框架已經足夠完善,可以上傳到 GitHub 上,以便所有部分都能得到改進。
寫在最后
當然,這套復刻框架,肯定不能真正意義上直接幫各位得到一個ChatGPT 1:1的復刻版。
因為局限就擺在那里。性能上,如果想要運行流暢度,就可能需要自己上手微調。那這就需要用戶得有點技術背景才能玩轉它。
比如,如果你的 顯存(VRAM) 比較小,就得調整超參數。這對新手來說可能是個門檻。
但小編看來,更多的意義,還是在于,讓“高在天上”的 LLM產品,變得更加評價、可及。
也就是說,卡神的這個項目繼續讓 AI 開發更大眾化了,讓更多人,尤其是算力不夠的學校、學生們能參與、實驗動手了起來。
而這則會進一步帶動AI應用的繁榮。
想一想,如果連大學學生、業余開發者都能低成本訓練模型,也許能催生很多有創意的應用。
因為這個項目是開源的,所有人按照自己需求進行調整、修改,得到自己想要的結果。
使用 nanochat,你幾乎可以調任何東西。無論是換 tokenizer、改訓練數據、調整超參數,還是優化算法,都可以自由嘗試——有很多潛在思路可以探索。
如果你希望訓練更大的模型,也很容易做到。
代碼庫的設計是完全可擴展的:你只需要通過參數 --depth 來改變模型層數,其他相關參數都會自動按比例調整。
這意味著它的“復雜度”只靠這一個滑桿就能控制。
正如一位網友所說,看起來,NanoChat雖然只是小步前進,但它可能引發大波浪。
項目提供了詳細的指導文檔,它還支持把文件打包成可查詢的數據塊,很友好。這一點我挺欣賞——能看出作者是站在用戶角度思考的。沒錯。
現在,大家都能理解Karpathy為什么會被稱之為“卡神”了吧!太牛了!
圖片
寫完這篇稿子一看,哇塞,這個項目已經狂飆到了8.2K星!
參考鏈接:
??https://www.youtube.com/watch?v=EFpDHdsITrg&t=419s??
??https://x.com/karpathy/status/1977755427569111362??
本文轉載自??51CTO技術棧??,作者:云昭

















