高通台灣AI黑客松|競賽說明會
|

不用買顯卡 OpenVINO 也能玩 Stable Diffusion V2!

   

作者:Felix

AIGC 正夯

近期AI界掀起一陣AIGC(AI Generated Content) 浪潮,從ChatGPT大型語言模型到Midjourney、DALL-E等圖像生成模型,其中又以Stable Diffusion受到社群最熱烈的討論,最主要原因就是可以自行佈署與修改模型,使其可玩性與彈性相當大!但在免費版本的 Colab 禁止執行 Stable Diffusion WebUI 後,社群上便掀起一陣要購置顯示卡等設備來進行算圖的聲音。不過也可以稍微先等等,說不定躺在各位電腦裡面的 Intel CPU 已經等待多時,就為了這一刻挺身而出了! 本篇將介紹如何使用 OpenVINO Notebooks 來玩 Stable Diffusion V2!

由 Stable Diffusion 所繪製的各類型圖片 (圖片翻拍自 Stable Diffusion 台灣社群v2)

由 Stable Diffusion 所繪製的各類型圖片 (圖片翻拍自 Stable Diffusion 台灣社群v2)

UP Xtreme i12 Edge 邊緣運算平台

本篇測試使用的硬體為研揚科技 AAEON 最新第三代的 UP Xtreme i12 Edge,處理器使用 Intel 12 代 Alder Lake Core i7-1270PE,採用大小核 4 Performance Cores + 8 Efficient Cores 設計,共計 12 核心 16 執行緒,效能提升的同時顧及了低功耗運作的彈性,更利於應用在 AI 推論的邊緣裝置上。整合顯示晶片則維持性能優異的 Iris Xe 並帶有 96 UE 執行單元,記憶體則和系統共用雙通道的 16 GB LPDDR5。

UP Xtreme Edge 系列從 Whiskey Lake 一路進化到最新世代的 Alder Lake 處理器

UP Xtreme Edge 系列從 Whiskey Lake 一路進化到最新世代的 Alder Lake 處理器

UP Xtreme i12 Edge採用無風扇設計,外觀為全鋁材質並帶有大面積的散熱鰭片,更適合在粉塵、高溫等嚴苛的工業環境中使用。在筆者測試重複執行OpenVINO推論的壓力測試下,使用 FLIR 熱顯像攝影鏡頭測得機殼表面最高溫度來到接近 69 度,但也沒有讓內部的 i7-1270PE 因為過熱而造成降頻的現象,依然穩定的堅守崗位執行任務。

即便僅使用被動散熱,邊緣裝置的最高溫度仍維持在 68~69 度之間。

即便僅使用被動散熱,邊緣裝置的最高溫度仍維持在 68~69 度之間。


OpenVINO五歲了!想知道更多最新版本2023.0的新功能與亮點,歡迎免費報名參加OpenVINO™ DevCon 線上系列講座,聽Intel技術專家開講並展示應用範例!

安裝OpenVINO Notebooks

筆者在 Xtreme i12 Edge 上安裝的測試作業系統為 Windows 11,安裝完成後內顯的驅動程式也同時是最新版了,接下來順著以下 6 個簡單步驟進行安裝,在網路順暢的環境之下整個過程大約十多分鐘即可完成。

1. 安裝 Python。建議下載 3.8 安裝檔 後執行安裝,安裝時務必勾選 “Add Python 3.8 to PATH” 方便後續可直接執行 Python。

 

2. 安裝 git 版本控制軟體,

3.安裝 Microsoft Visual C++ 可轉散發套件

4. 開啟命令提示字元建立 Python 虛擬開發環境

python -m venv openvino_en
openvino_env\Scripts\activate

5. 從 github 下載 OpenVINO Notebooks 檔案庫副本

git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git
cd openvino_notebooks

6. 安裝 OpneVINO Notebooks 所有相依套件,包含最新版本的 OpenVINO toolkit 2022.3 LTS。

python -m pip install --upgrade pip wheel setuptools
pip install -r requirements.txt

7. 執行 OpenVINO Notebooks

jupyter lab notebooks

爾後每次開機後要重新執行 OpenVINO Notebooks 只要進入 Python 虛擬環境後,再執行 jupyter lab 即可,如下:

python -m venv openvino_en
openvino_env\Scripts\activate
jupyter lab notebooks

Stable Diffusion v2 Text to Image

啟動 JupyterLab 後可以從 ”236-stable-diffusion-v2” 資料夾找到 stable diffusion v2 的 OpenVINO 範例,裡面有兩個 ipynb 檔案,分別為文字生成圖像(text to image)與圖像無限縮放(Infinite Zoom)。這回更新的 v2 Text to Image 和兩個月前的 Stable Diffusion 重點有以下幾點不同處:

  • 生成圖片的像素由 512×512 提升至 768×768,Laten Image 尺寸由 64×64 提升至 96×96。
  • 文字連結圖像的映射空間模型 CLIP(Contrastive Language-Image Pre-Training)模型更換為更強大的 OpenCLIP,維度擴增到 77×1024(原為 77×768)。
  • 增加負面提示詞(Negtive Prompt),避免生成圖像內涵蓋負面元素。

看似改動不大,但卻能產出品質更佳的片。開啟 “236-stable-diffusion-v2-text-to-image.ipynb” 檔案,可以直接執行 Run All Cells 觀看範例結果。初次執行需要下載 Stable Diffusion 2.1 base 預訓練模型(13個檔案總大小約5GB)並轉換為 OpenVINO IR(Intermediate representation) 模型格式,所有產出的模型檔會儲存在 “sd2.1” 的資料夾中,之後重複執行會檢查是否已存在模型,不須重複轉換。範例中預設載入 OpenVINO 是使用 “CPU” 推論,筆者建議這裡可以改為 “AUTO” 讓 OpenVINO 自動調配 CPU/GPU 使用比率。

