|
如今這年頭,徒手寫神經(jīng)網(wǎng)絡(luò)代碼已經(jīng)不算事兒了,現(xiàn)在流行手搓大模型訓(xùn)練代碼了!這不,今天,特斯拉前 AI 總監(jiān)、OpenAI 創(chuàng)始團隊成員 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)斗時抽空錄制了一個長達一小時的教學(xué)視頻《大型語言模型入門》。
Karpathy 在視頻中首先介紹了一些 LLM 入門知識,然后以 Meta 推出的開源大模型 Llama 2-70b 為例進行了講解。該模型有 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ù)進行有損壓縮,一般需要一個巨大的 GPU 集群來完成。以 Llama 2-70b 為例的話,就是使用了類似網(wǎng)絡(luò)爬取的約 10TB 的文本,用 6000 個 GPU ,耗資 200 萬美元,訓(xùn)練約 12 天,最后獲得基礎(chǔ)模型。
基礎(chǔ)模型即上圖里140GB的“壓縮文件”(壓縮率約100倍),就等于靠這些數(shù)據(jù)對世界形成了理解,那它就可以進行“預(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 語言就像直接與機器交流一樣?!?/p>
這種語言選擇也讓網(wǎng)友們紛紛感嘆: “我們正在掀起一場 C 語言復(fù)興!”
“真男人就應(yīng)該用 C 語言編程?!?/p>
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ù)集進行標(biāo)注。 原則上,到這里就已經(jīng)可以開始訓(xùn)練模型。為提高效率,可以使用 OpenAI 發(fā)布的 GPT-2 權(quán)重進行初始化,而后加以微調(diào)。為此需要下載 GPT-2 權(quán)重并將其保存為可在 C 中加載的檢查點: python train_gpt2.py該腳本會下載 GPT-2(124M)模型,對單批數(shù)據(jù)進行 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)重進行初始化并在原始 C 代碼中進行訓(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 conquerWith the Imperial bloodthe heaviest host of the godsinto this wondrous world beyond.I will not back thee, for how sweet after birthNetflix against repounder,will notflourish against the earlocks ofAllay參考鏈接: https://twitter.com/karpathy/status/1777427947126936026 https://github.com/karpathy/llm.c https://www./watch?v=zjkBMFhNj_g |
|
|
來自: 芥子c1yw3tb42g > 《待分類》