DDCourse-01:從0到1,在瀏覽器裡執行DiscoDiffusion(全網最詳細教程)

部分章節由團隊小吳撰寫

首先來澄清一個常見的誤解:

有一些人認為 Disco Diffusion (以下簡稱 DD) 是由 Google 開發的,其實它只是執行在 Google 免費提供的計算資源上。
DD 是 2021 年上半年誕生的一個開源專案,是一個年輕的 TTI 開發社群的集體努力的成果。它還是機器學習-文字轉影像生成領域的一個新生階段的實驗性應用模型,而非一個成熟的商業產品。所以 DD 並不像常見的繪圖或設計軟體/App 有一個友好的介面。而是使用一個 2600 行多程式碼的 ipynb 檔案來完成互動和執行。
而我們使用 DD 的過程也就是修改和執行這個 ipynb 檔案的過程。

什麼是 ipynb 檔案?

.ipynb 是 Jupyter Notebook 所建立的檔案格式,就像 .docx 是 Word 檔案一樣。
Jupyter Notebook 是一款能在瀏覽器裡執行的互動式開發環境。設計初衷是用於科學計算和資料科學的互動應用。編寫和執行 Python 是最常見的用法,還能支援 R 和 JavaScript 40 多種程式語言。人們喜歡用它編寫教程和程式碼、即時執行、跑數學方程和視覺化。
它方便協作和共享,使用起來比傳統的開發環境簡單靈活很多(當然缺點也有,此處不提)。所以成為資料科學/機器學習社群內一款非常流行的工具。
Jupyter Notebook 是開源的。而 Colab 就是 Google 二次開發並託管的 Jupyter Notebook 服務。無需設定,你就可以直接使用,同時還能免費使用 Google 提供的 GPU 等計算資源。

Google 賬號 和 Google Driver 

(下面有詳盡的如何註冊設定賬號的圖文教程)
  • Colab 需註冊/登陸後才能使用。所以你首先得開一個 Google(Gmail)賬號
  • Google 的服務在國內無法直接使用,這部分請自己解決
  • 每個 Google 賬號都提供了 15G 的免費 Google Driver (雲盤空間)。你執行 DD 需要的模型會被下載到你的 Driver 裡
  • 使用 DD 時會用到的 initial_image (底圖)需要上傳到 Driver
  • 每次執行完生成的作品圖片也會被自動儲存到 Driver 。包括不同進度時的中間步驟結果預覽(需修改一處設定,隨後介紹)
  • 執行過程中,Colab 會請求授權取得你 Driver 的訪問許可權,請允許。

關於 GPU

執行所有 DD 這類的 AI 創作工具都需要消耗驚人的 GPU(顯示卡)計算資源。假設你希望在自己機器上本地部署DD,視訊記憶體起碼要有 10G,約等於 1080 ti 這個級別的 Nvidia 顯示卡起步(可以生成 1024*1024 尺寸的作品)。如果你顯示卡是 AMD 的,或指望在一臺幾年前的筆記本上跑個試試,我的建議是:想都不要想。
  • 使用部署在 Colab 上的 DD,使用的 GPU 都是 Google 免費提供的(財大氣粗)
  • Colab notebook 需要連線雲端提供計算資源的虛擬機器才能執行,免費賬號最長有機會執行 12 小時,注意是有機會
  • Colab notebook 如果處於空閒狀態的時間過長,會與虛擬機器斷開連線
每次你開啟 Colab 開始執行,都會先隨機抽到一款 GPU (像開箱子抽武器)。同一個 IP 地址在一段時間內重新整理頁面,被分配到也是同一款顯示卡(此結論未經過充分驗證)
你會從這五款武器裡隨機抽取:
  • NVIDIA® Tesla® K80 (普通大劍)
  • NVIDIA® Tesla® T4 (標準重劍)
  • NVIDIA® Tesla® P100 (銀騎士的劍)
  • NVIDIA® Tesla® V100(深淵大劍)
  • NVIDIA® Tesla® A100(霜之哀傷)
