把Stable Diffusion模型塞進iPhone裡,做成APP一分鐘出圖
在 iPhone 上運行 Stable Diffusion 到底難不難?今天我們要介紹的這篇文章,作者給了答案:不難,而且 iPhone 還剩餘 50% 的效能。
眾所周知,每年蘋果都會推出一款聲稱在各方面都更快、更好的新 iPhone,這主要得益於新的視覺模型和影像感測器的快速發展。就拿拍照來說,如果回到 10 年前,你能用 iPhone 拍出高品質的圖片嗎,答案是不能,因為技術的發展是漸進式的,10 年時間,足夠提高手機拍照技術。
由於技術的這種發展模式(漸進式),在一段時間裡有些程式即使運行在最好的計算設備上,也幾乎無法使用。但是這些帶有新啟用場景的新程式吸引了一些用戶的注意力,人們願意研究它。
本文的作者就是被吸引的其中之一,在過去3 周里,作者開發了一個應用程序,可以透過Stable Diffusion 來產生(summon)圖像,然後按你喜歡的方式編輯它。該應用程式在最新的 iPhone 14 Pro 上產生圖片僅需一分鐘,使用大約 2GiB 的應用程式內存,另外還需要下載大約 2GiB 的初始資料才能開始使用。
應用程式商店連結:https://apps.apple.com/us/app/draw-things-ai-generation/id6444050820
#這一結果引來眾多網友討論,有人開始擔心手機耗電問題,並開玩笑的說:這很酷,不過這看起來是一個消耗手機電池的好方法。
「我從來沒有像現在這樣開心地感受iPhone 的熱度。」
##「這個寒冬,可以把手機當暖手器用了。」
不過在大家調侃手機發熱問題的同時,他們也給與這項工作極高的評價。
「這簡直不可思議。在我的iPhone SE3 上產生一張完整的圖片大約需要45 秒——這幾乎和我的M1 Pro macbook 用原始版本生成的速度一樣快!」
這是如何做到的呢?接下來我們來看看作者的實作過程:
想要完成在iPhone 上運行Stable Diffusion,還能結餘50% 的效能,面臨的一大挑戰是需要在6GiB RAM的iPhone 設備上將程式運行起來。 6GiB 聽起來很多,但如果你在 6GiB 裝置上使用超過 2.8GiB,或在 4GiB 裝置上使用超過 2GiB,iOS 就會殺死你的應用程式。
那麼 Stable Diffusion 模型究竟需要多少記憶體來進行推理?
這還要從模型的結構說起。通常Stable Diffusion 模型包含4 個部分:1. 文字編碼器,它生成文字特徵向量以指導圖像生成;2. 可選的圖像編碼器,將圖像編碼到潛在空間(用於圖像到圖像生成);3 . 降噪器模型,它從雜訊中緩慢地去噪影像的潛在表示;4. 影像解碼器,從潛在表示中解碼影像。
第 1、第 2 和第 4 個模組在推理過程中運行一次,最大需要約 1GiB。而降噪器模型佔用了大約 3.2GiB(全浮點數),而且還需要執行多次,因此作者想讓模組在 RAM 中保存得更久。
最初的 Stable Diffusion 模型需要接近 10GiB 才能執行單一影像推理。在單一輸入(2x4x64x64)與輸出(2x4x64x64)之間,其中夾雜著許多輸出層。並不是所有層的輸出都可以立即重複使用,它們中一部分必須保留一些參數以供後續使用(殘差網路)。
一段時間以來,研究者圍繞PyTorch Stable Diffusion 進行了一番優化,對PyTorch 用到的NVIDIA CUDNN 和CUBLAS 庫,他們保留了暫存空間,這些優化都是為了降低內存使用量,因此Stable Diffusion 模型可以用低至4GiB 的卡片運行。
但這仍然超出了作者的預期。因此作者開始專注於蘋果硬及優化。
起初作者考慮的是3.2GiB 或1.6GiB 半浮點數,如果不想觸發蘋果的OOM(Out of Memory,指的是App 佔用的記憶體達到了iOS 系統對單個App 佔用記憶體上限後,而被系統強殺掉的現象),作者大約有500MiB 的空間可以使用。
第一個問題,每個中間輸出的大小到底是多少?
事實證明,它們中的大多數都相對較小,每個都低於 6MiB (2x320x64x64)。作者使用的框架 (s4nnc) 可以合理地將它們打包到小於 50MiB,以備復用。
值得一提的是,降噪器有一個自註意機制,它以自己的影像潛在表示作為輸入。在自註意力計算期間,有一個大小為16x4096x4096 的批次矩陣,對該矩陣應用softmax 後,大約是FP16 中的500MiB,並且可以“inplace”完成,這意味著它可以安全地重寫其輸入而不會損壞。幸運的是,Apple 和 NVIDIA 低階函式庫都提供了 inplace softmax 實現,然而 PyTorch 等更高階的函式庫中沒有。
那麼是否真的使用 550MiB 1.6GiB 左右的記憶體就能完成?
在 Apple 硬體上,實作神經網路後端的常用選擇是使用 MPSGraph 框架。於是作者首先嘗試使用 MPSGraph 實現了所有的神經網路操作。在 FP16 精度下峰值記憶體使用量大約是 6GiB,顯然比預期的記憶體使用量多太多,這是怎麼回事?
作者詳細分析了原因,首先他沒有按照常見的 TensorFlow 方式使用 MPSGraph。 MPSGraph 需要對整個計算圖進行編碼,然後使用輸入 / 輸出張量,進而處理內部分配,並讓使用者提交整個圖以供執行。
而作者使用 MPSGraph 的方式很像 PyTorch 的做法──當作一個操作執行引擎。為了執行推理任務,許多已編譯的 MPSGraphExecutable 在 Metal 命令佇列上執行,它們中的每一個都可能持有一些中間分配記憶體。如果一次性提交,那麼所有這些命令都持有分配內存,直到完成執行。
解決這個問題的簡單方法是調整提交速度,沒有必要一次提交所有命令。實際上,Metal 的每個隊列有 64 個並發提交的限制。作者嘗試改成一次提交 8 個操作,峰值記憶體就降低到了 4GiB。
然而,這仍然比 iPhone 能承受的多 2 GiB。
為了使用 CUDA 計算自註意力,原始 Stable Diffusion 程式碼實作中有一個常見技巧:使用置換而不是轉置。這個技巧很有效,因為 CUBLAS 可以直接處理置換的跨步(strided)張量,避免使用專用記憶體來轉置張量。
但是 MPSGraph 沒有跨步張量支持,一個置換的張量無論如何都會在內部被轉置,這需要中間分配記憶體。透過明確轉置,分配將由更高層級的層處理,避免了 MPSGraph 內部效率低下。利用這個技巧,記憶體使用量將接近 3GiB。
事實證明,從 iOS 16.0 開始,MPSGraph 就不能再為 softmax 做出最佳分配決策。即使輸入和輸出張量都指向相同的數據,MPSGraph 也會分配一個額外的輸出張量,然後將結果複製到指向的位置。
作者發現使用 Metal Performance Shaders 替代方案完全符合要求,並將記憶體使用量降至 2.5GiB,而不會出現任何效能下降。
另一方面,MPSGraph 的 GEMM 核心需要內部轉置。明確轉置在此也無濟於事,因為這些轉置不是更高層級層的「inplace」操作,對於特定的 500MiB 大小的張量,這種額外的分配是不可避免的。透過切換到 Metal Performance Shaders,專案作者又回收了 500MiB,效能損失約 1%,最終將記憶體使用量減到了理想的 2GiB。
以上是把Stable Diffusion模型塞進iPhone裡,做成APP一分鐘出圖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

