最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【筆記】嘗試構(gòu)建自己的StableDiffusionWebui-Docker鏡像

2023-03-24 15:53 作者:k7212519  | 我要投稿

1.需求場(chǎng)景

最近在玩AI畫圖時(shí)遇到一個(gè)問題,stable-diffusion-webui在Linux底下的ROCm運(yùn)行環(huán)境搭建比較麻煩。由于我是AMD顯卡,無(wú)法使用Windows下的CUDA環(huán)境,導(dǎo)致花了很多時(shí)間在環(huán)境搭建上。

最開始是直接在Ubuntu本地搭建python,rocm,hip,pytorch環(huán)境,雖然最后雖然最后成功運(yùn)行,但這些軟件的版本依賴性極強(qiáng),比如pytorch2.0只支持rocm5.4.2,python3.7以上,得去詳細(xì)地查看每個(gè)軟件的使用文檔,才能成功構(gòu)建。網(wǎng)上的教程由于大多是直接使用apt命令安裝的最新版,相關(guān)軟件版本一直在更新,導(dǎo)致過一段時(shí)間可能教程就失效了。相同的命令最后得到的環(huán)境截然不同。而且即使我已經(jīng)搭建成功了,如果重裝了系統(tǒng),或者換一臺(tái)配置相似的電腦,就得重頭來(lái)一遍,可能到時(shí)候軟件又更新了,之前的命令就跟著失效。

此時(shí)Docker就是救星!Docker是一種容器技術(shù),有點(diǎn)類似于虛擬機(jī),但又不完全是。Docker可以把軟件以及軟件運(yùn)行所需要環(huán)境一起打包成鏡像。然后使用該鏡像構(gòu)建一個(gè)隔離運(yùn)行的容器,容器內(nèi)部與外部宿主機(jī)可以近似看作兩個(gè)單獨(dú)的系統(tǒng)。容器相比虛擬機(jī)最大的優(yōu)勢(shì)就是不會(huì)過多占用宿主機(jī)的性能,容器內(nèi)部軟件的運(yùn)行性能可以做到基本等同于原生系統(tǒng)運(yùn)行,IO讀寫性能上可能會(huì)稍有降低,但比虛擬機(jī)要好得多。

于是我就想將stable-diffusion-webui運(yùn)行環(huán)境打包成Docker鏡像,方便下次使用或者分享給其他人。

2.將軟件安裝到容器中

其實(shí)之前也經(jīng)常用到Docker,知道它大概是干嘛的,但僅是拉取和使用一些別人鏡像,比如nginx,xray之類的,并沒有過多的了解。

stable-diffusion-webui的GitHub官方倉(cāng)庫(kù) https://github.com/AUTOMATIC1111/stable-diffusion-webui 中其實(shí)有寫到如何在Docker下構(gòu)建環(huán)境。首先得保證你的顯卡驅(qū)動(dòng)正確地在Linux內(nèi)進(jìn)行了安裝,而且Docker軟件已經(jīng)安裝。這里根據(jù)官方文檔寫了一個(gè)在Ubuntu中安裝最新Docker和配置相關(guān)信息的腳本:

接下來(lái)就是從DockerHub拉取rocm/pytorch的鏡像,并運(yùn)行起來(lái):

這里要注意他的?-v 參數(shù)指定了將宿主機(jī)的?$HOME/dockerx文件夾映射到了容器內(nèi)部/dockerx目錄。通常我們需要將容器內(nèi)軟件的運(yùn)行數(shù)據(jù)保存在該映射的卷下,保證數(shù)據(jù)與容器的隔離。

這里要特別注意:docker run 中的 -v 參數(shù)是將宿主機(jī)的目錄映射到容器中,如果原容器中被映射的文件夾內(nèi)部有文件,就會(huì)自動(dòng)隱藏掉,實(shí)際上數(shù)據(jù)文件依然在宿主機(jī)中。

這里我們能看出Docker的思維是容器只保證軟件的運(yùn)行環(huán)境,而軟件的數(shù)據(jù)是在容器之外的,實(shí)現(xiàn)了數(shù)據(jù)與軟件本體的分離。這樣使得容器打包成的鏡像不包含數(shù)據(jù),可以被復(fù)制,無(wú)需擔(dān)心數(shù)據(jù)泄露風(fēng)險(xiǎn)。同時(shí)可以實(shí)現(xiàn)多個(gè)容器共用同一份數(shù)據(jù),這對(duì)于數(shù)據(jù)庫(kù)一類的軟件是非常重要的,保證了數(shù)據(jù)的一致性。

