偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

卡帕西8000行代碼手搓ChatGPT,成本僅100美元,訓(xùn)練12小時(shí)CORE表現(xiàn)超越GPT-2,手把手教程來了

人工智能 新聞
只要你啟動(dòng)一臺(tái)云GPU服務(wù)器,運(yùn)行一個(gè)腳本,最快只要4小時(shí),就能在類似ChatGPT的網(wǎng)頁界面與自己訓(xùn)練的大語言模型對話。

100美元成本、8000行代碼純手搓克隆ChatGPT!

特斯拉前AI總監(jiān)、OpenAI創(chuàng)始成員、宣布全職搞教育的AI大神Andrej Karpathy(卡帕西)沉寂了好久,終于終于終于來上新課了!

新作nanochat,被其本人稱作是寫得最“精神錯(cuò)亂”放飛自我的作品之一。

它是一個(gè)極簡的、從零開始構(gòu)建的全棧訓(xùn)練/推理pipeline,用最少量依賴的單一代碼庫實(shí)現(xiàn)了簡易版ChatGPT。

只要你啟動(dòng)一臺(tái)云GPU服務(wù)器,運(yùn)行一個(gè)腳本,最快只要4小時(shí),就能在類似ChatGPT的網(wǎng)頁界面與自己訓(xùn)練的大語言模型對話。

整個(gè)項(xiàng)目約8000行代碼,可實(shí)現(xiàn)以下功能:

  • 基于全新Rust語言實(shí)現(xiàn),訓(xùn)練分詞器(tokenizer)
  • 在FineWeb數(shù)據(jù)集上預(yù)訓(xùn)練Transformer架構(gòu)大語言模型,并通過多項(xiàng)指標(biāo)評(píng)估CORE得分
  • 在SmolTalk用戶-助手對話數(shù)據(jù)集、多項(xiàng)選擇題數(shù)據(jù)集、工具使用數(shù)據(jù)集上進(jìn)行中期訓(xùn)練(Midtrain)
  • 執(zhí)行指令微調(diào)(SFT),并在世界知識(shí)多項(xiàng)選擇題數(shù)據(jù)集(ARC-E/C)、數(shù)學(xué)數(shù)據(jù)集(GSM8K)、代碼數(shù)據(jù)集(HumanEval)上評(píng)估對話模型性能
  • 可選在GSM8K數(shù)據(jù)集上通過“GRPO”算法對模型進(jìn)行強(qiáng)化學(xué)習(xí)(RL)訓(xùn)練
  • 在推理引擎中實(shí)現(xiàn)高效模型推理,支持KV緩存、簡易預(yù)填充/解碼流程、工具使用(輕量級(jí)沙箱環(huán)境中的Python解釋器),可通過CLI或類ChatGPT的WebUI與模型交互
  • 生成單個(gè)Markdown格式報(bào)告卡,對整個(gè)訓(xùn)練推理流程進(jìn)行總結(jié),并加入“游戲化”呈現(xiàn)(如用評(píng)分、進(jìn)度等形式直觀展示結(jié)果)

整體成本只需約100美元(在8×H100上訓(xùn)練4小時(shí)),就能訓(xùn)練復(fù)刻出一個(gè)可進(jìn)行基礎(chǔ)對話、創(chuàng)作故事詩歌、回答簡單問題的簡易版ChatGPT模型。

整體表現(xiàn)指標(biāo)如下:

訓(xùn)練約12小時(shí)后,模型在CORE指標(biāo)上的表現(xiàn)即可超越GPT-2。

若進(jìn)一步將成本提升至約1000美元(訓(xùn)練約41.6小時(shí)),模型表現(xiàn)顯著提升,能解決簡單的數(shù)學(xué)/代碼問題,還能做多項(xiàng)選擇題。

舉個(gè)具體的例子:一個(gè)深度為30的模型訓(xùn)練24小時(shí)后(相當(dāng)于GPT-3 Small 125M的算力消耗,僅為GPT-3的千分之一),在MMLU數(shù)據(jù)集上可達(dá)到40多分,在ARC-Easy數(shù)據(jù)集上達(dá)70多分,在GSM8K數(shù)據(jù)集上達(dá)20多分。

卡帕西表示,他的目標(biāo)是將這套完整的“強(qiáng)基線”技術(shù)棧整合為統(tǒng)一、極簡、易讀、可修改、易分發(fā)的代碼庫。