想像一下,一個人工智慧模型,不僅擁有超越傳統運算的能力,還能以更低的成本實現更有效率的效能。這不是科幻,DeepSeek-V2[1],全球最強開源MoE模型來了。 DeepSeek-V2是一個強大的專家混合(MoE)語言模型,具有訓練經濟、推理高效的特點。它由236B個參數組成,其中21B個參數用於啟動每個標記。與DeepSeek67B相比,DeepSeek-V2效能更強,同時節省了42.5%的訓練成本,減少了93.3%的KV緩存,最大生成吞吐量提高到5.76倍。 DeepSeek是一家探索通用人工智

AI,的確正在改變數學。最近,一直十分關注這個議題的陶哲軒,轉發了最近一期的《美國數學學會通報》(BulletinoftheAmericanMathematicalSociety)。圍繞著「機器會改變數學嗎?」這個話題,許多數學家發表了自己的觀點,全程火花四射,內容硬核,精彩紛呈。作者陣容強大,包括菲爾茲獎得主AkshayVenkatesh、華裔數學家鄭樂雋、紐大電腦科學家ErnestDavis等多位業界知名學者。 AI的世界已經發生了天翻地覆的變化,要知道,其中許多文章是在一年前提交的,而在這一

谷歌力推的JAX在最近的基準測試中表現已經超過Pytorch和TensorFlow,7項指標排名第一。而且測試並不是JAX性能表現最好的TPU上完成的。雖然現在在開發者中,Pytorch依然比Tensorflow更受歡迎。但未來,也許有更多的大型模型會基於JAX平台進行訓練和運行。模型最近,Keras團隊為三個後端(TensorFlow、JAX、PyTorch)與原生PyTorch實作以及搭配TensorFlow的Keras2進行了基準測試。首先,他們為生成式和非生成式人工智慧任務選擇了一組主流

