10月14日凌晨,AI領域知名專家安德烈·卡帕西(Andrej Karpathy)發佈了名為"nanochat"的新開源項目,他形容這是自己寫過的"最不受約束"的瘋狂項目之一。
與早期僅涵蓋預訓練的nanoGPT不同,新的nanochat是一個極簡的、從零開始的全棧訓練/推理流程,通過依賴項最少的單一代碼庫實現了一個簡易版ChatGPT的完整構建。
nanochat的使用流程非常簡單:你只需要租用雲GPU服務器,運行單個腳本,最快4小時後就能在類似ChatGPT的網頁界面中與自己訓練的大語言模型(LLM)對話。
nanochat是什麼?
從卡帕西提供的原理來看,Nanochat打包了從零開始製造一個Chatbot所需的所有步驟和工具,這其中包括:
1. 數據準備: 從原始網絡文本(如FineWeb數據集)開始,創建分詞器(tokenizer),把海量文本變成模型能理解的數字。
2. 模型預訓練: 在大規模數據上訓練一個基礎的Transformer模型,讓它學習語言的語法、事實和基本推理能力。這是最耗時、最核心的一步。
3. 對齊微調 :
- a. 指令微調 : 使用高質量的問答、對話數據,教模型如何像一個助手一樣遵循指令、與人對話。
- b. 強化學習 : (可選階段)通過獎勵和懲罰,進一步提升模型在特定任務(如數學解題)上的表現。
4. 模型推理: 提供了一個高效的引擎,讓你可以在命令行或一個類似ChatGPT的網頁界面中,與你親手訓練出來的模型進行實時對話。
5. 評估 ( 訓練完成後,系統會自動生成一份詳細的“成績單”(報告),展示模型在多個標準測試(如數學、代碼、常識推理)上的表現。
Karpathy之前的nanoGPT項目主要關注第2步:模型預訓練。它是一個極簡的GPT模型訓練代碼,目的是為了教學,讓大家理解大模型是怎麼訓練出來的。
而nanochat則是一個全棧(Full-Stack)項目,它不僅包含了nanoGPT的預訓練部分,還補全了之後的所有關鍵步驟(指令微調、強化學習、推理、UI界面),最終交付一個可以實際對話的聊天機器人。
而實現這一切,只靠著卡帕西手敲的8000行代碼。
卡帕西做這個nanochat的意義是什麼呢?
首先是教育和學習,它是目前理解“如何從零構建一個ChatGPT”的最佳學習資料。它讓普通開發者和研究者有機會用相對低廉的成本親手“烹飪”出一個屬於自己的小型聊天模型,並完整地體驗從一堆原始文本到一個智能對話助手的全過程。
其次是提供一個研究和實驗平臺。 為研究人員提供了一個輕量級、可控、可復現的實驗平臺。他們可以在這個框架上快速測試新的模型架構、訓練方法或對齊技術,而不必動用昂貴的大規模計算資源。
最後,X上的網友還發掘了它的新可能,他認為這套系統完全可以成為硬件評估的新基準。
這真是太棒了。這應該成為硬件評估的新基準——我們只需報告一個有序三元組:
● 端到端訓練總成本(美元)
● 端到端訓練總耗時(分鐘)
● 在特定測試集上的綜合性能表現
而且整個過程都具備高度可復現性。
100美元,從頭訓練一個AI
那這個Nanochat到底能多省錢?
● 僅需約100美元(在8XH100節點上訓練約4小時),你就能訓練出一個小型ChatGPT克隆版,可以進行基本對話,創作故事詩歌,回答簡單問題
(在網頁界面中,顯示的是一個耗時4小時、花費100美元的nanochat模型進行對話。已經可以寫詩了。)
(nanochat報告卡片中展示了這次100美元“速通”訓練所生成的部分總結性指標。整體效果很不錯。)
● 訓練約12小時即可在CORE指標上超越GPT-2
● 如果將預算提升到約1000美元(訓練41.6小時),模型會變得更加連貫,能夠解決簡單的數學和編程問題,並通過多項選擇題測試。例如,一個深度為30的模型經過24小時訓練(計算量相當於GPT-3 Small 125M或GPT-3的1/1000),在MMLU上能達到40多分,在ARC-Easy上達到70多分,在GSM8K上達到20多分。
卡帕西親自揭秘背後技術
在X平臺上,卡帕西和網友展開問答對話,公開了nanochat的幕後開發詳情和相關技術。
以下為問答精選:
問:這個模型的訓練/基礎架構是基於什麼樣的模型設計?
卡帕西:nanochat的模型架構基本上與Meta Llama模型類似,但進行了一些簡化,並吸收了一些來自其改進版modded-nanoGPT項目的設計思路。其目標是為此類規模的模型建立一個“穩健的基線”。
主要架構特徵包括:
● Dense Transformer(稠密模型Transformer)
● Rotary Embeddings(旋轉位置編碼),無顯式位置嵌入(positional embeddings)
● QK Norm(對Query和Key向量進行歸一化)
● Embedding與Unembedding權重不共享(untied weights)
● 在Token Embedding之後進行歸一化處理
● MLP使用ReLU²激活函數
● RMSNorm中無可學習參數
● 線性層中無偏置項(bias-free linear layers)
● 採用多查詢注意力機制(Multi-Query Attention, MQA)
● 輸出層使用Logit Softcap技術
● 優化器採用的是Muon + AdamW組合,這很大程度上受到了modded-nanoGPT的影響。卡帕西提到,他計劃未來通過精心調整Adam優化器每個模塊的學習率來嘗試移除Muon,但目前這項工作尚未完成。
問:我是否可以用自己的數據來訓練它?比如我所有的Notion筆記、健康數據,以及和其他大模型的對話記錄?就像打造一個真正懂我的個人聊天機器人?
卡帕西:我覺得這個代碼庫並不適合這個用途。你可以把這些微型模型想象成幼齡兒童(比如幼兒園階段),它們確實不具備那些大型模型的原生智力。如果你用自己的數據對它進行微調/訓練,可能會得到一些看似模仿你文風的有趣回應,但最終效果會顯得很粗糙。
要實現你期待的效果,可能需要這樣的流程:先整理原始數據,在此基礎上進行大量合成數據重寫(這步驟很棘手,不確定性高,屬於研究範疇),然後選用頂尖開源大模型進行微調。過程中可能還需要混合大量預訓練數據,以免在微調過程中損失模型原有的智能水平。
因此,說實話,要讓這套流程完美運作至今仍屬於前沿研究領域。
目前最可行的非技術方案,是把所有資料導入NotebookLM這類工具,它可通過RAG技術(即分塊檢索參考)處理你的數據。你的信息會通過上下文窗口傳遞給模型,但不會改變模型本身的權重。雖然模型不會真正"認識你",但這可能是當前最容易實現的近似方案了。
問:這些代碼有多少是你手寫的?
卡帕西:代碼基本上全是手寫的(配合Tab鍵自動補全)。我嘗試過幾次使用Claude/Codex這類AI編程助手,但效果完全不行,總體上反而幫不上忙。可能我的代碼庫風格太偏離它們訓練數據的風格了。
本文來自“騰訊科技”,作者:金鹿,36氪經授權發佈。