Apple最近發(fā)表了一篇文章,可以在iphone, MAC 上運行大模型:【LLM in a flash: Efficient Large Language Model Inference with Limited Memory】。
主要解決的問題是在DRAM中無法存放完整的模型和計算,但是Flash Memory可以存放完整的模型。但是Flash帶寬較低,LLM in Flash通過盡量減少從Flash中加載參數(shù)的數(shù)量,優(yōu)化在DRAM中的內(nèi)存管理,實現(xiàn)在Flash帶寬有限的條件下提高計算速度的目的。
這篇文章很多都是工程上的細節(jié),很少理論。下面是這篇論文的總結(jié),如有不對的地方,歡迎私信。
利用FeedForward 層的稀疏度,只加載FeedForward層輸入非0和預測輸出非0的參數(shù)
通過Window Sliding 只加載增量的參數(shù),復用之前的計算,減少需要加載的參數(shù)。
將up-projection的row和down-projection的column放在一起存放,這樣在flash中可以一次讀取比較大的chunk,提高flash的帶寬利用效率。
如下圖所示,chunk越大,帶寬也就越大,初始加載chunk的latency可以被平攤。
1. 大模型在FeedForward layer有超過90%的稀疏度。將embedding和attention 矩陣一直保存在DRAM中。Attention 的權(quán)重占據(jù)了model總量的1/3。對于FeedForward Layer,只有非稀疏的部分被動態(tài)的加載進去DRAM。
2. 預測Relu層的稀疏性。在attention層的輸出后面增加low-rank predictor,預測在relu層之后可能是0的元素。
經(jīng)過優(yōu)化后,最終只需要加載2%的FeedForward層的參數(shù)到DRAM中。
3. Sliding Window
每次滑動窗口,在生成新的token后,刪掉不在window內(nèi)的neuron,增加新的neuron。
上圖右側(cè)為一個window size為5的示意圖,粉色的是要刪除的元素,藍色的是新加入的元素。
上圖左側(cè)是如何在aggregated usage和incremental transfer中保持平衡,window設(shè)置的越大,每次新需要加載neruon也就越少,但是需要在memory中累計保存的空間占用的也就越大。
上圖左側(cè)的目標就是如何讓aggregated usage和incremental transfer都比較小。
譯者疑問:這個window就是Longformer: The Long-Document Transformer中的sliding window嗎?歡迎私信。
4.內(nèi)存管理
內(nèi)存管理也是因為sliding window引入的。
譯者注:
就像c++中vector的維護一樣,如果每次刪除vector中間的一個元素,都需要導致該元素后面所有元素的移動。
下圖描述的就是刪除和加入新neuron的內(nèi)容。
最后文章還提出了比較有意思的一點,他們主要進行了稀疏化的優(yōu)化,在計算和加載參數(shù)方面。他們也嘗試了通過和當前neuron關(guān)系緊密的 “closest friend”綁定,每次加載neuron時,也都加載他的closest friend。
作者說但是這樣帶來了負面作用,因為存在一些closest friend是很多neuron的closest friend (譯者注:類似于大眾之友),這些neuron被頻繁的加載到DRAM中,反而降低了性能。
審核編輯:湯梓紅
-
DRAM
+關(guān)注
關(guān)注
40文章
2298瀏覽量
183204 -
Mac
+關(guān)注
關(guān)注
0文章
1095瀏覽量
51339 -
大模型
+關(guān)注
關(guān)注
2文章
2276瀏覽量
2359 -
LLM
+關(guān)注
關(guān)注
0文章
264瀏覽量
297
原文標題:大模型筆記【2】 LLM in Flash
文章出處:【微信號:處理器與AI芯片,微信公眾號:處理器與AI芯片】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論