隨著人工智能技術的爆發(fā)穿剖,內容生成式人工智能(AIGC)成為了當下熱門領域蚤蔓。除了 ChatGPT 之外,文本生成圖像技術更令人驚艷携御。
Stable Diffusion,是一款開源的深度學習模型既绕。與 Midjourney 提供的直接將文本轉化為圖像的服務不同的是它允許用戶自行搭配并訓練自己的圖像風格啄刹,這一特性吸引了眾多的開發(fā)者。
也正因此凄贩,用戶需要下載和安裝模型數(shù)據(jù)來進行模型訓練誓军。模型數(shù)據(jù)是指用于訓練和生成圖像的數(shù)據(jù)集,它們通常占用很大的空間疲扎,并且需要經(jīng)常更新和同步昵时。模型文件小則幾百 MB,大則幾十上百 GB椒丧。如果用戶在不同的計算機上使用 Stable Diffusion 壹甥,或者是團隊進行共創(chuàng),就需要在每臺計算機上下載和安裝相同的模型數(shù)據(jù)壶熏,這樣既浪費時間又浪費空間句柠。而且,如果用戶沒有及時備份模型數(shù)據(jù)棒假,就有可能因為意外損壞或丟失而造成不可挽回的損失溯职。
那么,有沒有一種方法可以實現(xiàn)模型數(shù)據(jù)的持久化和共享存儲呢帽哑?答案是肯定的谜酒。
本文將介紹如何使用 JuiceFS 云服務創(chuàng)建一個文件系統(tǒng),讓它可以像移動硬盤一樣妻枕,在任何部署了 Stable Diffusion 應用的計算機上插上即可使用僻族,特別是對于團隊使用的情況,JuiceFS 的共享存儲能力可以令多個設備共享同一份預訓練模型數(shù)據(jù)屡谐。
一鹰贵、JuiceFS 簡介
JuiceFS 是一款面向云原生設計的高性能分布式文件系統(tǒng),在 Apache 2.0 開源協(xié)議下發(fā)布康嘉。提供完備的 POSIX 兼容性碉输,可將幾乎所有對象存儲接入本地作為海量本地磁盤使用,亦可同時在跨平臺亭珍、跨地區(qū)的不同主機上掛載讀寫敷钾。
如圖所示枝哄,JuiceFS 文件系統(tǒng)由元數(shù)據(jù)引擎和對象存儲組成,元數(shù)據(jù)引擎用來存儲文件名阻荒、大小挠锥、權限等元數(shù)據(jù)信息,對象存儲用來存儲文件的數(shù)據(jù)塊侨赡。使用基于網(wǎng)絡的對象存儲和數(shù)據(jù)庫創(chuàng)建 JuiceFS 文件系統(tǒng)蓖租,它就具備了跨平臺、跨網(wǎng)絡的共享訪問能力羊壹。
為了解決對象存儲和數(shù)據(jù)庫的時延問題蓖宦,JuiceFS 引入了緩存層,它會將頻繁訪問的數(shù)據(jù)緩存到本地油猫,提升訪問速度稠茂。緩存層可以根據(jù)用戶的配置自動管理緩存空間和策略,保證數(shù)據(jù)的一致性和完整性情妖。通過緩存層睬关,JuiceFS 可以實現(xiàn)毫秒級的延遲和近乎無限的吞吐量。
JuiceFS 文件系統(tǒng)支持多種訪問接口毡证,包括 FUSE POSIX 掛載电爹、S3 Gateway、CSI Driver料睛、Hadoop HDFS API藐不、WebDAV 等。既可以將 JuiceFS 掛載到本地像網(wǎng)盤一樣使用秦效,也可以通過專用接口將 JuiceFS 接入到特定平臺使用雏蛮。
二、使用 JuiceFS 創(chuàng)建共享存儲
JuiceFS 有開源的社區(qū)版和付費的云服務版阱州,它們的核心架構是一致的挑秉,區(qū)別在于社區(qū)版所需的數(shù)據(jù)庫和對象存儲均需要用戶自行搭建,而云服務使用 JuiceFS 官方提供的數(shù)據(jù)庫苔货,同時提供了更多高級功能犀概。使用 JuiceFS 云服務版,用戶只需自備對象存儲夜惭,在 JuiceFS 官網(wǎng)創(chuàng)建文件系統(tǒng)即可姻灶,整體會更簡單方便。
因此本文會直接采用 JuiceFS 云服務诈茧。對于想嘗試上手的用戶不用擔心它的費用产喉,創(chuàng)建一個 1TB 容量的文件系統(tǒng)目前是免費的。
說明:JuiceFS 云服務價格方案中的容量是指用戶在平臺上可以創(chuàng)建的文件系統(tǒng)的最大容量。一個文件系統(tǒng)由平臺提供的數(shù)據(jù)庫和用戶自備的對象存儲組成曾沈,用戶通過 JuiceFS 客戶端訪問和讀寫文件系統(tǒng)这嚣,文件數(shù)據(jù)實際上是存儲在用戶自己的對象存儲中的。換言之塞俱,免費檔支持創(chuàng)建一個 1TB 的文件系統(tǒng)姐帚,就是指這個文件系統(tǒng)最多可以向用戶的對象存儲中存入 1TB 的數(shù)據(jù)。
創(chuàng)建文件系統(tǒng)
訪問 JuiceFS 官網(wǎng) https://juicefs.com障涯,注冊并登錄到云服務后臺罐旗。
點擊“創(chuàng)建文件系統(tǒng)”按鈕,填寫信息并創(chuàng)建文件系統(tǒng)唯蝶。
創(chuàng)建文件系統(tǒng)主要涉及以下選項:
- 文件系統(tǒng)名稱:根據(jù)格式要求設置九秀,名稱需要平臺唯一;
- 服務器區(qū)域:如果你的 Stable Diffusion 安裝在云服務器上生棍,那么就選擇你所使用的云平臺及所在的區(qū)域颤霎。如果你在本地電腦上安裝使用 Stable Diffusion 則選擇你的對象存儲所在的云平臺及區(qū)域媳谁。
- 回收站保存時間:這是 JuiceFS 的數(shù)據(jù)安全機制涂滴,開啟回收站后,文件不會立即刪除而是根據(jù)設置的時長繼續(xù)保留在對象存儲中晴音,超期后才會實際刪除柔纵。對于 Stable Diffusion 模型數(shù)據(jù)存儲的場景,可以設置 0 關閉回收站锤躁。
- Bucket 名稱:即用戶自備對象存儲的桶名稱搁料,你可以提前在云平臺上創(chuàng)建存儲桶,然后把桶名稱填寫在這里系羞,也可以在稍后掛載 JuiceFS 文件系統(tǒng)時由客戶端自動創(chuàng)建郭计。
- 其他選項:保持默認即可
安裝客戶端并掛載文件系統(tǒng)
文件系統(tǒng)創(chuàng)建完成以后,會自動跳轉到“設置”頁面〗氛瘢現(xiàn)在昭伸,你可以在任何需要使用這個文件系統(tǒng)的計算機上執(zhí)行以下命令安裝客戶端:
sudo curl -L https://juicefs.com/static/juicefs -o /usr/local/bin/juicefs && sudo chmod +x /usr/local/bin/juicefs
JuiceFS 是基于云的文件系統(tǒng),免費檔支持 100 臺設備同時掛載使用澎迎,也就是說庐杨,你現(xiàn)在就可以在任意一臺電腦上掛載并使用它,存入 Stable Diffusion 模型數(shù)據(jù)夹供,然后在其他同樣需要使用這些模型數(shù)據(jù)的服務器上同時掛載這個文件系統(tǒng)灵份,讓你所有的設備都能共享使用同一份預訓練模型。
提示:JuiceFS 云服務版目前僅支持 macOS 和 Linux 系統(tǒng)哮洽,如果你希望在 Windows 系統(tǒng)上使用填渠,可以通過 WSL 進行使用。你也可以嘗試 JuiceFS 社區(qū)版,詳情參考社區(qū)版文檔揭蜒。
三横浑、使用 Stable Diffusion 訪問共享存儲
準確來說,Stable Diffusion 并不是一個單一的軟件屉更,而是一系列開放源碼的 AI 模型徙融。要想使用這些模型來生成圖像,就必須先安裝或訪問可以運行模型的程序或平臺瑰谜,比如基于網(wǎng)頁的 Stable Diffusion web UI欺冀、桌面版的 DiffusionBee、iPad 適用的 Draw Things 等萨脑。
如果你不想為了 AI 作圖預先投入大量資金在電腦硬件上隐轩,可以考慮使用云計算平臺提供的 GPU 云服務器,一些搶占式實例每小時單價可能低至幾元渤早。下圖是一臺搶占式實例职车,它擁有 8 核 CPU、32GB 內存鹊杖、100GB SSD 硬盤和一塊 NVIDIA Tesla T4 顯卡(16GB GPU)悴灵,單位價格相對較低。但搶占式實例的特點是會在平臺上出現(xiàn)更高的出價者時骂蓖,服務器會被自動釋放銷毀积瞒,所以在使用這種云服務器時要格外注意模型數(shù)據(jù)的保存。
接下來就以 GPU 云服務器為例登下,介紹如何安裝 Stable Diffusion web UI茫孔。稍后你會發(fā)現(xiàn),對于這種使用 Stable Diffusion 的方式而言被芳,JuiceFS 的共享訪問特性簡直是如虎添翼缰贝。
安裝 Stable Diffusion web UI
這里假設在騰訊云創(chuàng)建了一個上述配置的 GPU 云服務器,它使用 Ubuntu 22.04 系統(tǒng)畔濒。首先需要安裝依賴的軟件包和 NVIDIA 顯卡驅動:
# 安裝依賴
sudo apt install build-essential libgl1 dkms
# 切換至 root 用戶
su
# 下載驅動(請到 NVIDIA 官網(wǎng)查找最新版鏈接剩晴,這里只是一個示例)
wget https://cn.download.nvidia.com/tesla/460.106.00/NVIDIA-Linux-x86_64-460.106.00.run
# 安裝顯卡驅動
sh NVIDIA-Linux-x86_64-460.106.00.run --ui=none --disable-nouveau --no-install-libglvnd --dkms -s
# 檢查驅動是否安裝成功(返回顯卡信息代表安裝成功)
nvidia-smi
顯卡驅動安裝完畢,建議重啟系統(tǒng)篓冲。然后李破,以普通用戶身份安裝 Stable Diffusion web UI 程序。
# 安裝項目依賴
sudo apt install wget git python3 python3-venv
# 安裝 Stable Diffusion web UI
bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh)
運行 Stable Diffusion web UI
Stable Diffusion web UI 安裝在Python venv 虛擬環(huán)境中壹将,因此嗤攻,在啟動之前需要先激活虛擬環(huán)境。
# 激活虛擬環(huán)境
source venv/bin/activate
# 啟動程序
python webui.py – –listen
程序啟動成功以后诽俯,就可以通過瀏覽器訪問了妇菱,假設云服務器的 IP 地址為 111.222.33.44承粤,則訪問地址為 111.222.33.44:7860。
用 JuiceFS 存儲模型
Stable Diffusion web UI 的模型文件位于 models 目錄闯团,根據(jù)類型把模型文件放到對應的文件夾即可辛臊,比如在 civitai 網(wǎng)站下載的 checkpoint 類型的模型就放到 models/Stable-diffusion 目錄,而 VAE 模型則放到 models/VAE 目錄房交。
了解了保存模型的目錄結構彻舰,接下來就可以把 JuiceFS 文件系統(tǒng)掛載到模型目錄了,回到 JuiceFS 官網(wǎng)控制臺候味,打開文件系統(tǒng)的“設置”選項卡刃唤,如下圖所示。
先將 JuiceFS 文件系統(tǒng)掛載到當前用戶的 $HOME/jfs
目錄白群,掛載過程中程序會詢問文件系統(tǒng)的 token 以及對象存儲 Access Key 和 Secret Key尚胞,根據(jù)提示輸入即可。
sudo /usr/local/bin/juicefs mount mymodels $HOME/jfs
提示:請將掛載命令中 mymodels 替換成你的文件系統(tǒng)名帜慢,最后的掛載點路徑也可以替換成你想要的路徑笼裳。
文件系統(tǒng)掛載成功以后,你現(xiàn)在可以把 $HOME/jfs
當作網(wǎng)盤來使用了粱玲,所有存入這個目錄的文件都會保存到關聯(lián)的對象存儲中躬柬。與此同時,你可以在其他電腦上安裝 JuiceFS 云服務客戶端密幔,執(zhí)行相同的掛載命令楔脯,共享讀寫其中存儲的文件撩轰。
你可以把所有預訓練模型都拷貝到 $HOME/jfs
目錄胯甩,不過,為了科學管理不同類型的模型堪嫂,建議在 $HOME/jfs
中建立與 models 目錄對應目錄結構偎箫,比如創(chuàng)建一個 SD 目錄專門存儲 Stable-diffusion 適用的模型,建一個 VAE 目錄存儲 VAE 模型皆串,再創(chuàng)建一個 Lora 目錄存儲 Lora 相關的模型淹办,依此類推。
在 JuiceFS 文件系統(tǒng)中根據(jù)模型類別創(chuàng)建目錄對之后的使用會很有幫助恶复,這便于使用 JuiceFS 的子目錄掛載功能將特定的目錄掛載到 models 下對應的子目錄中怜森,從而避免修改項目配置調整讀取模型的位置“担可以使用 JuiceFS 的子目錄掛載功能副硅,也可以使用軟連接將子目錄映射到 Stable Diffusion 模型目錄中。
比如翅萤,可以將 SD 目錄掛載到 $HOME/stable-diffusion-webui/models/Stable-diffusion/jfs
恐疲,將 VAE 目錄掛載到 $HOME/stable-diffusion-webui/models/VAE/jfs
等。
注意:這里假設 Stable Diffusion web UI 部署在
$HOME
目錄,請根據(jù)實際信息替換子目錄培己、掛載點路徑和文件系統(tǒng)名稱碳蛋。
# 掛載子目錄 SD 到 models/Stable-diffusion/jfs
sudo juicefs mount mymodels --subdir SD $HOME/stable-diffusion-webui/models/Stable-diffusion/jfs
# 掛載子目錄 VAE 到 models/VAE/jfs
sudo juicefs mount mymodels --subdir VAE $HOME/stable-diffusion-webui/models/VAE/jfs
同樣地,也可以使用軟連接來將 JuiceFS 的目錄映射到模型目錄:
# 假設文件系統(tǒng)掛載在 $HOME/jfs
ln -s $HOME/jfs/SD $HOME/stable-diffusion-webui/models/Stable-diffusion/jfs
掛載成功以后省咨,在應用界面的左上角點擊刷新按鈕即可看到所有可用的模型肃弟,如下圖所示。
不要忘記零蓉,JuiceFS 是共享文件系統(tǒng)愕乎,使用同樣的掛載方式,你可以把模型數(shù)據(jù)掛載到其他云服務器或本地電腦上壁公。
四感论、訓練自己的 Stable Diffusion 模型
除了使用預訓練模型開箱即用的“文生圖”、“圖生圖”功能以外紊册,Stable Diffusion 的另一大優(yōu)勢就是可以通過任意基礎模型訓練自己的模型比肄。
Stable Diffusion 做模型訓練的常用方式主要有以下幾種:
全模型微調:用新數(shù)據(jù)集進一步訓練基礎模型,可以保持基礎模型能力囊陡,同時提升模型的質量和效果芳绩。但需要更多的時間和資源,也可能導致模型過擬合或欠擬合撞反。
Lora 微調:為基礎模型注入低秩矩陣妥色,讓模型能夠適應新的數(shù)據(jù)和任務,可以簡單的理解為給基礎模型“打補丁”遏片。優(yōu)點是節(jié)省時間和計算資源嘹害,不會破壞基礎模型的能力。但這種方式也需要更多數(shù)據(jù)和訓練技巧吮便,基礎模型的能力可能會成為它的局限笔呀。
DreamBooth 微調:使用少量特定主題圖片對基礎模型進行微調,產生一個可以獨立使用的新模型髓需。優(yōu)點在于只需要準備少量的訓練圖片许师,但可能導致新模型失去基礎模型的特點或能力。
文本反轉:效果與 DreamBooth 原理類似僚匆,但實現(xiàn)方法不同微渠。同樣是讓模型學會新的主題或風格,最終產生需要與基礎模型一起使用的文件咧擂。缺點是在使用時需要通過特定的關鍵詞來激活新訓練的概念逞盆。
這里以 DreamBooth 為例介紹如何在 Stable Diffusion web UI 中進行微調訓練。
DreamBooth 的原理
如上圖所示屋确,DreamBooth 的原理是用 3~5 張?zhí)囟ㄖ黝}(比如一只小狗不同角度)照片對 Stable Diffusion 的基礎模型進行訓練纳击,從而讓模型掌握這個特定的對象(比如续扔,一只名為“Lafa”的狗)的特征。然后用“a Lafa dog in a bucket”(一只在桶里的 Lafa 狗)作為提示詞焕数,模型就會生成這只小狗在桶里的照片纱昧。也就是說,只要提示詞中使用“a Lafa dog”堡赔,他就會直接使用這只小狗的特征來作圖识脆,而不是隨機生成一只其他的狗。
在 Stable Diffusion web UI 中使用 DreamBooth
Stable Diffusion web UI 默認沒有安裝 DreamBooth 擴展善已,需要在 extensions 中搜索并安裝灼捂。
安裝完成后,切換到 Installed 選項卡换团,點擊 Apply and restart UI 按鈕悉稠。如果仍然沒有顯示 DreamBooth 的選項卡,則需要重啟 Stable Diffusion web UI艘包。
初次用 DreamBooth 微調的猛,需要先創(chuàng)建一個新模型,如下圖所示想虎,輸入新模型的名稱卦尊,并選擇基礎模型。創(chuàng)建新模型需要一定的時間舌厨,具體取決于硬件配置岂却。
現(xiàn)在重新選中剛剛新創(chuàng)建的模型,我們要對它進行微調訓練裙椭。將準備好的照片放到 Stable Diffusion web UI 能夠讀取到的位置躏哩。
然后在 Input 部分的 Concepts 選項卡中添加所準備照片的實例提示詞、類別提示詞以及反向提示詞骇陈,另外還應該根據(jù)硬件配置調整訓練的輪次震庭、算法等設置瑰抵。
值得注意的是你雌,在準備用于訓練模型的圖片時應該選擇一個人或物體不同角度的照片淳玩,盡量保證主體特征清晰沒有遮擋超凳,數(shù)量在 3~5 張即可,圖片尺寸要保持與訓練參數(shù)設置的規(guī)格一致躺枕,默認為 512x512 像素肴颊。
設置就緒氓栈,點擊 Train 開始訓練,具體的訓練時長取決于所采用的硬件和訓練周期等參數(shù)的設置婿着。
默認情況下授瘦,訓練時模型數(shù)據(jù)會自動寫入新創(chuàng)建的模型醋界,你可以隨時切換到“文生圖”檢查模型的效果,在訓練完畢后提完,可以點擊 Generate Ckpt 按鈕將模型保存成 .ckpt 模型文件形纺。
如下圖所示,我用 5 張巧克力盒子作為輸入徒欣,訓練了一個名為 godi_box 的物體逐样,只要在 Prompt 中使用這個關鍵詞,他就會在場景中生成這個盒子打肝。
同樣地脂新,使用 DreamBooth 訓練的模型位于 models/dreambooth
目錄,你可以用前面介紹的方法在 JuiceFS 文件系統(tǒng)中提前創(chuàng)建 DreamBooth 目錄并掛載到 Stable Diffusion 中粗梭。
# 掛載子目錄 dreambooth 到 models/dreambooth
sudo juicefs mount mymodels --subdir dreambooth $HOME/stable-diffusion-webui/models/dreambooth
五争便、總結和提示
本文介紹了如何使用 JuiceFS 云服務創(chuàng)建一個共享存儲,實現(xiàn) Stable Diffusion 預訓練模型數(shù)據(jù)的共享使用断医。JuiceFS 是一款面向云原生設計的高性能分布式文件系統(tǒng)始花,它可以將幾乎所有對象存儲接入本地作為海量本地磁盤使用,亦可同時在跨平臺孩锡、跨地區(qū)的不同主機上掛載讀寫酷宵。JuiceFS 為 Stable Diffusion 提供了一種高效、可靠躬窜、易用的共享存儲方案浇垦,解決了模型數(shù)據(jù)存儲的難題。
在使用 JuiceFS 和 Stable Diffusion 的過程中荣挨,有一些注意事項和提示男韧,我們在這里簡要列舉如下:
對象存儲的存儲和流量費用:使用 JuiceFS 時,用戶需要自行承擔對象存儲的存儲和流量費用默垄,特別是跨網(wǎng)絡使用的下行流量費用此虑,以及讀寫請求費用。建議用戶盡可能使用與云服務器相同平臺口锭、相同區(qū)域的對象存儲朦前,從而充分利用平臺的內網(wǎng)線路節(jié)約開銷。對于使用本地電腦的用戶鹃操,對象存儲建議選擇與自己物理距離近的地區(qū)韭寸,同時可以選用云平臺的存儲包、流量包荆隘、請求包等資源來降低使用成本恩伺。
JuiceFS 的緩存空間和策略:JuiceFS 會將頻繁訪問的數(shù)據(jù)緩存到本地,提升訪問速度椰拒。用戶可以根據(jù)自己的需求和硬盤空間來配置緩存空間和策略晶渠,如設置緩存大小凰荚、緩存有效期、緩存清理策略等褒脯。具體的配置方法可以參考 JuiceFS 的文檔浇揩。
希望本文能夠幫助您更好地使用 Stable Diffusion 來創(chuàng)作自己的數(shù)字藝術作品。如果您有任何問題或建議憨颠,歡迎聯(lián)系我們胳徽。感謝您的閱讀和支持。
如有幫助的話歡迎關注我們項目 Juicedata/JuiceFS 喲爽彤! (0?0?)