如果你抽到 V100,記得截圖轉發錦鯉。
如果你抽到 A100,記得跟螢幕合影,把照片留給你孫子做紀念。

V100 VS A100  

https://lambdalabs.com/blog/nvidia-a100-vs-v100-benchmarks/

Colab 的用量限制

由於是免費的,Colab 隨機分配給你 GPU 資源供應沒有保證,也不會無限量供應,用量限額會隨使用者們的總體用量消耗而變化。
Google 並沒有公佈免費使用者每天的用量限額,因為整體系統消耗狀況是快速變化、不可預測的。
長時間佔著 Notebook 執行計算,或 GPU 資源消耗量大的使用者,更有可能遇到用量限額,導致你暫時無法使用 GPU。但這個限制會在一天後重置,所以當你看到下面這個彈窗提示,第二天再來就行了,不用著急掏出錢包買 Pro。

Colab 不希望使用者獨佔有限資源,所以在不用的時候,請關閉瀏覽器裡 Colab 的標籤頁,並在不跑圖的時候避免選用 GPU。這樣會減少你遇到用量限制的情況。

關於要付錢的 Colab Pro 服務

每月支付摺合 74 人民幣,可以升級為 Pro 服務。升級後 Colab 承諾提供
  • 更快的GPU——意味著出圖的等待時間會變短
  • 更長的執行時間——意味每天可擁有更多的 notebook 執行時長,閒置超時斷開服務的頻率也會更低)
  • 更大的儲存空間——但不是 Google Driver 的空間,如果試用了四五款模型不通用的TTI 工具,15 G 的預設儲存空間很容易會被撐滿。升級 Google Driver 需要另外付費。記得滿了以後清理不需要的檔案,並清空回收站。清空後回收的儲存空間要等一段時間才可供 Colab 使用

我在 Colab 裡幹什麼?

你在 DD 裡修改的 Prompt、引數 這些操作相當在修改這個 ipynb 裡的程式碼。所以,沒錯,你使用 DD 的過程,相當於你在改 Python 程式碼。
同學,你在寫碼了哦 ~~ 

但不用擔心,你不會改壞它,每次重新整理這個頁面,這個ipynb 檔案都會重置為原始狀態,除非你把它另存為你自己的版本。
如果你還有一些額外的興趣多學習一點 Python,可以訪問 XUE.cn。是一個我團隊之前開發的自學程式設計平臺,基於Jupyter魔改。有很多 Python 自學課程和習題。瀏覽器裡學寫碼,你可以從下面這本自學課程開始:
https://xue.cn/hub/app/books/1

下面是在 Colab 裡執行 DD 的圖文教程,從 0 到 1。

Colab 支援大多數主流瀏覽器,並且在ChromeFirefoxSafari 的最新版本上進行了最全面的測試。但我們還是推薦使用谷歌瀏覽器 Chrome,下載地址:
https://www.google.com/intl/zh-CN/chrome/

設定瀏覽器語言

如果已有Google 賬號,直接跳到下一主題。
註冊前,如果瀏覽器語言是中文,需要將瀏覽器設定為純英文,註冊完再改回中文,不然手機驗證時會有如下圖提示 This phone number cannot be used for verification.(該手機號不能用於驗證):

點選瀏覽器右上角三個小圓點,點選設定:
  1. 點選 高階 (Advanced),語言 (Language),新增語言 (Add language)
  2. 在彈窗裡拖拽捲軸,將 英語 新增進來。也可以在彈窗右上角輸入 EN 快速搜尋到 英語。 
  3. 點選 英語 這一行右端的 三個點,從設定框裡 勾選 以這種語言顯示 Google Chrome
  4. 點選 中文 這一行右端的三個點,從設定框裡 移除(中文)。
  5. 點選 重新啟動按鈕 重啟瀏覽器。

註冊完,同樣的操作可將中文新增進來。
下面是英文介面的引導(等你完成賬號註冊後,再視需求,改回為中文介面)