nanochat將成為LLM101n課程的壓軸項(xiàng)目(該課程仍在開發(fā)中)。

我認(rèn)為它還有潛力發(fā)展為一個(gè)研究工具框架或基準(zhǔn)測試的工具,就像之前的nanoGPT一樣。目前該項(xiàng)目遠(yuǎn)未完全優(yōu)化(實(shí)際上存在大量可改進(jìn)空間),但整體框架已足夠完整,可以發(fā)布到GitHub上,后續(xù)所有模塊都能在社區(qū)中進(jìn)一步優(yōu)化。

等來新作的網(wǎng)友也已徹底瘋狂。項(xiàng)目剛發(fā)出來,GitHub Star數(shù)已飆到4.8k:

太酷了!跑一次這個(gè)項(xiàng)目,就把“機(jī)器學(xué)習(xí)工程師(ML Engineer)”放在我的簡歷上!

你發(fā)布的不只是代碼,更是可被理解的智慧,價(jià)值爆炸,栓Q。

在評(píng)論區(qū),卡帕西還解釋了nanochat基本架構(gòu)與Llama類似,但更簡化一些,也借鑒了部分modded-nanoGPT的設(shè)計(jì),整體是為此規(guī)模的模型找到一個(gè)穩(wěn)健的基礎(chǔ)架構(gòu)。

以及這個(gè)項(xiàng)目基本上是完全手寫的。

我確實(shí)嘗試過用Claude或Codex之類的Agent來幫忙,但效果非常糟糕,幾乎毫無幫助??赡苁且?yàn)檫@個(gè)repo的結(jié)構(gòu)偏離了它們訓(xùn)練數(shù)據(jù)的分布,所以它們根本“對不上號(hào)”。

話不多說,下面來看nanochat快速上手的詳細(xì)指南。

100美元成本,能捏出的最好的ChatGPT

從比如Lambda GPU Cloud上啟動(dòng)了一臺(tái)8卡H100的服務(wù)器,每小時(shí)要花大約24美元,所以接下來得爭分奪秒了。

環(huán)境搭建

克隆項(xiàng)目:

目標(biāo)是用100美元的成本訓(xùn)練出一個(gè)最好的類ChatGPT模型,稱之為一次“速通(speedrun)”,可參考speedrun.sh這個(gè)腳本,它被設(shè)計(jì)成能在一臺(tái)全新的服務(wù)器上直接從頭到尾運(yùn)行。

但接下來,卡帕西會(huì)逐步講解其中的每一步。

首先需要確保安裝了當(dāng)下熱門的uv項(xiàng)目管理器。安裝uv,在.venv目錄下創(chuàng)建一個(gè)新的虛擬環(huán)境,獲取所有依賴項(xiàng),然后激活該環(huán)境,這樣當(dāng)輸入python時(shí),使用的是虛擬環(huán)境中的Python,而不是系統(tǒng)自帶的Python:

接下來,需要安裝Rust/Cargo,以便編譯自定義的Rust分詞器。引入一個(gè)全新/自定義的分詞器確實(shí)有點(diǎn)折騰,但遺憾的是,卡帕西覺得早期minbpe項(xiàng)目中的Python版本速度太慢,而huggingface的分詞器又過于臃腫且令人困惑。

因此要專門為訓(xùn)練打造了自己的新分詞器(經(jīng)測試與Python版本效果一致),不過在推理時(shí)仍會(huì)使用OpenAI的tiktoken來保證效率。

現(xiàn)在就開始編譯分詞器吧:

訓(xùn)練分詞器

接下來,需要獲取預(yù)訓(xùn)練數(shù)據(jù),這樣才能:1)訓(xùn)練分詞器;2)對模型進(jìn)行預(yù)訓(xùn)練。

預(yù)訓(xùn)練數(shù)據(jù)就是大量網(wǎng)頁的文本內(nèi)容,這里將使用FineWeb-EDU數(shù)據(jù)集。

通常來說,可以直接用huggingface datasets.load_dataset(),但卡帕西不喜歡它過于臃腫笨重且掩蓋了本應(yīng)簡單的邏輯,所以把整個(gè)數(shù)據(jù)集重新打包成了簡單、完全打亂的分片,這樣就能輕松高效地隨意訪問,并且把它的sample-100B版本重新上傳為karpathy/fineweb-edu-100b-shuffle。