將各模型載入 OpenVINO 推論核心中

將各模型載入 OpenVINO 推論核心中

如下表所示,在處理器為 Core i7-1270PE 的情況下選擇使用 “CPU” 執行算圖每次的迭代時間約 16.6 秒,重複運算 25 次總花費時間約 7 分半。若將設定改為 “AUTO” 每次迭代時間可降為 8.3 秒,只要三分鐘左右即可生成一張高品質圖片。筆者使用相同的 prompt 與 seed 等參數分別帶入 “236-stable-diffusion-v2” 與 “225-stable-diffusion” 所得到之結果,各位可以自行評估兩者之間差異。

 

相同參數分別輸入 Stable Diffusion v2 與 v1 所得到之結果

相同參數分別輸入 Stable Diffusion v2 與 v1 所得到之結果

記憶體設定提示

由於 Stable Diffusion v2 執行管線(pipeline)推論時,需同時將多個模型載入到記憶體中,若記憶體與虛擬記憶體不足則會發生錯誤。以筆者的測試環境 16GB 來說,仍需額外設定約 50 GB 的虛擬記憶體,方足以負荷所有模型的推論。可以從 “Windows設定” → “系統” → “系統資訊” → “進階系統設定” 進行虛擬記憶體的手動配置。

設定作業系統虛擬記憶體以順利載入模型

設定作業系統虛擬記憶體以順利載入模型

在記憶體比較緊蹦的情況下,載入 StableDiffusionPipeline 的過程會跳出提示訊息,建議使用者 accelerate 套件,來減低記憶體的負荷。若要安裝則可以在 openvino_env 虛擬 python 環境下執行 “pip install accelerate” 指令即可。

安裝 accelerate 套件提示訊息

安裝 accelerate 套件提示訊息

此外,在 OpenVINO 編譯(Compile)模型時,若是想要把模型全部放到 GPU 執行也會因為記憶體不足,而顯示 “[GPU] Exceeded max size of memory allocation: …..” 等錯誤資訊,恰巧 GPU 的總記憶體需求量為就是比 16GB 多出那麼一點,而無法全部使用 Iris Xe 加速推論。這裡建議改為 “AUTO”,交給 OpenVINO 去設定,整體效果也會比預設單純只用 “CPU” 的效能好上一些。筆者也有另外拿一台擁有 24GB 記憶體的筆電交叉驗證,確實就不會顯示記憶體不足的訊息了,提供給各位參考。

無法順利分配記憶體給 GPU 的錯誤訊息

無法順利分配記憶體給 GPU 的錯誤訊息

Stable Diffusion v2 圖片無限縮放

除了文字生圖片之外,這次也新增一個相當有趣的圖片無限縮放範例!應用圖像修復的原理,製作無限縮小 (zoom out) 動畫時會先將原尺寸 512×512 像素的圖片縮小為 384×384(可設定),周圍騰出的空白區域則使用 Stable Diffusion Inpainting 的算法將周圍補齊再變回完整尺寸的圖片,如此重複幾次會得到數張圖片,最後將這些圖片製作成動畫看起來就像是把攝影鏡頭無限的拉遠一樣!若是要製作無限放大(zoom in)動畫時,實際上也是相同的做法,只不過最後將圖片合成動畫時是由最廣角(最後算出來)的圖漸變到最望遠(原始)的圖。

圖片無限縮放概念 (圖片來源:OpenVINO Notebooks)

圖片無限縮放概念 (圖片來源:OpenVINO Notebooks)

此範例預設是使用 CPU 進行運算,由於生成的圖像較小(512×512),可以將所有模型都放到 GPU 進行加速,所得到每次算圖的時間可以差異到 4.8 倍之多!且 CPU 還有充足的餘裕可以進行其他多工任務。範例中可以在 widget 調整的參數:

  • seed: 隨機圖片的亂數種子
  • steps: 生成一張圖片需要迭代的次數
  • frames: 總共要生成幾張圖片(不包含原始圖片)
  • edge size: 每次生成時要周圍的遮罩大小
  • zoom in: 選擇生成的動畫為無限縮小或無限放大
使用 CPU 推論與 GPU 推論進行無限縮放圖片生成的效能差異

使用 CPU 推論與 GPU 推論進行無限縮放圖片生成的效能差異

下圖是筆者從網路上隨意抄了一段 prompt 丟進去算了三個 frame 所得到的輸出結果,是不是相當有趣呢!?若是覺得邊界過於突兀也可以調小 edge size 並多算幾張 frame,讓整體可以再更滑順點。

無限縮放範例輸出之結果

無限縮放範例輸出之結果

小結-實用且更新緊湊的 OpenVINO Notebooks

依附著 OpenVINO Toolkit 的強大效能與穩定性,OpenVINO Notebooks 的範例更新速度也日趨緊湊,除了歸功於有更多貢獻者參與專案以外,使用者在問題回饋與意見討論上也是有所幫助。在 AI 模型推陳出新的今日,不論是物件偵測的王者 YOLOv7YOLOv8,亦或是當紅的 AIGC 模型等,也都如迅雷一般地出現在 OpenVINO Notebooks 上,給予開發者更多資源與想法。若是不想錯過接下來 Edge AI 領域任何新火花的產生,不妨給個 Star 並持續關注 OpenVINO Notebooks 專案,也許馬上就可以看到下一代的 AIGC 模型囉!

Lin Felix

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: Lin Felix

長期出沒在南部地區的Maker社群,致力於推廣從實作中學習的精神。熱愛胡搞瞎搞,喜歡嘗試新事物。現職為亞堤教育團隊講師與創客閣樓召集人。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *