12秒內AI在手機上完成作畫!谷歌提出擴散模型推理加速新方法
只需12秒,只憑手機自己的算力,就能拿Stable Diffusion生成一張圖像。
而且是完成了20次迭代的那種。
要知道,現(xiàn)在的擴散模型基本都超過了10億參數(shù),想要快速生成一張圖片,要么基于云計算,要么就是要本地硬件夠強大了。
而隨著大模型應用逐漸普及開來,在個人電腦、手機上跑大模型很可能是未來的新趨勢。
由此,谷歌的研究員們帶來了這篇新成果,名字就叫Speed is all you need:通過GPU優(yōu)化加速大規(guī)模擴散模型在設備上的推理速度。
三步走優(yōu)化加速
該方法是針對Stable Diffusion來做的優(yōu)化,但同時也能適應其他擴散模型。面向的任務是從文本生成圖像。
具體優(yōu)化可以分成三個部分:
- 設計專門的內核
- 提升Attention模型效率
- Winograd卷積加速
首先來看專門設計的內核,它包括了組歸一化和GELU激活函數(shù)。
組歸一化是在整個UNet體系結構中實現(xiàn),這種歸一化的工作原理是將特征映射的通道劃分為更小的組,并對每個組獨立歸一,使組歸一化較少依賴于批大小,并且能適應更大范圍的批處理大小和網(wǎng)絡架構。
研究人員以GPU著色器(shader)的形式設計了一個獨特的核,能在沒有任何中間張量的情況下,在單個GPU命令中執(zhí)行所有內核。
GELU激活函數(shù)中,包含大量的數(shù)值計算,如懲罰、高斯誤差函數(shù)等。
通過一個專用著色器來整合這些數(shù)值計算以及伴隨的分割和乘法操作,使得這些計算能放在一個簡單的draw call里。
Draw call是CPU調用圖像編程接口,命令GPU進行渲染的操作。
接下來,到了提升Attention模型效率方面,論文介紹了兩種優(yōu)化方法。
其一是部分融合softmax函數(shù)。
為了避免在大矩陣A上執(zhí)行整個softmax計算,該研究設計了一個GPU著色器來計算L和S向量以減少計算,最終得到一個大小為N×2的張量。然后將softmax計算和矩陣V的矩陣乘法融合。
這種方法大幅減少了中間程序的內存占用張量和總體延遲。
需要強調的是從A到L、S的計算映射的并行是有限的,因為結果張量中的元素比輸入張量A中的元素數(shù)量要少得多。
為了增加并行、進一步降低延遲,該研究將A中的元素組成block,將歸約操作(reduction operations)切分為多個部分進行。
然后在每個block上執(zhí)行計算,然后將其簡化為最終結果。
利用精心設計的線程和內存緩存管理,可以在多個部分實現(xiàn)使用單個GPU命令降低延遲。
另一種優(yōu)化方法是FlashAttention。
這是去年火起來的IO感知精確注意力算法,具體有兩種加速技術:按塊遞增計算即平鋪、并在后向傳遞中重新計算注意力,將所有注意力操作融合到CUDA內核中。
相較于標準Attention,這種方法能減少HBM(高帶寬內存)訪問,提高整體效率。
不過FlashAttention內核的緩存器密集度非常高(register-intensive),所以該團隊是有選擇性地使用這一優(yōu)化方法。
他們在注意力矩陣d=40的Adreno GPU和Apple GPU上使用FlashAttention,其他情況下使用部分融合softmax函數(shù)。
第三部分是Winograd卷積加速。
它的原理簡單來說就是使用更多的加法計算來減少乘法計算,從而降低計算量。
但弊端也很明顯,將會帶來更多的顯存消耗和數(shù)值錯誤,尤其是在tile比較大的情況時。
Stable Diffusion的主干非常依賴3×3卷積層,尤其是在圖像解碼器方面,這里90%的層都是由3×3卷積層構成的。
研究人員分析后發(fā)現(xiàn),在使用4×4大小的tile時,是模型計算效率和顯存利用率的最佳平衡點。
實驗結果
為了評估提升效果,研究人員先在手機上進行了基準測試。
結果表明,兩部手機在使用了加速算法后,生成圖片的速度都明顯提升。
其中三星S23 Ultra的延遲降低了52.2%,iPhone 14 Pro Max上的延遲降低了32.9%。
在三星S23 Ultra上端到端從文本生成一張512×512像素的圖片,迭代20次,耗時在12秒以內。
論文地址:https://arxiv.org/abs/2304.11267