原文來源:量子位
圖片來源:由無界 AI生成
原本需要一張16萬元的80G A100干的活,現(xiàn)在只需要一張不到2萬元的24G 4090就夠了!
上海交大IPADS實驗室推出的開源推理框架PowerInfer,讓大模型推理速度加快了11倍。
而且不用量化,就用FP16精度,也能讓40B模型在個人電腦上運(yùn)行;如果加入量化,2080 Ti也能流暢運(yùn)行70B模型。
結(jié)合大模型的獨(dú)特特征,通過CPU與GPU間的混合計算,PowerInfer能夠在顯存有限的個人電腦上實現(xiàn)快速推理。
相比于llama.cpp,PowerInfer實現(xiàn)了高達(dá)11倍的加速,讓40B模型也能在個人電腦上一秒能輸出十個token。
我們最熟悉的ChatGPT,一方面有時會因為訪問量過大而宕機(jī),另一方面也存在數(shù)據(jù)安全問題。
開源模型能較好地解決這兩個問題,但如果沒有高性能的顯卡,運(yùn)行速度往往十分感人:
而PowerInfer的出現(xiàn),剛好解決了這個痛點(diǎn)。
PowerInfer一經(jīng)發(fā)布就引起熱烈反響,不到24小時就獲得了500+星標(biāo),其中還有一顆來自llama.cpp的作者Gerganov。
目前,PowerInfer的源碼和論文均已公開,下面就一起看看它的加速效果究竟有多強(qiáng)。
推理速度最高11倍
在搭載x86 CPU和NVIDIA GPU的消費(fèi)級硬件平臺上,PowerInfer以參數(shù)量從7B到175B的一系列LLM模型為基準(zhǔn),對PowerInfer的端到端推理速度進(jìn)行了測試,并和同平臺上性能最好的推理框架llama.cpp進(jìn)行了對比。
對于FP16精度的模型,在搭載了13代Intel Core i9和單張RTX 4090的高端PC(PC-High)上,PowerInfer平均實現(xiàn)了7.23倍的速度提升,其中在Falcon 40B上實現(xiàn)了高達(dá)11.69倍的速度提升。
在所有測試用例上,PowerInfer平均達(dá)到了8.32 tokens/s,在OPT 30B和Falcon 40B上最高分別達(dá)到16.06 tokens/s和12.94 tokens/s。
借助PowerInfer,當(dāng)今的消費(fèi)級平臺可以流暢運(yùn)行30-40B級別的LLM,并以可以接受的速度運(yùn)行70B級別的LLM。
△?PowerInfer在不同模型中不同輸出長度下平均生成token速度測試圖,縱坐標(biāo)為加速比,每根柱狀圖上標(biāo)注的數(shù)字代表了每秒鐘能夠生成的token數(shù)量
模型量化是端側(cè)LLM推理非常常用的技術(shù),PowerInfer也支持了INT4量化模型的推理。
PowerInfer分別在高端PC(PC-High)和搭載單張RTX 2080Ti的中低端PC(PC-Low)上測試了一系列INT4量化模型的推理速度。
在PC-High上,PowerInfer能夠高速運(yùn)行40-70B規(guī)模的模型,最高達(dá)到了29.09 tokens/s的推理速度,并且實現(xiàn)了平均2.89倍,最高4.28倍的速度提升。
同時,在消費(fèi)級硬件上運(yùn)行OPT-175B這種規(guī)模的模型也成為可能。
在PC-Low這種中低端PC上,PowerInfer可以流暢運(yùn)行30-70B規(guī)模的模型,并實現(xiàn)平均5.01倍,最高8.00倍的速度提升,這主要得益于INT4量化后模型大部分熱神經(jīng)元得以放置在顯存中。
△?PowerInfer在INT4量化模型中的推理速度,縱坐標(biāo)為加速比,每根柱狀圖上標(biāo)注的數(shù)字代表了每秒鐘能夠生成的token數(shù)量
最后,PowerInfer對比了PC-High上運(yùn)行PowerInfer相比于云端頂級計算卡A100運(yùn)行SOTA框架vLLM的端到端推理速度,測試模型為FP16精度的OPT-30B和Falcon-40B(ReLU)。
當(dāng)輸入長度為64時,PowerInfer對A100的速度差距從93%-94%縮小到了28%-29%;在輸入長度為1的純生成場景中,這一差距會被進(jìn)一步縮小到低至18%。
這代表著PowerInfer借助稀疏激活和CPU/GPU混合推理,極大地彌合了消費(fèi)級顯卡到頂尖服務(wù)端計算卡的推理速度差距。
△PowerInfer在4090上與vLLM在A100的性能對比
那么,PowerInfer是如何實現(xiàn)消費(fèi)級硬件上的高速推理的呢?
充分利用模型和硬件特點(diǎn)
PowerInfer實現(xiàn)高速推理的秘訣,在于充分利用了稠密模型存在的高局部性的稀疏激活,并與CPU和GPU的運(yùn)算特點(diǎn)進(jìn)行了充分結(jié)合。
何謂“稀疏激活”?
最近Mixtral MoE大模型引爆了整個AI圈,稀疏模型重新進(jìn)入大家的視野。
一個有趣的事實是:像OPT、LLaMA(ReLU)這樣被視為稠密模型的LLM,同樣存在稀疏激活的特征。
什么是稠密模型的稀疏激活呢?
和MoE模型中一個輸入token只需要激活FFN layer其中一個或者兩個專家模塊類似,以O(shè)PT模型的稠密FFN層為例,只需要激活一小部分(實驗顯示約10%)神經(jīng)元即可保證輸出的正確性。
其他的神經(jīng)元雖然參與了計算,但并沒有對輸出產(chǎn)生明顯貢獻(xiàn)。
換句話說,稠密模型中的每一個神經(jīng)元都是一個專家!
△?左圖來自Alexander Clark論文(aRXiv編號:2101.03961)
MoE模型可以在專家FFN層之前通過路由模塊將輸入分發(fā)給其中一個或者兩個專家進(jìn)行計算,那么稠密模型中的稀疏激活又該如何路由或者在計算之前就知道哪些專家神經(jīng)元會對結(jié)果產(chǎn)生貢獻(xiàn)呢?
答案是為稠密模型增加路由預(yù)測模塊。
在模型開始服務(wù)前,PowerInfer首先會對模型進(jìn)行離線分析,通過將模型在通用數(shù)據(jù)集中進(jìn)行推理獲取每一層輸入與激活神經(jīng)元之間的對應(yīng)關(guān)系,進(jìn)而為稠密模型每一層訓(xùn)練一個小的預(yù)測路由模塊來預(yù)測每一個輸入會激活的神經(jīng)元,只計算路由激活的神經(jīng)元(專家)。
在多個下游任務(wù)的測試中,PowerInfer的路由模塊幾乎沒有引入額外的精度損失。
稀疏激活帶來的推理局部性
稀疏激活的另一個有趣事實是,盡管對于不同的輸入token,激活的神經(jīng)元分布存在差異;但如果在足夠多的數(shù)據(jù)上進(jìn)行推理,并將每次激活的分布疊加,PowerInfer發(fā)現(xiàn)少部分神經(jīng)元總體上被激活的概率更高。
也就是說,統(tǒng)計意義上大模型神經(jīng)元的激活符合Power Law分布(Power Law分布是一種統(tǒng)計規(guī)律,表示少數(shù)事件的發(fā)生頻率遠(yuǎn)高于大量其他事件)。
如下圖(a)所示,對于OPT-30B和LLaMA(ReGLU)-70B兩個模型里的某一層FFN網(wǎng)絡(luò),統(tǒng)計意義上26%和43%的神經(jīng)元分別貢獻(xiàn)了80%的激活。
而在整個模型的尺度上,如下圖(b)所示,17%和26%的神經(jīng)元貢獻(xiàn)了80%的激活。
因此,當(dāng)只考慮對最終激活有貢獻(xiàn)的運(yùn)算時,LLM具有推理局部性:對權(quán)重的訪問傾向于集中在一定的區(qū)域,而不是均勻分布在所有的神經(jīng)元上。
在推理運(yùn)算中它顯現(xiàn)為程序的局部性:對內(nèi)存空間的訪問傾向于集中在一定的區(qū)域,而不是均勻分布在整個內(nèi)存空間。
在常見的個人電腦中,GPU具有較少的顯存和更強(qiáng)的計算能力,適合處理頻繁訪問且計算強(qiáng)度高的任務(wù);而CPU擁有更大的內(nèi)存容量但相對較弱的算力,適合處理少量訪問且計算強(qiáng)度低的任務(wù)。
因此,理想情況下,一小部分經(jīng)常訪問的神經(jīng)元應(yīng)該存儲在顯存中,相比之下更大、訪問頻率更低的神經(jīng)元更適合存儲在內(nèi)存中,由CPU進(jìn)行計算。
這啟發(fā)了PowerInfer基于局部性特征進(jìn)行CPU/GPU混合推理系統(tǒng)的設(shè)計。
CPU/GPU混合推理設(shè)計
根據(jù)上述神經(jīng)元的Power Law和由此產(chǎn)生的局部性,PowerInfer通過提前靜態(tài)分析每一個神經(jīng)元的冷熱性,將少量的熱神經(jīng)元加載在GPU顯存上,剩余的冷神經(jīng)元加載到CPU的內(nèi)存中。
以神經(jīng)元為粒度的模型混合加載,會出現(xiàn)一層內(nèi)有些神經(jīng)元在GPU上,有些神經(jīng)元在CPU上。
為此,PowerInfer設(shè)計了細(xì)粒度的CPU/GPU混合推理引擎。
以下圖為例,對于某一層的輸入,PowerInfer會首先預(yù)測該輸入會激活神經(jīng)元為3,4,5。
然后CPU、GPU會分別根據(jù)預(yù)測信息,執(zhí)行位于其內(nèi)存中的神經(jīng)元的計算。
具體以下圖的例子來說,CPU上會計算第四個神經(jīng)元,GPU上會計算第三個、第五個神經(jīng)元,然后再GPU上對兩邊的計算結(jié)果進(jìn)行合并。
△PowerInfer混合計算的方式
PowerInfer的整體架構(gòu)
總體而言,PowerInfer利用基于稠密模型的稀疏激活及其引入的局部性特性,開發(fā)出了一種創(chuàng)新的CPU/GPU混合推理引擎。
在接入一個大型語言模型(LLM)時,PowerInfer首先在離線階段對模型的預(yù)測路由模塊進(jìn)行訓(xùn)練,并深入分析模型的激活特征。
同時,結(jié)合目標(biāo)硬件的帶寬和容量等關(guān)鍵信息,計算出最佳的神經(jīng)元放置策略。
在此基礎(chǔ)上,PowerInfer會根據(jù)這些計算結(jié)果,將神經(jīng)元優(yōu)化地分布在內(nèi)存或顯存中。
在在線推理階段,CPU和GPU分別處理存儲在其內(nèi)存中的神經(jīng)元,隨后在GPU上對這些獨(dú)立計算的結(jié)果進(jìn)行高效合并。
△?PowerInfer整體架構(gòu)圖
總結(jié)與展望
對于端側(cè)用戶而言,PowerInfer的高效推理框架打開了新的可能性。
首先,它使得個人電腦用戶能夠在本地運(yùn)行先進(jìn)的大型語言模型,而無需昂貴的專業(yè)硬件。
這不僅促進(jìn)了人工智能應(yīng)用的普及化,也為愛好者、研究人員和小型企業(yè)提供了前所未有的機(jī)會。
在云端部署方面,PowerInfer同樣存在巨大的潛力。
現(xiàn)有的云端CPU也有強(qiáng)大的AMX計算單元支持,通過利用CPU、GPU間的異構(gòu)特征,可以樂觀地認(rèn)為PowerInfer能夠使用更少的高端計算卡,做到更高的服務(wù)吞吐。
論文地址:
https://ipads.se.sjtu.edu.cn/_media/publications/powerinfer-20231219.pdf