在這個(gè)頁面上,你還可以預(yù)覽數(shù)據(jù)集中的示例文本。每個(gè)分片是一個(gè)約0.25M個(gè)字符的簡單parquet文件,壓縮后(gzip格式)在磁盤上大約占100MB。總共有1822個(gè)分片,但訓(xùn)練深度為20的模型只需要其中240個(gè)。

現(xiàn)在就開始下載所有數(shù)據(jù)吧。雖然需要下載約24GB,但在云服務(wù)器上通常速度很快:

默認(rèn)情況下,所有這些都會(huì)被下載到~/.cache/nanochat目錄下。

下載完成后,開始訓(xùn)練分詞器——它負(fù)責(zé)在字符串與符號(hào)碼本(codebook)序列之間進(jìn)行雙向轉(zhuǎn)換。默認(rèn)情況下,訓(xùn)練的詞匯表大小是21?= 65,536個(gè)tokens(這是個(gè)不錯(cuò)的數(shù)字),其中部分tokens會(huì)被保留作為特殊tokens(供后續(xù)聊天模式使用)。訓(xùn)練集包含2B字符,訓(xùn)練僅需約1分鐘。

訓(xùn)練算法與OpenAI使用的完全一致(regex splitting, byte-level BPE)。想了解更多信息,可以看卡帕西關(guān)于tokenization技術(shù)的視頻講解。

訓(xùn)練完成后可以評(píng)估這個(gè)分詞器:

評(píng)估結(jié)果顯示,實(shí)現(xiàn)了約4.8的壓縮比(即原始文本中平均4.8個(gè)字符壓縮為1個(gè)token),還可以看到與GPT-2、GPT-4分詞器的對比結(jié)果。

相比GPT-2(擁有50257個(gè)tokens),在壓縮文本方面全面更優(yōu),僅在數(shù)學(xué)內(nèi)容上稍遜一籌:

與GPT-4相比,表現(xiàn)并不突出,但需要考慮到GPT-4擁有更大的詞匯表規(guī)模(100,277個(gè)tokens)。特別是在多語言處理方面GPT-4優(yōu)勢明顯(由于FineWeb數(shù)據(jù)集高度側(cè)重英語內(nèi)容,這個(gè)結(jié)果很合理),同時(shí)在代碼和數(shù)學(xué)領(lǐng)域也更勝一籌:

盡管如此,即使在詞匯量較小的條件下,我們在FineWeb數(shù)據(jù)集上仍以微弱優(yōu)勢超越了GPT-4——因?yàn)檫@正是我們訓(xùn)練所用的數(shù)據(jù)集,所以我們的分詞器能完美契合該文檔分布(例如在英語文本壓縮方面可能更具優(yōu)勢)。

預(yù)訓(xùn)練

在啟動(dòng)預(yù)訓(xùn)練之前,需要下載另一個(gè)被卡帕西稱之為“評(píng)估包(eval bundle)”的文件。

在預(yù)訓(xùn)練過程中,腳本會(huì)定期評(píng)估CORE指標(biāo)。你可以在DCLM論文中看到一些細(xì)節(jié),本質(zhì)上,它是一個(gè)很好的、標(biāo)準(zhǔn)化的、寬泛的指標(biāo),用于衡量模型在大量自動(dòng)補(bǔ)全數(shù)據(jù)集上的表現(xiàn)好壞。

這些數(shù)據(jù)集包括HellaSwag、jeopardy、bigbench QA wikidata、ARC-Easy/Challenge、copa、commonsense qa、piqa、lambada、winograd、boolq等等(共22個(gè))。

下載、解壓該評(píng)估包,并將評(píng)估包目錄放置到基礎(chǔ)目錄~/.cache/nanochat/eval_bundle下:

還建議(盡管這是可選的)再做一項(xiàng)設(shè)置:

配置wandb,以便在訓(xùn)練過程中查看美觀的圖表。前面uv已經(jīng)安裝好了wandb,但你仍需創(chuàng)建賬戶并登錄:

現(xiàn)在我們可以啟動(dòng)預(yù)訓(xùn)練了!這是計(jì)算量最大的部分,要訓(xùn)練大語言模型(LLM),通過預(yù)測序列中的下一個(gè)token來壓縮互聯(lián)網(wǎng)網(wǎng)頁文本,在此過程中,大語言模型會(huì)獲取大量關(guān)于世界的知識(shí):

