抽卡效率提升4.8倍!東北大學(xué)等開源優(yōu)化版Stable-Diffusion.cpp:分辨率越高越快,生成質(zhì)量更好
在AI生成圖像領(lǐng)域,Stable Diffusion已經(jīng)成為一個(gè)里程碑式的工具,憑借其強(qiáng)大的圖像生成能力,被廣泛應(yīng)用于藝術(shù)創(chuàng)作、商業(yè)設(shè)計(jì)等領(lǐng)域。
然而,生成高質(zhì)量圖像的過程常常需要付出大量的時(shí)間和內(nèi)存,這對(duì)于硬件資源有限的設(shè)備來說是一大挑戰(zhàn)。
為了應(yīng)對(duì)這一問題,北京大學(xué)、東北大學(xué)、佐治亞大學(xué)發(fā)布了Stable-Diffusion.cpp(簡(jiǎn)稱Sdcpp)的優(yōu)化方法,引入了Winograd算法和三個(gè)優(yōu)化策略,最終整圖生成速度最高可達(dá)到4.79倍,從此實(shí)現(xiàn)創(chuàng)作自由!
論文鏈接:https://arxiv.org/pdf/2412.05781
項(xiàng)目主頁:https://github.com/SealAILab/stable-diffusion-cpp
Sdcpp是Stable Diffusion模型的C/C++實(shí)現(xiàn),旨在無需外部依賴的情況下在CPU(以及可能配置GPU)上實(shí)現(xiàn)高效推理。Sdcpp作為一個(gè)高效的推理框架,不僅能夠顯著加速模型的運(yùn)行,還能大幅減少內(nèi)存占用。
Sdcpp的實(shí)現(xiàn)中,計(jì)算密集型的2D卷積運(yùn)算是圖像生成的主要瓶頸,雖然功能強(qiáng)大,但效率卻不夠理想,推理速度較慢,內(nèi)存占用高。
為了解決這些問題,研究人員在Sdcpp的基礎(chǔ)上,引入了Winograd算法,對(duì)Sdcpp中的卷積操作進(jìn)行了革命性的改進(jìn),最終實(shí)現(xiàn)了性能與資源利用率的雙提升。
主要優(yōu)化策略為:
- 分步處理:將卷積拆解為濾波器和激活權(quán)重的預(yù)處理、預(yù)處理張量的逐元素乘法和中間結(jié)果的后處理三個(gè)階段,提高運(yùn)算效率。
- 局部?jī)?yōu)化:通過調(diào)整數(shù)據(jù)加載方式(散點(diǎn)存儲(chǔ)和聚集加載優(yōu)化),減少 L1 緩存的切換,最大限度地減少緩存交換,提升內(nèi)存使用效率。
- 并行處理:分析算子間的關(guān)聯(lián)性,將關(guān)聯(lián)性較小的運(yùn)算動(dòng)態(tài)分配到不同的計(jì)算線程與核心上,充分利用多線程和多核心架構(gòu),動(dòng)態(tài)分配計(jì)算任務(wù),充分發(fā)揮硬件性能,減少圖像生成延遲。
尤其是在M系列Mac設(shè)備上,優(yōu)化了性能核心(P-core)和效率核心(E-core)的分工,使推理速度得到了顯著提升。
多設(shè)備、多模型支持
優(yōu)化后的Sdcpp框架支持多個(gè)設(shè)備和模型,包括:
- 主流Stable Diffusion模型:SDv1.4、v1.5、v2.1、SDXL和SDXL-Turbo;
- 不同硬件平臺(tái):Mac、Android、AMD等;
- 擴(kuò)展模塊:如支持LoRA,以及支持算子量化等,為用戶提供更高的靈活性。
此外,該框架還支持并且優(yōu)化了diffusion transformer模型中的算子,進(jìn)一步拓展了應(yīng)用場(chǎng)景。
速度提升,快!
通過實(shí)際測(cè)試,優(yōu)化成果令人振奮!
單卷積層的加速表現(xiàn):對(duì)于多種卷積層配置,推理速度平均提升超過2倍!
研究人員測(cè)試了在一些在SD生成圖片過程中出現(xiàn)比較頻繁的卷積層,計(jì)算了在這些單卷積層上,優(yōu)化的Sdcpp相較于原版Sdcpp的加速效果。在不同的卷積層上,推理速度提升至少達(dá)到2倍。
整圖生成速度對(duì)比:最高加速比達(dá)到4.79倍!
圖像分辨率越大,方法的加速效果越明顯。在生成1024×1024分辨率圖像時(shí),相比于原版Sdcpp,優(yōu)化后的Sdcpp在M1 Pro以及M2 Max上的推理速度提升可超過4.6 倍(FP32 類型)。
對(duì)于其他圖像尺寸和SD模型,優(yōu)化的Sdcpp的加速效果也十分顯著(如SDv1.5模型生成512×512圖像時(shí)在M1 Pro上加速1.84 倍)。
顯著的加速比主要得益于框架的局部?jī)?yōu)化(降低緩存交換并且提高內(nèi)存使用效率),以及并行處理(動(dòng)態(tài)分配計(jì)算任務(wù)并且提高運(yùn)算并行度)。
更快的速度,不僅節(jié)省時(shí)間,更讓創(chuàng)作更自由!
實(shí)例展示:更真實(shí)的生成效果
下圖展示了使用 SDXL-Turbo 模型,原版Sdcpp以及我們優(yōu)化的Sdcpp使用5步采樣,所生成的圖像對(duì)比:
可以看出,在相同配置和提示詞下,優(yōu)化后的Sdcpp不僅速度更快,生成的圖像也更加細(xì)膩逼真,細(xì)節(jié)豐富,層次分明。
優(yōu)化的Sdcpp能夠支持不同硬件平臺(tái)上(Mac、Android、AMD 等)各種主流SD模型(如SDv1.4、v1.5、v2.1、SDXL 和 SDXL-Turbo)的所有算子,確保使用這些SD模型能夠生成高質(zhì)量的圖片。
該框架還會(huì)不斷進(jìn)步,研究人員計(jì)劃優(yōu)化更多操作符,提升兼容性;進(jìn)一步提高模型量化的效率;探索在更多設(shè)備上的性能提升。