因?yàn)檫@個(gè)rocm/pytorch只是pytorch的鏡像,容器運(yùn)行起來(lái)后,還需要進(jìn)行一系列的配置才能運(yùn)行stable-diffusion。首先得升級(jí)一下默認(rèn)的python版本,在容器內(nèi)部運(yùn)行:

然后重啟容器,運(yùn)行:

檢查一下是否輸出了?Python 3.9.5或者更高的版本。再將stable-diffusion-webui項(xiàng)目clone到被映射的 /dockerx目錄下,并用新python創(chuàng)建軟件所需的虛擬環(huán)境:

最后,要運(yùn)行軟件,只需要激活虛擬環(huán)境,運(yùn)行l(wèi)aunch.py即可:

這里要注意stable-diffusion官方教程里的rocm為5.1.1,并不支持pytorch2.0。因?yàn)閜ytorch2.0是最近幾天才更新,可能作者還沒來(lái)得及更新文檔。這里替換成5.4.2才不會(huì)出錯(cuò)。后續(xù)新版本需要關(guān)注pytorch官網(wǎng)的版本信息。

以后每次運(yùn)行都需要激活虛擬環(huán)境并運(yùn)行一長(zhǎng)串代碼,我們可以將其寫成sh文件,后續(xù)運(yùn)行腳本文件即可:

3.構(gòu)建Docker鏡像

此時(shí)已經(jīng)能成功運(yùn)行webui,我們進(jìn)入webui下載常用的插件,設(shè)置好自己的偏好。然后就可以構(gòu)建自己的鏡像了,后續(xù)再次部署容器,插件和設(shè)置就避免了重復(fù)下載和設(shè)置。

構(gòu)建Doker鏡像有兩種方法:

  1. commit:基于現(xiàn)有的容器,直接打包成鏡像。

  2. build:使用Dockerfile精準(zhǔn)控制容器打包和運(yùn)行過程。

我們?cè)镜男枨笫褂胏ommit即可完成,在完成一系列的配置信息后,直接commit將容器打包。然后打包宿主機(jī)/home/user/dockerx內(nèi)的sd軟件本體和模型成數(shù)據(jù)包。數(shù)據(jù)包可以分發(fā)給其他人。也可以直接將軟件和數(shù)據(jù)復(fù)制到容器內(nèi)部打包。我是直接將webui集成到了鏡像中。

build是需要使用Dockerfile來(lái)操作容器內(nèi)的修改,一般格式為:

基本思路是FROM開始,從一個(gè)基礎(chǔ)鏡像出發(fā),指定在該鏡像的容器中執(zhí)行哪些命令,添加或是操作哪些文件等。最后CMD是容器運(yùn)行時(shí)執(zhí)行的命令,只有一條,一般用來(lái)指定軟件運(yùn)行的命令。如果在軟件運(yùn)行前還需要執(zhí)行多條,需要用ENTRYPOINT指定命令。

能看出dockerfile實(shí)際上就是在描述新鏡像是如何從基礎(chǔ)鏡像得來(lái)的,能對(duì)新鏡像進(jìn)行思路清晰地精確控制。完成dockerfile編寫后,只需要執(zhí)行:

即可完成新鏡像的構(gòu)建。docker build本質(zhì)上其實(shí)是多次執(zhí)行commit操作,每個(gè)dockerfile中的代碼塊為一層,從基礎(chǔ)鏡像開始,每執(zhí)行一層,需要一次commit,下一層再基于已經(jīng)commit的鏡像進(jìn)行構(gòu)建,直到整個(gè)最終的鏡像構(gòu)建完成。

當(dāng)然,docker 相關(guān)命令還有很多,參數(shù)和功能也比較多。這里只是記錄整個(gè)docker鏡像構(gòu)建的思路,需要用到某個(gè)功能或者參數(shù)時(shí),可以隨時(shí)看官方的文檔,或者問ChatGPT,我們只需要知道基本思路和原理,把握整個(gè)流程即可。

【筆記】嘗試構(gòu)建自己的StableDiffusionWebui-Docker鏡像的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
巴中市| 理塘县| 军事| 个旧市| 张家口市| 大庆市| 黄梅县| 抚州市| 揭阳市| 丹寨县| 墨竹工卡县| 宝丰县| 高唐县| 汝阳县| 山东省| 江北区| 合作市| 邹平县| 连城县| 克东县| 北安市| 满城县| 延长县| 永顺县| 抚远县| 南和县| 剑河县| 望城县| 长兴县| 怀柔区| 内江市| 福州市| 家居| 宣汉县| 海盐县| 株洲市| 云林县| 永顺县| 钦州市| 容城县| 抚州市|