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