如今這年頭,徒手寫神經(jīng)網(wǎng)絡(luò)代碼已經(jīng)不算事兒了,現(xiàn)在流行手搓大模型訓(xùn)練代碼了!這不,今天,特斯拉前 AI 總監(jiān)、OpenAI 創(chuàng)始團(tuán)隊成員 Andrej Karpathy 僅用 1000 行簡潔的 C 代碼,就完成了 GPT-2 大模型訓(xùn)練過程。 幾個小時前,Andrej Karpathy 推出了一個名為 llm.c 的項目,旨在用純 C 語言訓(xùn)練 LLM,這種方法的主要優(yōu)勢在于它顯著減少了依賴庫的體積——不再需要 245MB 的 PyTorch 和 107MB 的 cPython,這樣可以使得模型訓(xùn)練過程更為輕量化和高效。該項目還可以立即編譯和運行,并且可以與 PyTorch 的參考實現(xiàn)媲美。 Karpathy 表示他之所以選擇 GPT-2 作為首個工作示例,是因為它大語言模型鼻祖的定位,亦屬現(xiàn)代 AI 堆棧的首次組合。因此,選擇 GPT-2 作為起點,可以讓我們更容易地理解和實踐大型語言模型訓(xùn)練。 徒手實現(xiàn) GPT-2 后,Karpathy 將這份代碼放到了 GitHub 上,以 MIT 協(xié)議開源。短短幾個小時,就超過了 2500 顆星,并且數(shù)據(jù)還在不斷持續(xù)上漲...... Andrej Karpathy 是全球人工智能領(lǐng)域的知名科學(xué)家,也是 OpenAI 的創(chuàng)始成員和研究科學(xué)家。 他于 2009 年本科畢業(yè)于多倫多大學(xué),獲得計算機科學(xué)和物理學(xué)學(xué)士學(xué)位。2011 年碩士畢業(yè)于不列顛哥倫比亞大學(xué),隨后前往斯坦福大學(xué) AI Lab(SAIL)讀博,師從著名學(xué)者李飛飛,是全球最早將深度學(xué)習(xí)應(yīng)用于計算機視覺研究的學(xué)者之一。 在求學(xué)期間,Andrej Karpathy 曾在谷歌和 DeepMind 實習(xí),后來在 OpenAI 剛剛成立時加入并擔(dān)任研究科學(xué)家。直到 2017 年 6 月,他被馬斯克挖去,擔(dān)任特斯拉人工智能部門主管,直接向馬斯克匯報。在特斯拉工作的五年里,他主導(dǎo)了特斯拉自動輔助駕駛系統(tǒng) Autopilot 的開發(fā)。這項技術(shù)對于特斯拉的完全自動駕駛系統(tǒng) FSD 至關(guān)重要,也是馬斯克針對 Model S、Cybertruck 等車型推銷的主要賣點。在各大新聞中,他被譽為“特斯拉的秘密武器”。 去年 Karpathy 曾短暫回到 OpenAI,然后又在 OpenAI 眾人忙于內(nèi)斗時抽空錄制了一個長達(dá)一小時的教學(xué)視頻《大型語言模型入門》。 Karpathy 在視頻中首先介紹了一些 LLM 入門知識,然后以 Meta 推出的開源大模型 Llama 2-70b 為例進(jìn)行了講解。該模型有 700 億參數(shù),主要包含兩個文件,分別是參數(shù)文件,文件大小為 140GB,以及運行這些參數(shù)的代碼,以 C 語言為例需要約 500 行代碼。 Karpathy 表示只要有這兩個文件再加上一臺 MacBook,我們就可以構(gòu)建一個獨立的系統(tǒng),無需聯(lián)網(wǎng)或其他設(shè)施。 大模型訓(xùn)練,可以理解為是對互聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行有損壓縮,一般需要一個巨大的 GPU 集群來完成。以 Llama 2-70b 為例的話,就是使用了類似網(wǎng)絡(luò)爬取的約 10TB 的文本,用 6000 個 GPU ,耗資 200 萬美元,訓(xùn)練約 12 天,最后獲得基礎(chǔ)模型。 基礎(chǔ)模型即上圖里140GB的“壓縮文件”(壓縮率約100倍),就等于靠這些數(shù)據(jù)對世界形成了理解,那它就可以進(jìn)行“預(yù)測”工作了。 Karpathy 之前還分享過他的學(xué)習(xí)經(jīng)驗,就是開始時要嘗試從 0 開始,寫一些原生代碼,幫助理解消化知識點。 也就是說,徒手實現(xiàn)代碼才是最有效的學(xué)習(xí)方式。 兩年前,Karpathy 就曾基于 PyTorch,僅用 300 行左右的代碼就寫出了一個小型 GPT 訓(xùn)練庫,并將其命名為 minGPT,用這份代碼揭開了 GPT 神秘的面紗。 截圖來源:https://github.com/karpathy/minGPT 因為大多數(shù) GPT 模型的實現(xiàn)都過于龐大,而 minGPT 做到了小、干凈、可解釋和具有教育意義,所以 Karpathy 的這 300 行代碼是學(xué)習(xí) GPT 的最佳資源之一,可以用來深入理解 GPT 是如何工作的。 這次,Andrej Karpathy 單純通過 C/CUDA 實現(xiàn)大語言模型訓(xùn)練,且無需 245 MB PyTorch 或 107 MB cPython。例如,訓(xùn)練 GPT-2(CPU,fp32 單精度)需要在單個文件中使用約 1000 行簡潔代碼,可立即編譯并運行、且與 PyTOrch 參考實現(xiàn)完全匹配。 從某種意義上說,Karpathy 確實在嘗試重新設(shè)計 LLM 的架構(gòu)。他通過 llm.c 項目探索一種更簡單、更高效的訓(xùn)練 LLM 方法。與現(xiàn)有 LLM 架構(gòu)相比,這種新架構(gòu)的主要亮點包括:
有網(wǎng)友問 Karpathy 為何不用 Rust,Karpathy 回復(fù)說,“我完全理解 Rust 的吸引力。然而,我仍然覺得 C 語言非常棒。它簡單、干凈、可移植,在審美上也十分優(yōu)美。使用 C 語言就像直接與機器交流一樣。” 這種語言選擇也讓網(wǎng)友們紛紛感嘆: “我們正在掀起一場 C 語言復(fù)興!” “真男人就應(yīng)該用 C 語言編程。” Karpathy 以更簡單、更原始的 C/CUDA 架構(gòu)來做 LLM 的訓(xùn)練,其中還涉及算法優(yōu)化、計算資源管理等多個方面。
“一旦你擁有了所有的層,接下來的工作只是將它們串在一起。講道理,寫起來相當(dāng)乏味和自虐,因為你必須確保所有指針和張量偏移都正確排列, ”Karpathy 表示。 另外 Karpathy 還在 doc/layernorm/layernorm.md 中附上了短小的使用教程。里面是一份簡單的分步指南,用于實現(xiàn) GPT-2 模型中的單一層,即 layernorm 層,希望能成為大家理解在 C 中實現(xiàn)大語言模型各層的理想起點。 更重要的是,他還用自己的 MacBook Pro(蘋果 M3 Max 芯片)演示了整個訓(xùn)練過程,對照他之前的大模型入門教程,就可以輕松了解如今炙手可熱的 LLM 是怎么一回事兒了。 首先下載數(shù)據(jù)集并 token 化。 python prepro_tinyshakespeare.py 輸出結(jié)果為:
其中各.bin 文件為 int32 數(shù)字的原始字節(jié)流,用于指示 GPT-2 token 化器的 token id。或者也可以使用 prepro_tinystories.py 對 TinyStories 數(shù)據(jù)集進(jìn)行標(biāo)注。 原則上,到這里就已經(jīng)可以開始訓(xùn)練模型。為提高效率,可以使用 OpenAI 發(fā)布的 GPT-2 權(quán)重進(jìn)行初始化,而后加以微調(diào)。為此需要下載 GPT-2 權(quán)重并將其保存為可在 C 中加載的檢查點: python train_gpt2.py 該腳本會下載 GPT-2(124M)模型,對單批數(shù)據(jù)進(jìn)行 10 次過擬合迭代,運行多個生成步驟,最重要的是保存兩個文件:1)gpt2_124M.bin 文件,包含用于在 C 中加載的模型權(quán)重;2)以及 gpt2_124M_debug_state.bin,包含包括 input、target、logits 及 loss 等更多調(diào)試狀態(tài),對于調(diào)試 C 代碼、單元測試及確保能夠與 PyTorch 參考實現(xiàn)完全匹配非常重要。現(xiàn)在我們可以使用這些權(quán)重進(jìn)行初始化并在原始 C 代碼中進(jìn)行訓(xùn)練。首先編譯代碼:
在 train_gpt2 編譯完成后即可運行: OMP_NUM_THREADS=8 ./train_gpt2 大家應(yīng)根據(jù) CPU 的核心數(shù)量來調(diào)整線程數(shù)量。該程序?qū)⒓虞d模型權(quán)重、tokens,并使用 Adam lr 1e-4 運行數(shù)次迭代的微調(diào)循環(huán),而后由模型生成樣本。簡單來講,所有層都具有前向及后向傳遞實現(xiàn),串聯(lián)在一起形成統(tǒng)一的大型、手動前向 / 后向 / 更新循環(huán)。在 MacBook Pro(蘋果 M3 Max 芯片)上的輸出結(jié)果如下所示:
現(xiàn)在的生成結(jié)果僅給出 token ids,需要將其解碼回文本形式: <|endoftext|>Come Running Away, Greater conquer With the Imperial blood the heaviest host of the gods into this wondrous world beyond. I will not back thee, for how sweet after birth Netflix against repounder, will not flourish against the earlocks of Allay 參考鏈接: https://twitter.com/karpathy/status/1777427947126936026 https://github.com/karpathy/llm.c https://www./watch?v=zjkBMFhNj_g |
|