在這里,通過scripts/base_train.py腳本在8塊GPU上啟動(dòng)訓(xùn)練。我們正在訓(xùn)練一個(gè)有20層的Transformer。默認(rèn)情況下,每塊GPU在每次前向/反向傳播時(shí)處理32行、每行2048個(gè)tokens的數(shù)據(jù),優(yōu)化器每一步總共處理32×2048=21?=524,288≈0.5M個(gè)tokens。

如果已經(jīng)設(shè)置好了wandb,可以添加—run=speedrun(所有訓(xùn)練腳本都支持該參數(shù))來設(shè)置運(yùn)行名稱并記錄相關(guān)數(shù)據(jù)。

當(dāng)你啟動(dòng)訓(xùn)練后,會(huì)看到類似這樣的輸出(為簡潔起見,省略了大量內(nèi)容):

可以看到,這個(gè)Transformer有1280個(gè)channels,注意力機(jī)制中有10個(gè)注意力頭,每個(gè)頭的dim=128。它大約有560M參數(shù)。為了符合Chinchilla scaling law的建議,這意味著我們需要用560M×20≈11.2B tokens來進(jìn)行訓(xùn)練。

由于優(yōu)化器的每一步處理524,288個(gè)tokens,這意味著11.2B/0.5M≈21400次迭代。

通過對每個(gè)token的估計(jì)FLOPs與總tokens數(shù)相乘,我們可以知道這將是一個(gè)計(jì)算量達(dá)約4e19 FLOPs的模型。

學(xué)習(xí)率會(huì)自動(dòng)按1/sqrt(dim)自動(dòng)縮放,因?yàn)楦蟮哪P透酶〉膶W(xué)習(xí)率。

我們使用Muon來優(yōu)化矩陣,使用AdamW來優(yōu)化嵌入和反嵌入。在這個(gè)模型中,沒有其他可訓(xùn)練的參數(shù)(比如偏置、rmsnorm參數(shù)等)。訓(xùn)練過程會(huì)定期報(bào)告“驗(yàn)證集bpb”,即驗(yàn)證數(shù)據(jù)集上每字節(jié)的位數(shù)。

每字節(jié)位數(shù)(bits per byte)是一個(gè)比典型的交叉熵?fù)p失更好的衡量指標(biāo),因?yàn)樗ㄟ^每個(gè)token的字節(jié)數(shù)進(jìn)一步歸一化了每個(gè)token的損失,使得該指標(biāo)與分詞器無關(guān)。

所以,無論你使用的是詞匯量小的分詞器還是詞匯量大的分詞器,這個(gè)數(shù)值都是可比較的,而原始的交叉熵?fù)p失則不然。

注意,每一步大約耗時(shí)0.5秒,lrm是學(xué)習(xí)率衰減乘數(shù)(在訓(xùn)練接近尾聲時(shí),它會(huì)線性下降到0),報(bào)告的MFU(模型flops利用率)看起來很不錯(cuò),幾乎達(dá)到了一半,這意味著我們充分利用了可用的bfloat16計(jì)算能力。

現(xiàn)在,要等待大約3小時(shí),直到4e19 FLOPs的計(jì)算量完成……在你的wandb圖表中,你應(yīng)該會(huì)看到類似這樣的內(nèi)容:

隨著時(shí)間的推移,bpb下降是好的跡象(說明模型能更準(zhǔn)確地預(yù)測下一個(gè)token)。此外,CORE分?jǐn)?shù)在上升。

除了這些近似的指標(biāo),還可以更全面地評(píng)估模型:

可以看到,訓(xùn)練集/驗(yàn)證集的bpb達(dá)到了約0.81,CORE指標(biāo)上升到了0.22。

作為對比,評(píng)估包中包含了GPT-2模型的CORE分?jǐn)?shù)。具體來說,0.22的CORE分?jǐn)?shù)略高于GPT-2 large(0.21),但略低于GPT-2 xl(即“標(biāo)準(zhǔn)”的GPT-2,為0.26)。

此時(shí),這個(gè)模型就像一個(gè)高級(jí)的自動(dòng)補(bǔ)全工具,所以我們可以運(yùn)行一些提示詞,來感受模型中存儲(chǔ)的知識(shí)。base_loss.py文件會(huì)運(yùn)行這些提示詞。這些提示詞包括:

補(bǔ)全后的文本如下:

所以,模型知道巴黎是法國的首都、Au代表金、星期六在星期五之后、“冷”是“熱”的反義詞,甚至還知道太陽系的行星。

不過,它對天空的顏色還不太確定,也不太會(huì)做簡單的數(shù)學(xué)題。

對于一個(gè)花費(fèi)72美元訓(xùn)練出來的模型來說,已經(jīng)不算太差了。推理過程使用了一個(gè)自定義的Engine class,利用KV緩存來實(shí)現(xiàn)高效推理,同時(shí)還簡單實(shí)現(xiàn)了兩種常見的推理階段:預(yù)填充和解碼。

我們的Engine class還支持工具使用(比如Python解釋器),這在GSM8K數(shù)據(jù)集上訓(xùn)練時(shí)會(huì)很有用(之后會(huì)詳細(xì)介紹)。

訓(xùn)練中期

接下來是中期訓(xùn)練,這一步會(huì)在smol-SmolTalk數(shù)據(jù)集上進(jìn)一步微調(diào)模型。

算法層面和預(yù)訓(xùn)練完全一致,但數(shù)據(jù)集變成了對話內(nèi)容,而且模型會(huì)去適應(yīng)那些用于構(gòu)建多輪對話結(jié)構(gòu)的新特殊token。現(xiàn)在,每次對話大致是這樣的,大致遵循OpenAI的Harmony聊天格式:

像<|example|>這樣顯示的token是特殊token,遵循OpenAI特殊token的格式。中期訓(xùn)練階段對模型的多種適配非常有用:

  • 模型學(xué)習(xí)與多輪對話相關(guān)的特殊token(除了用于分隔文檔的<|bos|>token,基礎(chǔ)模型預(yù)訓(xùn)練期間沒有這些token)。
  • 模型適應(yīng)對話的數(shù)據(jù)分布,而非互聯(lián)網(wǎng)文檔的數(shù)據(jù)分布。
  • 對我們來說非常重要的一點(diǎn)是,必須教會(huì)模型做多項(xiàng)選擇題,因?yàn)樵谶@么小的模型規(guī)模下,模型無法從隨機(jī)的互聯(lián)網(wǎng)數(shù)據(jù)中學(xué)會(huì)這一點(diǎn)。具體而言,模型必須學(xué)會(huì)將幾個(gè)選項(xiàng)與幾個(gè)字母(如ABCD)關(guān)聯(lián)起來,然后輸出正確選項(xiàng)的算法。通過混合10萬道來自MMLU輔助訓(xùn)練集的多項(xiàng)選擇題來實(shí)現(xiàn)這一點(diǎn)。需要明確的是,問題不在于模型沒有相關(guān)知識(shí),而在于它不理解多項(xiàng)選擇題的運(yùn)作方式,無法將知識(shí)展現(xiàn)出來。這很重要,因?yàn)樵S多常見的模型評(píng)估(如MMLU)都采用多項(xiàng)選擇題的形式。
  • 你可以教會(huì)模型使用各種工具。對我們來說,需要通過在特殊token <|python_start|>和<|python_end|>之間放入Python命令,來教會(huì)模型使用Python解釋器。這對之后解決GSM8K問題會(huì)很有用。
  • 在中期訓(xùn)練期間,你還可以針對許多其他適配進(jìn)行訓(xùn)練,例如上下文長度擴(kuò)展(尚未探索)。

中期訓(xùn)練混合數(shù)據(jù)默認(rèn)是這樣的:

然后按如下方式啟動(dòng)它:

這次運(yùn)行只需要大約8分鐘,比預(yù)訓(xùn)練的約3小時(shí)短得多。現(xiàn)在,模型已經(jīng)是一個(gè)真正的聊天模型,能夠扮演助手的角色回答用戶的問題,可以對其進(jìn)行評(píng)估:

得到了該階段模型的以下結(jié)果:

可以看到:

  • 世界知識(shí):前三項(xiàng)(ARC-E/C和MMLU)都是多項(xiàng)選擇題測試,用于衡量模型在各個(gè)領(lǐng)域的世界知識(shí)。由于有4個(gè)選項(xiàng)(A、B、C、D),隨機(jī)猜測的正確率約為25%,所以模型已經(jīng)表現(xiàn)得比隨機(jī)猜測更好了。(對于這么小的模型來說,多項(xiàng)選擇題是相當(dāng)難的)
  • 數(shù)學(xué):GSM8K是小學(xué)水平的數(shù)學(xué)題。這里的基準(zhǔn)性能是0%,因?yàn)槟P捅仨殞懗鰧?shí)際的答案數(shù)字。目前我們的性能仍然不是很強(qiáng),只解決了2%的問題。
  • 代碼:HumanEval是一個(gè)Python編碼基準(zhǔn)測試,同樣,隨機(jī)基準(zhǔn)性能為0%。
  • ChatCORE:這是卡帕西嘗試復(fù)制CORE分?jǐn)?shù)對基礎(chǔ)模型的評(píng)估方式,并將其擴(kuò)展到聊天模型的成果。也就是說,將上述所有指標(biāo)都減去基準(zhǔn)性能,這樣分?jǐn)?shù)就在0到1之間(例如,隨機(jī)模型得0分,而不是MMLU上的25%),然后報(bào)告所有任務(wù)的平均值。它是對當(dāng)前模型實(shí)力的一個(gè)單一數(shù)字總結(jié)。
  • 這些評(píng)估仍然相當(dāng)不完整,還有很多其他可以衡量但尚未衡量的方面。

確實(shí)沒有一個(gè)很好的圖表來展示這一步,但這里有一個(gè)之前對另一個(gè)更大的模型進(jìn)行中期訓(xùn)練的例子,只是為了讓你了解在微調(diào)運(yùn)行期間這些指標(biāo)上升時(shí)的樣子:

監(jiān)督微調(diào)

中期訓(xùn)練之后是監(jiān)督微調(diào)(SFT)階段。

這是在對話數(shù)據(jù)上額外進(jìn)行的一輪微調(diào),理想情況下,你會(huì)精心挑選最優(yōu)質(zhì)的好數(shù)據(jù),而且也會(huì)在這里進(jìn)行安全訓(xùn)練(比如助手拒絕不當(dāng)請求的訓(xùn)練)。

我們的模型甚至連天空的顏色都還不確定,所以目前在生物危害這類問題上可能還是安全的。這里會(huì)進(jìn)行的一項(xiàng)領(lǐng)域適配是,SFT會(huì)拉伸數(shù)據(jù)行并對其進(jìn)行填充,完全模擬測試時(shí)的格式。

換句話說,示例不再像預(yù)訓(xùn)練/中期訓(xùn)練時(shí)那樣為了訓(xùn)練效率而被隨機(jī)拼接成長行。修正這種領(lǐng)域不匹配的問題,是另一個(gè)小小的“擰緊螺絲”式的提升。我們可以運(yùn)行SFT并重新評(píng)估:

這個(gè)過程同樣只需運(yùn)行約7分鐘,你應(yīng)該能觀察到各項(xiàng)指標(biāo)均有小幅提升:

終于,我們可以以用戶身份與模型對話了!

其實(shí)在中期訓(xùn)練后就可以進(jìn)行對話,但現(xiàn)在效果會(huì)更理想些。你可以通過終端窗口(方式1)或網(wǎng)頁界面(方式2)與它交流:

chat_web腳本會(huì)使用FastAPI來提供Engine服務(wù)。要確保正確訪問它,比如在Lambda上,使用你所在節(jié)點(diǎn)的公網(wǎng)IP,后面加上端口,例如http://209.20.xxx.xxx:8000/等等。

那看起來會(huì)很棒,大概是這樣的:

它短期內(nèi)還無法在物理或詩歌比賽中獲勝,但話說回來——用這么少的預(yù)算能做到這個(gè)程度,看起來還是很酷的,而且這個(gè)項(xiàng)目還遠(yuǎn)遠(yuǎn)沒到充分調(diào)優(yōu)的地步。

強(qiáng)化學(xué)習(xí)

“速通”的最后一個(gè)階段是強(qiáng)化學(xué)習(xí)。

基于人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)是一種不錯(cuò)的方法,能提升幾個(gè)百分點(diǎn)的性能,還能緩解很多因采樣循環(huán)本身帶來的模型缺陷——比如幻覺、無限循環(huán)等。

但以我們的規(guī)模,這些都不是主要考慮因素。話雖如此,在我們目前使用的所有數(shù)據(jù)集中,GSM8K是唯一一個(gè)有清晰、客觀獎(jiǎng)勵(lì)函數(shù)的(數(shù)學(xué)題的正確答案)。