波士頓動力Atlas,正式進入電動機器人時代!昨天,液壓Atlas剛「含淚」退出歷史舞台,今天波士頓動力就宣布:電動Atlas上崗。看來,在商用人形機器人領域,波士頓動力是下定決心要跟特斯拉硬剛一把了。新影片放出後,短短十幾小時內,就已經有一百多萬觀看。舊人離去,新角色登場,這是歷史的必然。毫無疑問,今年是人形機器人的爆發年。網友銳評:機器人的進步,讓今年看起來像人類的開幕式動作、自由度遠超人類,但這真不是恐怖片?影片一開始,Atlas平靜地躺在地上,看起來應該是仰面朝天。接下來,讓人驚掉下巴

本月初,來自MIT等機構的研究者提出了一種非常有潛力的MLP替代方法—KAN。 KAN在準確性和可解釋性方面表現優於MLP。而且它能以非常少的參數量勝過以更大參數量運行的MLP。例如,作者表示,他們用KAN以更小的網路和更高的自動化程度重現了DeepMind的結果。具體來說,DeepMind的MLP有大約300,000個參數,而KAN只有約200個參數。 KAN與MLP一樣具有強大的數學基礎,MLP基於通用逼近定理,而KAN基於Kolmogorov-Arnold表示定理。如下圖所示,KAN在邊上具

特斯拉機器人Optimus最新影片出爐,已經可以在工廠裡打工了。正常速度下,它分揀電池(特斯拉的4680電池)是這樣的:官方還放出了20倍速下的樣子——在小小的「工位」上,揀啊揀啊揀:這次放出的影片亮點之一在於Optimus在廠子裡完成這項工作,是完全自主的,全程沒有人為的干預。而且在Optimus的視角之下,它還可以把放歪了的電池重新撿起來放置,主打一個自動糾錯:對於Optimus的手,英偉達科學家JimFan給出了高度的評價:Optimus的手是全球五指機器人裡最靈巧的之一。它的手不僅有觸覺

在全球範圍內,Apple公司的產品和服務一直備受用戶喜愛。註冊一個香港AppleID將帶給用戶更多的便利和特權,讓我們一起來了解一下註冊香港AppleID的步驟以及需要注意的事項。如何註冊香港AppleID在使用蘋果設備時,許多應用程式和功能都需要使用AppleID進行登入。如果您想下載香港地區的應用程式或享受香港AppStore的優惠內容,那麼註冊一個香港AppleID就非常必要。本文將詳細介紹如何註冊香港AppleID的步驟以及需要注意的事項。步驟:選擇語言與地區:在蘋果設備上找到「設定」選項,進入

目標偵測在自動駕駛系統當中是一個比較成熟的問題,其中行人偵測是最早得以部署演算法之一。在多數論文當中已經進行了非常全面的研究。然而,利用魚眼相機進行環視的距離感知相對來說研究較少。由於徑向畸變大,標準的邊界框表示在魚眼相機當中很難實施。為了緩解上述描述,我們探索了擴展邊界框、橢圓、通用多邊形設計為極座標/角度表示,並定義一個實例分割mIOU度量來分析這些表示。所提出的具有多邊形形狀的模型fisheyeDetNet優於其他模型,並同時在用於自動駕駛的Valeo魚眼相機資料集上實現了49.5%的mAP
