自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么要純C語言手搓GPT-2,Karpathy回應(yīng)網(wǎng)友質(zhì)疑

人工智能 新聞
llm.c 旨在讓大模型(LM)訓(xùn)練變得簡(jiǎn)單 —— 使用純 C 語言 / CUDA,不需要 245MB 的 PyTorch 或 107MB 的 cPython。

幾天前,前特斯拉 Autopilot 負(fù)責(zé)人、OpenAI 科學(xué)家 Andrej Karpathy 發(fā)布了一個(gè)僅用 1000 行代碼即可在 CPU/fp32 上實(shí)現(xiàn) GPT-2 訓(xùn)練的項(xiàng)目「llm.c」。

llm.c 旨在讓大模型(LM)訓(xùn)練變得簡(jiǎn)單 —— 使用純 C 語言 / CUDA,不需要 245MB 的 PyTorch 或 107MB 的 cPython。例如,訓(xùn)練 GPT-2(CPU、fp32)僅需要單個(gè)文件中的大約 1000 行干凈代碼(clean code),可以立即編譯運(yùn)行,并且完全可以媲美 PyTorch 參考實(shí)現(xiàn)。

項(xiàng)目鏈接:https://github.com/karpathy/llm.c

項(xiàng)目的 Star 量不到七個(gè)小時(shí)就沖上了 2000,目前已經(jīng)接近一萬 Star。很多網(wǎng)友驚呼太強(qiáng)了:「即使頂著指針 ptsd,我也能感受到這些代碼的美?!?/span>

然而,llm.c 項(xiàng)目收到的不只是稱贊,還有很多質(zhì)疑的聲音。例如,有網(wǎng)友直接提問:「能具體描述下這個(gè)項(xiàng)目做了什么嗎,解決了什么問題?」

對(duì)此,Karpathy 今天正面回應(yīng)了網(wǎng)友們的疑問,詳細(xì)闡述了 llm.c 項(xiàng)目的意義是什么,優(yōu)缺點(diǎn)有哪些。

機(jī)器之心對(duì) Karpathy 敘述原文進(jìn)行了不改變?cè)獾木幾g、整理,我們來看下 Karpathy 是怎么說的:

訓(xùn)練大型語言模型 (LLM),例如 ChatGPT,涉及大量代碼,復(fù)雜度很高。例如,典型的 LLM 訓(xùn)練可能會(huì)使用 PyTorch 深度學(xué)習(xí)庫。PyTorch 本身就相當(dāng)復(fù)雜,因?yàn)樗鼘?shí)現(xiàn)了:

  • 一個(gè)非常通用的張量抽象(一種排列和操作數(shù)組的方法,這些數(shù)組用于存儲(chǔ)神經(jīng)網(wǎng)絡(luò)參數(shù)和激活);
  • 一個(gè)非常通用的反向傳播 Autograd 引擎(訓(xùn)練神經(jīng)網(wǎng)絡(luò)參數(shù)的算法) ;
  • 在神經(jīng)網(wǎng)絡(luò)中使用的大量深度學(xué)習(xí)層。 

PyTorch 項(xiàng)目有 11449 個(gè)文件中的 3327184 行代碼。最重要的是,PyTorch 是用 Python 編寫的,Python 本身就是一種非常高級(jí)的語言 —— 必須運(yùn)行 Python 解釋器將訓(xùn)練代碼轉(zhuǎn)換為低級(jí)計(jì)算機(jī)指令。例如,執(zhí)行此轉(zhuǎn)換的 cPython 項(xiàng)目包含 4306 個(gè)文件中的 2437955 行代碼。

llm.c 項(xiàng)目旨在移除所有這些復(fù)雜性,并將 LLM 訓(xùn)練簡(jiǎn)化為其最基本的要素,用非常低級(jí)的語言 (C 語言) 直接與計(jì)算機(jī)對(duì)話,并且沒有其他庫依賴項(xiàng),唯一的抽象是匯編代碼本身。

令人驚訝的是,訓(xùn)練像 GPT-2 這樣的 LLM 實(shí)際上只需要在單個(gè)文件中使用大約 1000 行 C 語言代碼。我通過直接在 C 語言中實(shí)現(xiàn) GPT-2 的神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法來實(shí)現(xiàn)這種壓縮。這實(shí)際上很困難,因?yàn)槟惚仨氃敿?xì)了解訓(xùn)練算法,能夠?qū)С鏊袑臃聪騻鞑ィ╞ackpropagation)的 forward pass 和 backward pass,并非常仔細(xì)地實(shí)現(xiàn)所有數(shù)組索引計(jì)算,因?yàn)闆]有可用的 PyTorch 張量抽象。但一旦這樣做了,并且通過再次檢查 PyTorch 來驗(yàn)證正確性,你就會(huì)得到一些非常簡(jiǎn)單、小且精致的東西。

