操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    者 | 核子可樂Tina


    徒手用 1000 行 C 語言實現,不依賴龐大的外部庫,Mac 即可運行。


    如今這年頭,徒手寫神經網絡代碼已經不算事兒了,現在流行手搓大模型訓練代碼了!這不,今天,特斯拉前 AI 總監、OpenAI 創始團隊成員 Andrej Karpathy 僅用 1000 行簡潔的 C 代碼,就完成了 GPT-2 大模型訓練過程。



    幾個小時前,Andrej Karpathy 推出了一個名為 llm.c 的項目,旨在用純 C 語言訓練 LLM,這種方法的主要優勢在于它顯著減少了依賴庫的體積——不再需要 245MB 的 PyTorch 和 107MB 的 cPython,這樣可以使得模型訓練過程更為輕量化和高效。該項目還可以立即編譯和運行,并且與 PyTorch 的參考實現完全匹配。


    Karpathy 表示他之所以選擇 GPT-2 作為首個工作示例,是因為它大語言模型鼻祖的定位,亦屬現代 AI 堆棧的首次組合。因此,選擇 GPT-2 作為起點,可以讓我們更容易地理解和實踐大型語言模型訓練。


    徒手實現 GPT-2 后,Karpathy 將這份代碼放到了 GitHub 上,以 MIT 協議開源。短短幾個小時,就超過了 2500 顆星,并且數據還在不斷持續上漲......



    將大模型原理拆解得無比簡單


    Andrej Karpathy 是全球人工智能領域的知名科學家,也是 OpenAI 的創始成員和研究科學家。


    他于 2009 年本科畢業于多倫多大學,獲得計算機科學和物理學學士學位。2011 年碩士畢業于不列顛哥倫比亞大學,隨后前往斯坦福大學 AI Lab(SAIL)讀博,師從著名學者李飛飛,是全球最早將深度學習應用于計算機視覺研究的學者之一。


    在求學期間,Andrej Karpathy 曾在谷歌和 DeepMind 實習,后來在 OpenAI 剛剛成立時加入并擔任研究科學家。直到 2017 年 6 月,他被馬斯克挖去,擔任特斯拉人工智能部門主管,直接向馬斯克匯報。在特斯拉工作的五年里,他主導了特斯拉自動輔助駕駛系統 Autopilot 的開發。這項技術對于特斯拉的完全自動駕駛系統 FSD 至關重要,也是馬斯克針對 Model S、Cybertruck 等車型推銷的主要賣點。在各大新聞中,他被譽為“特斯拉的秘密武器”。


    去年 Karpathy 曾短暫回到 OpenAI,然后又在 OpenAI 眾人忙于內斗時抽空錄制了一個長達一小時的教學視頻《大型語言模型入門》。



    Karpathy 在視頻中首先介紹了一些 LLM 入門知識,然后以 Meta 推出的開源大模型 Llama 2-70b 為例進行了講解。該模型有 700 億參數,主要包含兩個文件,分別是參數文件,文件大小為 140GB,以及運行這些參數的代碼,以 C 語言為例需要約 500 行代碼。


    Karpathy 表示只要有這兩個文件再加上一臺 MacBook,我們就可以構建一個獨立的系統,無需聯網或其他設施。



    大模型訓練,可以理解為是對互聯網數據進行有損壓縮,一般需要一個巨大的 GPU 集群來完成。以 Llama 2-70b 為例的話,就是使用了類似網絡爬取的約 10TB 的文本,用 6000 個 GPU ,耗資 200 萬美元,訓練約 12 天,最后獲得基礎模型。



    基礎模型即上圖里 140GB 的“壓縮文件”(壓縮率約 100 倍),就等于靠這些數據對世界形成了理解,那它就可以進行“預測”工作了。


    Karpathy 之前還分享過他的學習經驗,就是開始時要嘗試從 0 開始,寫一些原生代碼,幫助理解消化知識點。也就是說,徒手實現代碼才是最有效的學習方式。


    兩年前,Karpathy 就曾基于 PyTorch,僅用 300 行左右的代碼就寫出了一個小型 GPT 訓練庫,并將其命名為 minGPT,用這份代碼揭開了 GPT 神秘的面紗。



    截圖來源:https://github.com/karpathy/minGPT


    因為大多數 GPT 模型的實現都過于龐大,而 minGPT 做到了小、干凈、可解釋和具有教育意義,所以 Karpathy 的這 300 行代碼是學習 GPT 的最佳資源之一,可以用來深入理解 GPT 是如何工作的。


    用 C 語言實現 LLM


    這次,Andrej Karpathy 單純通過 C/CUDA 實現大語言模型訓練,且無需 245 MB PyTorch 或 107 MB cPython。例如,訓練 GPT-2(CPU,fp32 單精度)需要在單個文件中使用約 1000 行簡潔代碼,可立即編譯并運行、且與 PyTorch 參考實現完全匹配。



    從某種意義上說,Karpathy 確實在嘗試重新設計 LLM 的架構。他通過 llm.c 項目探索一種更簡單、更高效的訓練 LLM 方法。與現有 LLM 架構相比,這種新架構的主要亮點包括:


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

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

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


    有網友問 Karpathy 為何不用 Rust,Karpathy 回復說,“我完全理解 Rust 的吸引力。然而,我仍然覺得 C 語言非常棒。它簡單、干凈、可移植,在審美上也十分優美。使用 C 語言就像直接與機器交流一樣。”



    這種語言選擇也讓網友們紛紛感嘆:


    “我們正在掀起一場 C 語言復興!”



    “真男人就應該用 C 語言編程。”



    Karpathy 以更簡單、更原始的 C/CUDA 架構來做 LLM 的訓練,其中還涉及算法優化、計算資源管理等多個方面。



    你會看到,項目在開始時一次性分配所有所需的內存,這些內存是一大塊 1D 內存。然后在訓練過程中,不會創建或銷毀任何內存,因此內存占用量保持不變,并且只是動態的,將數據批次流過。這里的關鍵在于手動實現所有單個層的前向和后向傳遞,然后將它們串聯在一起。

    例如,這里是 layernorm 前向和后向傳遞。除了 layernorm 之外,我們還需要編碼器、matmul、自注意力、gelu、殘差、softmax 和交叉熵損失。


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



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


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


    訓練過程:


    首先下載數據集并 token 化。


    python prepro_tinyshakespeare.py


    輸出結果為:


    Saved 32768 tokens to data/tiny_shakespeare_val.bin

    Saved 305260 tokens to data/tiny_shakespeare_train.bin


    其中各.bin 文件為 int32 數字的原始字節流,用于指示 GPT-2 token 化器的 token id。或者也可以使用 prepro_tinystories.py 對 TinyStories 數據集進行標注。


    原則上,到這里就已經可以開始訓練模型。為提高效率,可以使用 OpenAI 發布的 GPT-2 權重進行初始化,而后加以微調。為此需要下載 GPT-2 權重并將其保存為可在 C 中加載的檢查點:


    python train_gpt2.py


    該腳本會下載 GPT-2(124M)模型,對單批數據進行 10 次過擬合迭代,運行多個生成步驟,最重要的是保存兩個文件:1)gpt2_124M.bin 文件,包含用于在 C 中加載的模型權重;2)以及 gpt2_124M_debug_state.bin,包含包括 input、target、logits 及 loss 等更多調試狀態,對于調試 C 代碼、單元測試及確保能夠與 PyTorch 參考實現完全匹配非常重要。現在我們可以使用這些權重進行初始化并在原始 C 代碼中進行訓練。首先編譯代碼:


    make train_gpt2


    在 train_gpt2 編譯完成后即可運行:


    OMP_NUM_THREADS=8 ./train_gpt2


    大家應根據 CPU 的核心數量來調整線程數量。該程序將加載模型權重、tokens,并使用 Adam lr 1e-4 運行數次迭代的微調循環,而后由模型生成樣本。簡單來講,所有層都具有前向及后向傳遞實現,串聯在一起形成統一的大型、手動前向/后向/更新循環。在 MacBook Pro(蘋果 M3 Max 芯片)上的輸出結果如下所示:


    [GPT-2]

    max_seq_len: 1024

    vocab_size: 50257

    num_layers: 12

    num_heads: 12

    channels: 768

    num_parameters: 124439808

    train dataset num_batches: 1192

    val dataset num_batches: 128

    num_activations: 73323776

    val loss 5.252026

    step 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.107781

    generated: 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 323

    step 40: train loss 4.377757 (took 1366.368000 ms)


    現在的生成結果僅給出 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


    原文鏈接:“真男人就應該用 C 編程”!用 1000 行 C 代碼手搓了一個大模型,Mac 即可運行,特斯拉前AI總監爆火科普 LLM_生成式 AI_核子可樂_InfoQ精選文章

    、本系列文章簡介

    • 什么是C語言
    • C語言之父
    • C語言的由來
    • C語言的發展
    • 為什么要學C語言/能做什么
    • 為什么要學習這套C語言
    • 本套課程適用人群
    • 本套筆記介紹

    二、C語言標準

    2.1 標準簡史

    • 1. 1972年C語?在?爾實驗室誕?. 丹尼斯·?奇 參考B語?開發.
    • 2. 1970-80年代,C語?被?泛應?,產?很多不同的C語?版本. 程序可移植性?較差.
    • 3. 1983年,美國國家標準委員會(ANSI) 成??個?組來制定C語?的標準. C語??持哪些語法、?持哪些功能
    • 等等.
    • 4. 1989年,通過了C語?的第?個標準. C89標準.
    • 5. 1990年,國際標準化組織(ISO) 和 國際電?委員會(IEC) 將 C89標準當做國際的C語?標準. C90標準. C89和
    • C90指的是同?個標準
    • 6. 1994年 ISO和 IEC 對 C89標準進?修訂. C94標準. 由于并沒有增加新的語法特性,還是叫做 C89或者C90.
    • 7. 1995年 ISO和IEC再次做了修正,C95 標準.
    • 8. 1999年 ISO 和 IEC 發布了C語?新標準. C語?第?個標準. 在該標準中,新增許多實?的C語?語法特性. 增
    • 加新的關鍵字、可變?數組等等. C99標準
    • 9. 2007年,重新修訂了C語?.
    • 10. 2011年, 發布新的版本。新增了?些語法,泛型、國際化?持. ?前為?最新版本是 C11.

    2.2 標準的影響

    1. 可將C語?的標準理解為C語?說明書。但其并沒有強制性約束?。

    • > 如:微軟拿到標準,認為有些標準不合理,不?持。
    • > 微軟認為某些特性?常好,但標準中沒有,微軟可以修改標準,新增語法.

    2. 如果編譯器不?持標準,我們即使使?標準中的語法仍然會報錯。

    3. 編譯器版本也會影響程序。因此,編寫程序之前要確定編譯器版本。

    2.3 常見C/C++編譯器

    Borland C++ 寶藍公司

    Intel C++ 英特爾編譯器

    VC++ 微軟公司

    g++編譯器(gcc是編譯套件), Linux 默認使?的編譯器. 對標準?持最好.

    2.4 C語言的優缺點

    優點:學習成本快、運行速度快,功能強

    缺點:代碼實現周其長,可移植性差、對經驗要求高、對平臺庫依賴多

    2.5 C語言的應用領域

    * 服務器。

    * 操作系統。

    * 上層應?。 MFC、QT

    * 嵌?式。

    * ??智能、硬件驅動。

    * 中間件。

    * ?絡攻防、數據安全。

    * ?學必修課。

    2.6 常見開發工具

    • Windows操作系統

    vs(visual studio)2013、2015、2017、2019、2022

    Clion:跨平臺IDE、跟Java的IDEA、python的pycharm是同一家公司的

    Qt Creator 跨平臺IDE

    • MacOS(蘋果電腦的操作系統)

    Xcode Clion:跨平臺IDE。 Qt Creator 跨平臺IDE。

    • Linux:

    vi/vim —— ?本編輯器。 Clion:跨平臺IDE。 Qt Creator 跨平臺IDE。

    備注:大多企業開發用vs會更多一些

    三、第一個程序

    3.1 環境搭建

    打開微軟的官方網站 https://visualstudio.microsoft.com/,下載 Visual Studio 安裝包。

    雙擊安裝包進行安裝

    操作一:在“工作負荷”標簽頁中,選擇“使用C++桌面開發選項即可”

    操作二:“安裝位置”中修改安裝路徑

    路徑要求:

    • 不要有中文,不要有空格,不要有一些特殊符號
    • 選擇一個統一的文件夾進行管理

    自動下載并安裝,過程耗時較長,需要耐心等待

    安裝完成之后,彈出安裝完畢的對話框,點擊確定。

    接下來VS希望你使用微軟賬號登錄,要是沒有注冊一個,或者可以點擊【暫時跳過】這個選項

    根據提示選擇一個自己喜歡的主題。

    點擊啟動,到此整個環境搭建完畢。

    3.2 第一個Helloworld

    1.創建項目

    點擊【創建新項目】

    2. 選擇創建【控制臺應用】點擊下 一步

    3.指定項目名稱,確保位置下的項目存儲目錄存在。勾選【將解決方案和項目....】,點擊【創建】

    4.右側的解決方案管理器可以安裝自己的習慣放在左側或者右側

    默認是右側,各位小伙伴也可以拖到左側來,每個人的習慣不同,沒有固定標準


    5.創建 helloworld.c ?件

    右鍵選擇源文件,選擇添加,選擇新建項

    6.在彈出的編輯框中,選中【C++文件(.cpp)】將下方“源.cpp”手動改為要創建的文件名

    如:helloWorld.c 。注意,默認 cpp 后綴名,要手動改為 .c 后綴名,然后點擊 “添加”。

    7. 編寫第一個代碼

    #include <stdio.h>
    int main(void)
    {
        printf("hello world!\n");
        return 0;
    }
    

    8. 點擊上方綠色空心三角運行即可

    3.3 代碼逐行分析

    1. ‘#include' : 引?頭?件專?關鍵字。

    2. <> : ?來包裹 庫頭?件名

    3. stdio.h : 使?的頭?件。因為程序中使?了 printf() 函數。就必須使?該頭?件。

    >std:標準:standard

    >i: input 輸?。

    >o: output 輸出。

    4. int :main 函數返回值為整型。

    5. main: 整個程序的??函數。 任何.c 程序,有且只有?個 main 函數。

    6. printf(); C語?向屏幕輸出字符使?的函數。

    7. printf(“helloworld\n”)

    > printf();向屏幕輸出一段內容

    > helloworld: 待寫出的字符串內容。

    > \n: 回?換?。

    8. return 0;

    > return 返回。 C程序要求,main 函數要有返回值。借助 return 實現返回。

    > 0:成功!因為 int ,返回整數。

    注意事項

    • 程序中使用的所有字符,全部都是“英文半角”字符
    • 程序中,嚴格區分大小寫
    • “;” 代表??結束。不能使? 中? “;”,必須是英?。

    3.4 代碼執行流程分析

    完成的C語言運行,分為以下4步,在VS中我們直接運行,其實是把中間的步驟給省略了

    * 預處理(這一步后面單獨講解)

    簡單理解,就是先找到#include后面的 <stdio.h>這個文件

    * 編譯

    把c文件編譯成二進制文件后綴名為obj

    * 連接/鏈接

    把預處理找到的h文件,還有編譯之后產生的obj文件打包在一起,產生exe文件

    * 運行

    運行exe文件

    文默認您已安裝好Objective-C開發環境。

    即在 macOS 上使用 Xcode 或者在命令行中使用 clang 編譯器。

    Objective-C,是擴充C的面向對象編程語言,用于開發基于macOS和IOS系統的應用程序。

    GCC與Clang是Objective-C常用的編譯器。

    #import <Foundation/Foundation.h>

    int main(int argc, const char * argv[]) {

    @autoreleasepool {

    NSLog(@"Hello, World!");

    }

    return 0;

    }

    代碼解析

    #import <Foundation/Foundation.h>:導入 Foundation 框架,是用于處理基本數據類型、集合、字符串等的框架。

    int main(int argc, const char * argv[]):這是程序的入口點(C語言也使用main方法作為入口點),接收命令行參數。

    @autoreleasepool { ... }:@autoreleasepool 是 Objective-C 中用來創建自動釋放池的語法塊。它用來管理內存的釋放。

    NSLog(@"Hello, World!");:NSLog 是 Objective-C 中用來打印輸出的函數,類似于 C 語言中的 printf。在控制臺輸出字符串 "Hello, World!"。

    return 0;:返回 0 表示程序正常退出。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有