AI大神卡帕西開源項目爆火,僅用4小時、8000行代碼克隆ChatGPT

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氪經授權發佈。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論