<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

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

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

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


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


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

然后編譯并運行 C 代碼。


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

請注意這只是原始 tokens 流。遺憾的是,我們現在必須通過(guò)一個(gè)簡(jiǎn)單的轉換封裝器來(lái)運行 C 代碼(只有 30 行)。


pip install sentencepiecepython run_wrap.py

最后你將看到文本流。在 Karpathy 的 M1 MacBook Air 上,運行速度約 100 tok/s,對于超級原生的 fp32 單線(xiàn)程 C 代碼來(lái)說(shuō)還不錯。示例輸出如下所示。
圖片

更多細節請查看原項目。

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



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>