久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    “真男人就應(yīng)該用 C 編程”!用 1000 行 C 代碼手搓了一個大模型,Mac 即可運行,特斯拉前AI總監(jiān)爆火科普 LLM

     芥子c1yw3tb42g 2024-04-10 發(fā)布于陜西

    圖片

    編譯 | 核子可樂、Tina
    徒手用 1000 行 C 語言實現(xiàn),不依賴龐大的外部庫,Mac 即可運行。   

    如今這年頭,徒手寫神經(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 是如何工作的。

    用 C 語言實現(xiàn) LLM

    這次,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)的主要亮點包括:

    1. 代碼簡潔性:僅使用約 1000 行代碼就能完成 GPT-2 模型的訓(xùn)練,相比之下顯著降低了復(fù)雜度。

    2. 獨立性:不依賴龐大的外部庫如 PyTorch 或 cPython,使得部署和運行更加輕便快捷。

    3. 高效性:直接使用 C/CUDA 進(jìn)行編程有望提高計算效率和訓(xùn)練速度。

    有網(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)化、計算資源管理等多個方面。

    圖片

    你會看到,項目在開始時一次性分配所有所需的內(nèi)存,這些內(nèi)存是一大塊 1D 內(nèi)存。然后在訓(xùn)練過程中,不會創(chuàng)建或銷毀任何內(nèi)存,因此內(nèi)存占用量保持不變,并且只是動態(tài)的,將數(shù)據(jù)批次流過。這里的關(guān)鍵在于手動實現(xiàn)所有單個層的前向和后向傳遞,然后將它們串聯(lián)在一起。
    例如,這里是 layernorm 前向和后向傳遞。除了 layernorm 之外,我們還需要編碼器、matmul、自注意力、gelu、殘差、softmax 和交叉熵?fù)p失。

    “一旦你擁有了所有的層,接下來的工作只是將它們串在一起。講道理,寫起來相當(dāng)乏味和自虐,因為你必須確保所有指針和張量偏移都正確排列, ”Karpathy 表示。

    圖片

    另外 Karpathy 還在 doc/layernorm/layernorm.md 中附上了短小的使用教程。里面是一份簡單的分步指南,用于實現(xiàn) GPT-2 模型中的單一層,即 layernorm 層,希望能成為大家理解在 C 中實現(xiàn)大語言模型各層的理想起點。

    更重要的是,他還用自己的 MacBook Pro(蘋果 M3 Max 芯片)演示了整個訓(xùn)練過程,對照他之前的大模型入門教程,就可以輕松了解如今炙手可熱的 LLM 是怎么一回事兒了。

    訓(xùn)練過程:

    首先下載數(shù)據(jù)集并 token 化。

    python prepro_tinyshakespeare.py

    輸出結(jié)果為:

    Saved 32768 tokens to data/tiny_shakespeare_val.binSaved 305260 tokens to data/tiny_shakespeare_train.bin

    其中各.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)練。首先編譯代碼:

    make train_gpt2

    在 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é)果如下所示:

    [GPT-2]max_seq_len: 1024vocab_size: 50257num_layers: 12num_heads: 12channels: 768num_parameters: 124439808train dataset num_batches: 1192val dataset num_batches: 128num_activations: 73323776val loss 5.252026step 0: train loss 5.356189 (took 1452.121000 ms)step 1: train loss 4.301069 (took 1288.673000 ms)step 2: train loss 4.623322 (took 1369.394000 ms)step 3: train loss 4.600470 (took 1290.761000 ms)... (trunctated) ...step 39: train loss 3.970751 (took 1323.779000 ms)val loss 4.107781generated: 50256 16773 18162 21986 11 198 13681 263 23875 198 3152 262 11773 2910 198 1169 6002 6386 2583 286 262 11858 198 20424 428 3135 7596 995 3675 13 198 40 481 407 736 17903 11 329 703 6029 706 4082 198 42826 1028 1128 633 263 11 198 10594 407 198 2704 454 680 1028 262 1027 28860 286 198 3237 323step 40: train loss 4.377757 (took 1366.368000 ms)

    現(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

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 亚洲精品无码AV人在线播放| 97久久精品无码一区二区| 亚洲人成中文字幕在线观看| 亚洲综合激情另类小说区 | 英语老师解开裙子坐我腿中间| 国产福利深夜在线观看| 久久亚洲AV成人网站玖玖| 久久精品人妻中文系列葵司| 东京热人妻丝袜无码AV一二三区观| 精品人妻伦九区久久AAA片| 亚洲精品男男一区二区| 看全色黄大色大片免费久久| 高清偷拍一区二区三区| 亚洲另类无码一区二区三区| 国产精品成人午夜福利| 午夜精品一区二区三区免费视频| 国产精品一码二码三码| 放荡的美妇在线播放| 亚洲AV国产福利精品在现观看| 国内精品久久久久影院优| 亚洲欧美人成网站在线观看看| 色老头在线一区二区三区| 一卡二卡三卡四卡视频区| 久久久久亚洲精品无码网址 | AV色欲无码人妻中文字幕| 免费观看欧美猛交视频黑人| 午夜无码电影888不卡| 日本高清乱理伦片中文字幕| 宝贝腿开大点我添添公视频免 | 无遮挡H肉动漫在线观看 | 精品无码一区二区三区电影| 国产免费高清69式视频在线观看 | 国产在线一区二区不卡| 无码一区二区三区中文字幕| 亚洲人成网线在线播放VA| 久久久久香蕉国产线看观看伊| 人妻综合专区第一页| 国产超高清麻豆精品传媒麻豆精品 | 天天夜碰日日摸日日澡性色AV| 亚洲欧美日韩成人综合一区| 国产一区二区波多野结衣|