4090成A100平替?token生成速度只比A100低18%,上交大推理引擎火了
不僅如此,PowerInfer 與最先進的本地LLM推理框架 llama.cpp 相比,在單個 RTX 4090 (24G) 上運行 Falcon (ReLU)-40B-FP16,實現(xiàn)了 11 倍多的加速,還能保持模型的準(zhǔn)確性。
具體來說,PowerInfer 是一個用于本地部署 LLM 的高速推理引擎。與那些采用多專家系統(tǒng)(MoE)不同的是,PowerInfer 通過利用 LLM 推理中的高度局部性,巧妙的設(shè)計了一款 GPU-CPU 混合推理引擎。
它的工作原理是這樣的,將頻繁激活的神經(jīng)元(即熱激活,hot-activated)預(yù)加載到 GPU 上以便快速訪問,而不常激活的神經(jīng)元(冷激活,cold-activated)(占大多數(shù))則在 CPU 上計算。
這種方法顯著減少了 GPU 內(nèi)存需求和 CPU-GPU 數(shù)據(jù)傳輸。
- 項目地址:https://github.com/SJTU-IPADS/PowerInfer
- 論文地址:https://ipads.se.sjtu.edu.cn/_media/publications/powerinfer-20231219.pdf
PowerInfer 可以在配備單個消費級 GPU 的 PC 上高速運行 LLM。現(xiàn)在用戶可以將 PowerInfer 與 Llama 2 和 Faclon 40B 結(jié)合使用,對 Mistral-7B 的支持也即將推出。
一天的時間,PowerInfer 就獲得了 2K 星標(biāo)。
看到這項研究后,網(wǎng)友激動的表示:單卡 4090 跑 175B 大模型不再是夢。
PowerInfer 架構(gòu)
PowerInfer 設(shè)計的關(guān)鍵是利用 LLM 推理中固有的高度局部性,其特征是神經(jīng)元激活中的冪律分布。這種分布表明,一小部分神經(jīng)元(稱為熱神經(jīng)元)跨輸入一致激活,而大多數(shù)冷神經(jīng)元則根據(jù)特定輸入而變化。PowerInfer 利用這種機制設(shè)計了 GPU-CPU 混合推理引擎。
下圖 7 展示了 PowerInfer 的架構(gòu)概述,包括離線和在線組件。離線組件處理 LLM 的激活稀疏,區(qū)分熱神經(jīng)元和冷神經(jīng)元。在線階段,推理引擎將兩種類型的神經(jīng)元加載到 GPU 和 CPU 中,在運行時以低延遲服務(wù) LLM 請求。
圖 8 說明了 PowerInfer 如何協(xié)調(diào) GPU 和 CPU 來處理層之間的神經(jīng)元。PowerInfer 根據(jù)離線數(shù)據(jù)對神經(jīng)元進行分類,將熱激活的神經(jīng)元(例如索引 3、5、7)分配給 GPU 內(nèi)存,將其他神經(jīng)元分配給 CPU 內(nèi)存。
一旦接收到輸入,預(yù)測器就會識別當(dāng)前層中哪些神經(jīng)元可能會被激活。值得注意的是,通過離線統(tǒng)計分析識別的熱激活神經(jīng)元可能與運行時激活行為不一致。例如,神經(jīng)元 7 雖然標(biāo)記為熱激活,但事實卻并非如此。然后,CPU 和 GPU 都會處理激活的神經(jīng)元,忽略沒有激活的神經(jīng)元。GPU 計算神經(jīng)元 3 和 5,而 CPU 處理神經(jīng)元 4。神經(jīng)元 4 的計算完成后,其輸出將發(fā)送到 GPU 進行結(jié)果集成。
實驗
該研究使用不同參數(shù)的 OPT 模型進行了實驗,參數(shù)從 6.7B 到 175B 不等,還包括 Falcon (ReLU)-40B 和 LLaMA (ReGLU)-70B 模型。值得注意的是,175B 參數(shù)模型的大小與 GPT-3 模型相當(dāng)。
本文還將 PowerInfer 與 llama.cpp 進行了比較,llama.cpp 是最先進的本地 LLM 推理框架。為了便于進行比較,該研究還擴展了 llama.cpp 以支持 OPT 模型。
由于本文專注于低延遲設(shè)置,因此評估指標(biāo)是端到端生成速度,量化為每秒生成 token 的數(shù)量(tokens/s)。
該研究首先比較了 PowerInfer 和 llama.cpp 的端到端推理性能,批大小為 1。
圖 10 展示了在配備 NVIDIA RTX 4090 的 PC-High 上各種模型和輸入輸出配置的生成速度。平均而言,PowerInfer 實現(xiàn)了 8.32 tokens/s 的生成速度,最高可達 16.06 tokens/s, 顯著優(yōu)于 llama.cpp,比 llama.cpp 提高了 7.23 倍,比 Falcon-40B 提高了 11.69 倍。
隨著輸出 token 數(shù)量的增加,PowerInfer 的性能優(yōu)勢變得更加明顯,因為生成階段在整體推理時間中扮演著更重要的角色。在此階段,CPU 和 GPU 上都會激活少量神經(jīng)元,與 llama.cpp 相比,減少了不必要的計算。例如,在 OPT-30B 的情況下,每生成一個 token,只有大約 20% 的神經(jīng)元被激活,其中大部分在 GPU 上處理,這是 PowerInfer 神經(jīng)元感知推理的好處。
圖 11 顯示,在 PC-Low 上,PowerInfer 仍然比 llama.cpp 獲得了相當(dāng)大的性能增強,平均加速為 5.01 倍,峰值為 7.06 倍。然而,與 PC-High 相比,這些改進較小,主要是由于 PC-Low 的 11GB GPU 內(nèi)存限制。此限制會影響可分配給 GPU 的神經(jīng)元數(shù)量,特別是對于具有大約 30B 參數(shù)或更多參數(shù)的模型,導(dǎo)致更大程度地依賴于 CPU 來處理大量激活的神經(jīng)元。
圖 12 顯示了 PowerInfer 和 llama.cpp 的 CPU 和 GPU 之間的神經(jīng)元負載分布。值得注意的是,在 PC-High 上,PowerInfer 顯著增加了 GPU 的神經(jīng)元負載份額,從平均 20% 增加到 70%。這表明 GPU 處理了 70% 的激活神經(jīng)元。然而,在模型的內(nèi)存需求遠遠超過 GPU 容量的情況下,例如在 11GB 2080Ti GPU 上運行 60GB 模型,GPU 的神經(jīng)元負載會降低至 42%。這種下降是由于 GPU 的內(nèi)存有限,不足以容納所有熱激活的神經(jīng)元,因此需要 CPU 計算這些神經(jīng)元的一部分。
圖 13 說明 PowerInfer 有效支持使用 INT4 量化壓縮的 LLM。在 PC-High 上,PowerInfer 的平均響應(yīng)速度為 13.20 tokens/s,峰值可達 29.08 tokens/s。與 llama.cpp 相比,平均加速 2.89 倍,最大加速 4.28 倍。在 PC-Low 上,平均加速為 5.01 倍,峰值為 8.00 倍。由于量化而減少的內(nèi)存需求使 PowerInfer 能夠更有效地管理更大的模型。例如,在 PC-High 上使用 OPT-175B 模型進行的實驗中,PowerInfer 幾乎達到每秒兩個 token,超過 llama.cpp 2.66 倍。
最后,該研究還評估了 PowerInfer 在不同批大小下的端到端推理性能,如圖 14 所示。當(dāng)批大小小于 32 時,PowerInfer 表現(xiàn)出了顯著的優(yōu)勢,與 llama 相比,性能平均提高了 6.08 倍。隨著批大小的增加,PowerInfer 提供的加速比會降低。然而,即使批大小設(shè)置為 32,PowerInfer 仍然保持了相當(dāng)大的加速。
參考鏈接:https://weibo.com/1727858283/NxZ0Ttdnz
了解更多內(nèi)容,請查看原論文。