Google 賬號註冊
開始註冊。瀏覽器開啟谷歌登入頁:
https://accounts.google.com/signin
點選建立賬號,為自己建立:
如下圖,填寫完使用者、賬號名,密碼,點 Next
國家選擇中國,輸入你的手機號,點 Next
輸入手機收到的 6 為數驗證碼,點驗證

Verify

輸入生日(年齡不能太小,否則會拒絕註冊),選擇性別:

點跳過

Skip

拉到最下面,點同意 I agree
賬號就註冊成功啦。準備好,進入 Disco Diffusion 的魔法世界。

第一次執行 Colab notebook
點選開啟 Disco Diffusion v5.2 的 colab notebook:
https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb

https://colab.research.google.com/drive/10HUmA5laY1e1q7sYGg19Ys2lFM60M_T5(這個是最新版本,加了對 ViT/L-14@336px 模型的支援和對稱最佳化。但 ViT/L-14@336px 需要抽到非常好的 GPU 資源才能勾選)

從來沒有使用過 Notebook 的同學看見這個頁面可能有點心慌,Don’t panic!非常簡單。我做了一個極簡的 ipynb 的檔案用來演示結構,一看就明白。

Tip如果無意間點開了顯示程式碼,將滑鼠放程式碼上,右鍵選擇 [表單]–[隱藏程式碼],將程式碼隱藏:

這個 DD 的 ipynb 分兩部分, “前言” 和 “設定”( 5 步)
第一部分 Credits & Changelog + Tutorial 
包含了 Disco Diffusion 的簡短介紹,專案歷史,貢獻者及其貢獻,更新日誌,授權協議和教程。
這裡的文件已經嚴重過時。完全可以不看,所以不需要開啟 “Tutorial” 前面的摺疊箭頭。
跟當前版本匹配的文件需要檢視非官方指南:Zippy's Disco Diffusion Cheatsheet
https://docs.google.com/document/d/1l8s7uS2dGqjztYSjPpzlmXLjl5PM3IGkRWI3IiCuK7g/edit
這個文件我已經取得了作者 Zippy 的翻譯授權,跟團隊裡的小吳同學一起翻譯了完整版本,工作接近尾聲,這周就會分章節釋出。

授權協議使用 MIT License,說明 DD 是開源,免費,可商用的(但是,使用這個工具生成的藝術品,如果商用,可能需要注意避免使用風格特別明顯的藝術家的風格,有侵權風險)
第二部分 包含了 DD 的 5 步設定新手也不需要動裡面的大部分設定

1. Set Up,執行模型的資源準備工作。包括:
    • 檢查 GPU 狀態(這裡可以看到你抽到了什麼GPU)
    • 連線谷歌雲盤
    • 安裝、配置依賴項
    • 定義功能函式等
Set up 的準備工作會需要你在多個彈窗裡點確認。一律允許就可以。只要沒有卡住不動 或 出現紅色 就算執行透過。
2. Diffusion and CLIP model settings,圖片生成和Clip 引導模型的設定。(在這可以選擇和配置模型。暫時不用管)
3. Settings,設定要生成的影像/動畫的引數。包括:
    • 基礎設定(重要)
    • 動畫設定
    • 高階設定
    • 提詞 Prompts 修改(重要)