那么,為什么人們不一直這樣做呢?

第一:這放棄了很大的靈活性。如果你想改動(dòng)神經(jīng)網(wǎng)絡(luò),在 PyTorch 中你可能只需要更改一行代碼。而在 llm.c 中,改動(dòng)很可能會(huì)涉及更多代碼,可能會(huì)更加困難,并且需要更多專業(yè)知識(shí)。例如。如果涉及一個(gè)新的操作,你可能就需要做一些微積分,并寫出它的 forward pass 和 backward pass 以進(jìn)行反向傳播,并確保其在數(shù)學(xué)上是正確的。

第二:放棄速度,至少一開始是這樣的。天下沒有免費(fèi)的午餐 —— 不應(yīng)該指望僅 1000 行代碼就能達(dá)到最先進(jìn)的速度。PyTorch 在后臺(tái)做了很多工作,以確保神經(jīng)網(wǎng)絡(luò)非常高效。不僅所有張量操作都非常仔細(xì)地調(diào)用最高效的 CUDA 內(nèi)核,而且還有 torch.compile 等等,以進(jìn)一步分析和優(yōu)化神經(jīng)網(wǎng)絡(luò)并有效地在計(jì)算機(jī)上運(yùn)行。

現(xiàn)在,原則上,llm.c 應(yīng)該能夠調(diào)用所有相同的內(nèi)核并直接運(yùn)行。但這需要更多的工作,就像上述第一點(diǎn)一樣,如果更改神經(jīng)網(wǎng)絡(luò)或正在運(yùn)行的計(jì)算機(jī)的任何內(nèi)容,你可能必須使用不同的參數(shù)調(diào)用不同的內(nèi)核,并且可能會(huì)手動(dòng)進(jìn)行更多更改。

總的來說,llm.c 是訓(xùn)練 GPT-2 的直接實(shí)現(xiàn)。這個(gè)實(shí)現(xiàn)結(jié)果出人意料地簡(jiǎn)短。但 llm.c 不支持其他神經(jīng)網(wǎng)絡(luò),僅支持 GPT-2,如果你想更改神經(jīng)網(wǎng)絡(luò)的任何內(nèi)容,則需要專業(yè)知識(shí)。幸運(yùn)的是,所有最先進(jìn)的 LLM 實(shí)際上與 GPT-2 根本沒有太大的區(qū)別。并且,llm.c 必須進(jìn)行額外的調(diào)整和完善,但原則上我認(rèn)為它應(yīng)該幾乎能夠媲美,甚至超越 PyTorch,因?yàn)槲覀兿怂虚_銷。

最后,我為什么要做這個(gè)工作?因?yàn)檫@很有趣。它也很有教育意義,因?yàn)橹恍枰?1000 行非常簡(jiǎn)單的 C 語言代碼。它只是一些數(shù)組和對(duì)其元素進(jìn)行一些簡(jiǎn)單的數(shù)學(xué)運(yùn)算,例如 + 和 *。對(duì)于正在進(jìn)行的更多工作,它可能會(huì)變得實(shí)際有用。

責(zé)任編輯:張燕妮 來源: 機(jī)器之心
相關(guān)推薦

2024-04-09 12:23:27

C語言AI

2024-05-30 07:02:00

KarpathyGPT-2人工智能

2010-11-03 09:22:00

C語言

2010-01-22 15:14:37

學(xué)習(xí)C++

2015-05-25 15:31:56

C語言學(xué)習(xí)和使用 C 語言

2024-06-11 08:37:00

2024-11-21 14:30:00

模型訓(xùn)練

2024-06-12 13:27:58

2023-08-17 08:00:00

2024-04-09 15:22:24

2017-04-05 18:10:05

R語言開發(fā)Ross

2023-06-05 14:04:59

模型AI

2022-11-28 09:58:58

C++開發(fā)

2010-01-20 14:03:12

C++程序

2012-06-12 09:47:17

C語言

2020-09-04 15:34:07

C編程語言開發(fā)

2022-01-17 16:09:43

Go語言開發(fā)

2024-07-12 12:46:03

2023-12-30 14:01:50

AI搜索引擎Perplexity

2020-02-17 13:35:35

操作系統(tǒng)WindowsLinux
點(diǎn)贊
收藏

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