所以我們可以運(yùn)行RL(/GRPO)腳本,通過交替進(jìn)行采樣和訓(xùn)練的簡單強(qiáng)化學(xué)習(xí)循環(huán),直接在答案上進(jìn)行性能攀升:

在強(qiáng)化學(xué)習(xí)過程中,模型會(huì)遍歷訓(xùn)練集中所有的GSM8K題目,對完成情況進(jìn)行采樣,然后我們會(huì)對這些采樣結(jié)果進(jìn)行獎(jiǎng)勵(lì),并針對獲得高獎(jiǎng)勵(lì)的樣本進(jìn)行訓(xùn)練。

我們使用的是高度簡化的GRPO訓(xùn)練循環(huán),比如,不使用信任區(qū)域(舍棄參考模型和KL正則化),采用在策略(舍棄PPO的比率+裁剪),使用GAPO風(fēng)格的歸一化(基于token級(jí),而非序列級(jí)歸一化),優(yōu)勢函數(shù)僅通過均值進(jìn)行簡單的獎(jiǎng)勵(lì)平移(舍棄用除以標(biāo)準(zhǔn)差的z分?jǐn)?shù)歸一化)。

所以最后得到的東西看起來更像是REINFORCE算法,但保留了GR(”組相對”)部分來計(jì)算獎(jiǎng)勵(lì)的優(yōu)勢值。在當(dāng)前規(guī)模和任務(wù)簡單度下,這種方法效果尚可。更多細(xì)節(jié)請參閱腳本。

目前強(qiáng)化學(xué)習(xí)默認(rèn)是注釋掉的,因?yàn)樗€沒有經(jīng)過很好的調(diào)優(yōu),而且我們也沒有完整通用的RLHF。

只針對GSM8K進(jìn)行了強(qiáng)化學(xué)習(xí),這也是為什么用-a標(biāo)志將評(píng)估也限制在GSM8K上。由于強(qiáng)化學(xué)習(xí)就像通過吸管汲取監(jiān)督信號(hào),這個(gè)過程會(huì)運(yùn)行相當(dāng)長的時(shí)間。

例如,默認(rèn)設(shè)置下運(yùn)行約1.5小時(shí)后,效果如下所示:

成績

最后卡帕西指出的是項(xiàng)目文件夾里出現(xiàn)的report.md文件。它包含了很多與運(yùn)行相關(guān)的細(xì)節(jié),最后還有一個(gè)不錯(cuò)的總結(jié)表格:

  • Characters:333,989
  • Lines:8,304
  • Files:44
  • Tokens(approx):83,497
  • Dependencies(uv.lock lines):2,004

總用時(shí):3小時(shí)51分鐘

需要注意的是,由于目前對強(qiáng)化學(xué)習(xí)(RL)的支持還不太完善,在計(jì)算總耗時(shí)時(shí)把它排除了。到監(jiān)督微調(diào)(SFT)階段為止,整個(gè)過程運(yùn)行了3小時(shí)51分鐘,總成本為(3+51/60)×24=92.4美元(如果加上強(qiáng)化學(xué)習(xí),現(xiàn)在總時(shí)間會(huì)更接近5小時(shí))。

甚至還剩下8美元可以買冰淇淋呢。

該你了

借助nanochat,你可以對任何部分進(jìn)行調(diào)優(yōu)。

更換分詞器、修改任意數(shù)據(jù)、調(diào)整超參數(shù)、改進(jìn)優(yōu)化過程……有很多想法可以去嘗試。你或許還想訓(xùn)練更大的模型。這個(gè)代碼庫的設(shè)置能讓你輕松做到這一點(diǎn)。

只需使用—depth參數(shù)來更改層數(shù),其他所有相關(guān)設(shè)置都會(huì)基于這個(gè)參數(shù)作為復(fù)雜度的單一調(diào)節(jié)項(xiàng)而自動(dòng)調(diào)整。比如,通道數(shù)會(huì)增加,學(xué)習(xí)率會(huì)相應(yīng)調(diào)整等。

原則上,僅通過改變深度,你就能探索出一整套nanochat的“迷你系列”模型。使用更大的深度并等待更長時(shí)間,理論上你應(yīng)該能得到明顯更好的結(jié)果。