4. Diffuse!,執行工具正式生成影像。(這裡你能即時看到圖片生成過程
5. Create the video,執行工具正式生成影片。(暫時我們不用看這塊)

使用預設設定生成第一張圖片

點選選單欄裡的 程式碼執行程式(Runtime),點選 全部執行(Run all)
如果你沒找到選單欄,請複習上面 極簡 ipynb demo 截圖說明。

點選 仍然執行

確定:(用的不是你本地的記憶體,不要怕)
點選 連線到 Google 雲端硬碟
彈出對話方塊選擇你想授權給 Colab 的 Google Driver 賬號:
下拉彈窗的捲軸,點選底部的 允許
多點耐心,第一次執行 DD 會下載多達 3G 的模型到你的 Google driver 裡。但以後執行都不再需要等下載了。。
單元格的執行狀態是你需要關注的。
  • 長得像播放器圖示的執行按鈕前面有綠色對勾代表已執行透過
  • 中間變方塊執行按鈕代表正在執行中。點選它可以中止執行
  • 執行按鈕變成紅色意味著遇到問題。需要查看出錯資訊
  • 點選變成紅色的執行按鈕嘗試再次執行
常見出錯可能包括  
  • Google Driver 空間不足
  • 跟雲端提供計算資源的虛擬機器的連線終端
  • 超過本日免費試用限額
執行過程中你可以隨時點選選單裡的 程式碼執行程式(Runtime),中斷執行(interrupt execution),來結束程式執行。
但第一次使用 DD 建議不要中止,讓程式自動執行完成初始化。
等候的過程中,你可以在目錄裡點選1.1 Check GPU Status,看看自己是不是抽到了史詩級 GPU。圖中顯示我們這次抽到了 標準重劍 T4:

在目錄裡點選 3. Settings 找到 Prompts,有一個 DD 預設寫好的 Prompt :
"A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation", "yellow color scheme"
"一幅美麗的畫,畫的是一座奇特的燈塔在,光芒照耀著一片動盪的血海,參考藝術家 Greg Rutkowski 和 Thomas Kinkade,Artstation 流行畫風, 黃色配色。"
第一次執行我們不修改 Prompt,讓這個 ipynb 完整執行。
一切順利的話,你將會在 4. Diffuse ! 的單元格里看到圖片正在生成。
初始是一片灰色的噪點,色彩和形狀慢慢從噪點裡浮現出來。你的第一張 AI 繪畫作品正在穿越神經網路,前來和你相遇。
圖片上面的 batches 進度條:代表這個 Prompt 會一次生成  50 張,目前正在生成第一張。什麼人想要 50 張燈塔???

而當前正在生成這張作品的進度條在圖片底部。如下圖底部, 
  • 2%:當前進度。
  • 4/240:已經執行完 240 步裡的前 4 步。 
  • [00:16<16:15]: 已耗時16 秒,還需要 16 分 15 秒出結果。
完成後,每個人都會收穫一張跟下圖風格類似的作品,但每個人每次執行,結果都會有所不同,是獨一無二的。
此後你也要經常意識到,跟你打交道的是機率模型,沒有什麼確定的,意外和隨機是 DD 不可分離的屬性。
把燈塔留作紀念吧,你不會再想生成它了。

再往前一步

如果你想再來一張別的, 先點選下面截圖 Do the Run ! 前面的執行按鈕,讓它中止。
順便把 n_batches:50 改為 1 或者2,這樣每個 Prompt 就只會出 1 或 2 張圖。

修改 prompt:試試下面的

a detailed matte painting of blue ocean, waves, a black whale flying in the sky, by Caspar David Friedrich, Trending on artstation
這段文字替換掉原來的 prompt。注意要保留 兩端的 英文雙引號。如果 prompt 在一行裡包含了太長的文字會報錯。需要如下拆成 2 行,用英文逗號隔開兩組雙引號包圍的文字
"the first line",
"the second line"
注意是替換掉 0: ["_________"],  而不是  100: ["________"]。
100 的給動畫設定用的。你可以再 “100” 前面加一個 # 註釋掉它。眼不見心不煩。
是的,你又在寫碼了。

改完後要先執行一次 Prompt 這個單元格,你的修改後才能生效。
執行Do the RUN! ,開始生成圖片。

回收作品檔案

所有生成完的圖片都保留在你的 Google Driver。當然你也可以頁面上直接圖片右鍵另存為。下面網址訪問:
https://drive.google.com/
按圖示路徑找到 TimeToDisco 目錄。
如果你不喜歡DD,想清理掉佔空間的模型檔案,請按圖示路徑找到 models 目錄,刪除,清空回收桶。
祝玩得愉快
——————
下一篇教程講 如何有效構建 Prompt
關於 Colab:https://research.google.com/colaboratory/faq.html?hl=zh-CN


相關文章