色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

          EEPW首頁 > 博客 > OpenAI聯(lián)創(chuàng)Karpathy愛上羊駝:純C代碼實(shí)現(xiàn)嬰兒Llama2,MacBook可運(yùn)行,已攬1.6k星

          OpenAI聯(lián)創(chuàng)Karpathy愛上羊駝:純C代碼實(shí)現(xiàn)嬰兒Llama2,MacBook可運(yùn)行,已攬1.6k星

          發(fā)布人:機(jī)器之心 時(shí)間:2023-07-25 來源:工程師 發(fā)布文章
          上個(gè)周末,Karpathy 花了整個(gè)周六來忙一個(gè) Llama2 的有趣項(xiàng)目。


          這一周來,Meta 開源的 Llama2 火遍了整個(gè) AI 社區(qū)。
          這不,連特斯拉前 AI 總監(jiān)、年初重回 OpenAI 的 Andrej Karpathy 也坐不住了。他利用周末時(shí)間,做了一個(gè)關(guān)于 Llama2 的有趣項(xiàng)目 ——「llama2.c」。
          圖片
          GitHub 地址:https://github.com/karpathy/llama2.c
          具體是什么呢?他表示「llama2.c」可以讓你在 PyTorch 中訓(xùn)練一個(gè) baby Llama2 模型,然后使用近 500 行純 C、無任何依賴性的文件進(jìn)行推理。并且,這個(gè)預(yù)訓(xùn)練模型能夠在 M1 芯片的 MacBook Air 上以 fp32 的浮點(diǎn)精度、18 tok/s 的速度對(duì)故事進(jìn)行采樣。
          Karpathy 介紹稱,「llama2.c」的靈感來自 llama.cpp,后者由資深開源社區(qū)開發(fā)者 Georgi Gerganov 創(chuàng)建,可以在 MacBook 上使用 4-bit 量化運(yùn)行第一代 LLaMA 模型。
          對(duì)于「llama2.c」,它的訓(xùn)練代碼由 nanoGPT 修改而來,用來訓(xùn)練 Llama2 架構(gòu)的模型。核心是在如下 run.c 中編寫 C 推理引擎,不過它目前并不是一個(gè)生產(chǎn)級(jí)庫。下面是部分推理代碼。
          圖片
          完整代碼地址:https://github.com/karpathy/llama2.c/blob/master/run.c
          結(jié)果令 Karpathy 非常驚訝,你可以在(M1)CPU 的純單線程 C 語言中以 fp32 的交互速率來推理更?。∣ (~10MB))的模型。
          當(dāng)然,他表示自己沒有嘗試對(duì)最小規(guī)模的 Llama2 模型(70 億參數(shù))進(jìn)行推理,他預(yù)計(jì)速度會(huì)非常慢。
          圖片
          目前,Karpathy 在 M1 MacBook Air 上,能夠以 fp32 的浮點(diǎn)精度、100tok/s 的速度對(duì) 15M 參數(shù)的 288 6 層 6 頭的模型進(jìn)行推理。
          之后,Karpathy 對(duì)項(xiàng)目進(jìn)行了更新,使用「-O3」進(jìn)行編譯可以將 M1 MacBook Air 上的 tok/s 從 18 增加到了 98。這還沒完,使用「-funsafe-math-optimizations」進(jìn)行編譯更是將 tok/s 增加到 315。他表示,只要在 gcc 命令中包含更多字符,速度就能提升 17.5 倍。
          也許你要問了,這個(gè)項(xiàng)目有什么意義呢?在 Karpathy 看來,在一些較窄的領(lǐng)域(如生成故事)中,人們可以使用極其小的 Transformers 來做有趣的事情。
          因此,這種可以移植的純 C 實(shí)現(xiàn)或許非常有用,我們可以通過簡(jiǎn)單的方法高交互速率地運(yùn)行合理大小的模型(幾千萬參數(shù))。
          有網(wǎng)友對(duì)「llama2.c」的開發(fā)過程很感興趣,很多人都會(huì)有這樣的想法,只是在等待合適的時(shí)機(jī),他們沒意識(shí)到幾天內(nèi)就可以完成很多工作。
          Karpathy 回復(fù)稱,自己對(duì)利用 float32 權(quán)重塊及其上的微小推理代碼來生成故事非常感興趣。所以他花了整個(gè)周六的時(shí)間(從起床一直到睡覺)來寫代碼,然后讓項(xiàng)目工作。
          圖片
          此外,Karpathy 還表示自己將出講解視頻。
          圖片
          項(xiàng)目詳情
          到目前為止,「llama2.c」項(xiàng)目已經(jīng)在 GitHub 上獲得了 1.6k 的 Stars,并在快速增長(zhǎng)。
          圖片
          下面簡(jiǎn)單介紹一下該項(xiàng)目的運(yùn)行步驟。
          為了使用純 C 語言運(yùn)行一個(gè) baby Llama2 模型,你需要以下的模型檢查點(diǎn)。下載 TinyStories 數(shù)據(jù)集上訓(xùn)練的一個(gè) 15M 參數(shù)的模型(大約 58MB),并將它放入默認(rèn)檢查點(diǎn)目錄中。


          wget https://karpathy.ai/llama2c/model.bin -P out

          然后編譯并運(yùn)行 C 代碼。


          gcc -O3 -o run run.c -lm./run out/model.bin

          請(qǐng)注意這只是原始 tokens 流。遺憾的是,我們現(xiàn)在必須通過一個(gè)簡(jiǎn)單的轉(zhuǎn)換封裝器來運(yùn)行 C 代碼(只有 30 行)。


          pip install sentencepiecepython run_wrap.py

          最后你將看到文本流。在 Karpathy 的 M1 MacBook Air 上,運(yùn)行速度約 100 tok/s,對(duì)于超級(jí)原生的 fp32 單線程 C 代碼來說還不錯(cuò)。示例輸出如下所示。
          圖片

          更多細(xì)節(jié)請(qǐng)查看原項(xiàng)目。

          *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



          關(guān)鍵詞: AI

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