你需要在base_train.py的預(yù)訓(xùn)練階段傳入深度參數(shù)。例如,要得到一個(gè)CORE指標(biāo)約為0.25、性能接近GPT-2的模型,嘗試depth=26是個(gè)不錯(cuò)的選擇。

但訓(xùn)練更大模型時(shí),需要調(diào)整設(shè)備最大批處理大小,比如從32降至16:

代碼會(huì)察覺到這一變化并自動(dòng)進(jìn)行補(bǔ)償,它會(huì)通過2次梯度累積循環(huán)來達(dá)到目標(biāo)批處理量0.5M。要訓(xùn)練depth=30的模型,需要進(jìn)一步降低設(shè)置:

依此類推。歡迎大家去閱讀代碼,卡帕西盡力讓代碼保持易讀性,添加了注釋,代碼整潔且易于理解。

當(dāng)然,你也可以把所有內(nèi)容打包,去詢問你喜歡的大語言模型,或者更簡單的是,使用Devin/Cognition的DeepWiki來對這個(gè)代碼倉庫提問。只需把代碼倉庫的URL從github.com改成deepwiki.com即可,比如 nanochat DeepWiki。

就是這樣,調(diào)優(yōu)整個(gè)流程的任意部分,重新運(yùn)行,然后享受其中的樂趣吧!

AI界超高人氣專注于教育的大牛

卡帕西曾任特斯拉AI主管,之后去了OpenAI,去年2月從OpenAI離職。

他在整個(gè)AI界擁有超高的人氣,很大一部分來自于他的課程。

包括他自己的早期博客文字分享和后來的一系列Youtube視頻教程,他還與李飛飛合作開設(shè)的的斯坦福大學(xué)首個(gè)深度學(xué)習(xí)課程CS231n《卷積神經(jīng)網(wǎng)絡(luò)與視覺識(shí)別》。

今天的不少學(xué)者和創(chuàng)業(yè)者,都是跟著他入門的。

卡帕西對教育的熱情,甚至可以追溯到學(xué)生時(shí)期在網(wǎng)上教大家玩魔方。

去年7月,從OpenAI離職的卡帕西突然官宣創(chuàng)業(yè),搞了一家AI原生的新型學(xué)?!狤ureka Labs。

怎么理解AI原生?

想象一下與費(fèi)曼一起學(xué)習(xí)高質(zhì)量教材,費(fèi)曼會(huì)在每一步中1對1指導(dǎo)你。

不幸的是,即使每個(gè)學(xué)科都能找到一位像費(fèi)曼這樣的大師,他們也無法分身親自輔導(dǎo)地球上的80億人。

但AI可以,而且AI有無限的耐心,精通世界上所有的語言。

所以卡帕西要打造“教師+人工智能的共生”,可以在一個(gè)通用平臺(tái)上運(yùn)行整個(gè)課程。

如果我們成功了,任何人都將易于學(xué)習(xí)任何東西,擴(kuò)大教育這個(gè)概念本身的“范圍”和“程度”。

Eureka Labs首個(gè)產(chǎn)品,也是首門課程LLM101n。

手把手帶你構(gòu)建一個(gè)類似ChatGPT的故事生成大模型,以及配套的Web應(yīng)用程序。

GitHub repo:https://github.com/karpathy/nanochat

詳細(xì)指南:https://github.com/karpathy/nanochat/discussions/1

責(zé)任編輯:張燕妮 來源: 量子位
相關(guān)推薦

2024-04-09 15:22:24

2024-04-11 12:47:37

AI模型

2024-04-09 12:23:27

C語言AI

2024-05-30 07:02:00

KarpathyGPT-2人工智能

2023-02-27 09:29:05

GPT模型

2023-07-12 14:48:27

2023-08-23 12:02:49

數(shù)據(jù)OpenAIGPT-3.5

2024-06-11 08:37:00

2010-08-17 14:29:15

2017-10-29 21:43:25

人臉識(shí)別

2023-01-28 13:31:01

OpenAIChatGPT碼農(nóng)

2021-09-26 16:08:23

CC++clang_forma

2019-11-13 14:39:56

EdgeBoard

2024-01-29 13:56:55

AI數(shù)據(jù)

2024-11-21 14:30:00

模型訓(xùn)練

2020-11-08 14:13:31

Python帕累托分析開發(fā)

2024-01-26 08:16:48

Exporter開源cprobe

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)