通過EAS,您可以一鍵部署開源Kohya_ss服務並訓練LoRA模型。在AI繪畫情境中,您可以將經過訓練的LoRA模型應用於Stable Diffusion(SD)服務,作為輔助模型,以提升SD繪畫的效果。
前提條件
已開通EAS並建立預設工作空間,詳情請參見開通PAI並建立預設工作空間。
如果使用RAM使用者來部署模型,需要為RAM使用者授予EAS的系統管理權限,詳情請參見雲產品依賴與授權:EAS。
已在同地區下建立OSS儲存空間和目錄,用來存放訓練素材、輸出的模型檔案、日誌等。如何上傳檔案請參見控制台上傳檔案。
準備工作
登入OSS管理主控台,進入某個同地區下的Bucket路徑內。例如:
oss://kohya-demo/kohya/
。在當前Bucket路徑下建立專案檔夾。例如:
KaraDetroit_loar
。同時,在此專案檔夾下建立Image
、Log
、Model
3個檔案夾,如有JSON設定檔也可上傳至此專案檔夾。Image:存放訓練素材源檔案。
Model:存放訓練完成後的模型檔案。
Log:存放日誌。
SS_config.json:JSON檔案,用於大量設定參數,非必需。使用時可在JSON配置中修改相關參數,如檔案夾路徑、輸出模型命名等。具體配置詳情可參考GitHub。文本樣本請參考SS_config.json。
將準備好的圖片打包成壓縮檔上傳至
Image
檔案夾下。本文使用的圖片及描述檔案樣本:100_pic.tgz。重要圖片檔案夾命名必須符合格式:數字+底線+名稱。例如:100_pic。
圖片僅支援格式:
.png
,.jpg
,.jpeg
,.webp
,.bmp
。每張圖片必須提供一個同名的描述檔案,格式可為
.txt
,描述資訊必須放在第一行,如有多個描述資訊,可使用逗號分隔。
參數
描述
數字
每張圖片重複訓練次數,一般要求大於等於100。總訓練次數一般要求大於1500。
若檔案夾內包含10張圖片,則每張圖片訓練
1500/10=150
次,圖片檔案夾名數字部分可為“150”。若檔案夾內包含20張圖片,則每張圖片訓練
1500/20=75(<100)
次,圖片檔案夾名數字部分可為“100”。
底線
固定值,必填。
名稱
符合OSS檔案名稱規則的任一字元串,本例中為“pic”。
部署Kohya_ss服務
登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS。
單擊部署服務,然後在自訂模型部署地區,單擊自訂部署。
在自訂部署頁面,可通過表單或JSON配置相關參數。
通過表單配置參數
參數
描述
基本資料
服務名稱
自訂服務名稱。本案例使用的樣本值為:kohya_ss_demo。
環境資訊
部署方式
選擇鏡像部署,並選中開啟Web應用。
鏡像配置
在官方鏡像列表中選擇kohya_ss>kohya_ss:2.2。
說明由於版本迭代迅速,部署時鏡像版本選擇最高版本即可。
模型配置
選擇OSS類型的掛載方式,並配置以下參數:
OSS:選擇同地區下的OSS路徑。本文為
oss://kohya-demo/kohya/
。掛載路徑:可自訂。本文為
/workspace
。重要是否唯讀必須將開關關閉。否則模型檔案無法輸出到OSS中。
運行命令
選擇鏡像後系統會自動設定運行命令。本文為:
python -u kohya_gui.py --listen=0.0.0.0 --server_port=8000 --headless
。--listen
:用於將本程式綁定到指定的本機IP地址上,接收外部請求並進行處理。--server_port
:監聽連接埠號碼。
資源部署
資源類型
選擇公用資源。
部署資源
資源規格推薦使用GPU>ml.gu7i.c16m60.1-gu30(性價比最高)。本文選擇了當前最小規格ml.gu7i.c8m30.1-gu30。
通過JSON配置參數
在服務配置中單擊編輯,並設定JSON格式資料。
JSON參考樣本如下。
重要以下樣本第4行"name",第18行"oss"等配置請按實際情況修改。
{ "metadata": { "name": "kohya_ss_demo", "instance": 1, "enable_webservice": true }, "cloud": { "computing": { "instance_type": "ecs.gn6e-c12g1.12xlarge", "instances": null } }, "storage": [ { "oss": { "path": "oss://kohya-demo/kohya/", "readOnly": false }, "properties": { "resource_type": "model" }, "mount_path": "/workspace" }], "containers": [ { "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/kohya_ss:1.2", "script": "python -u kohya_gui.py --listen=0.0.0.0 --server_port=8000 --headless", "port": 8000 }] }
單擊確定,然後檢查表單配置,並單擊部署,等待幾分鐘後即可完成模型部署。當服務狀態為運行中時,服務部署成功。
訓練LoRA模型
單擊目標服務服務方式列下的查看Web應用,進入Kohya_ss服務。
選擇Dreambooth LoRA。
設定Configuration file。可選,若無
SS_config.json
可跳過此步驟。說明設定檔路徑為通過表單配置參數中的掛載路徑+OSS中建立的檔案夾路徑+SS_config.json。在本文中為:
/workspace/KaraDetroit_loar/SS_config.json
。設定SourceModel。本文使用safetensors,相比較checkpoint來說更具有安全性。
設定Folders。填寫前面步驟在OSS中所建立的
Image
、Log
、Model
路徑和輸出檔案名。參數
描述
Image folder
需要訓練的圖片檔案夾路徑。設定為通過表單配置參數中的掛載路徑拼接OSS中建立的
Image
路徑。在本文中為:/workspace/KaraDetroit_loar/Image
。Logging folder
輸出日誌的檔案夾路徑。設定為通過表單配置參數中的掛載路徑拼接OSS中建立的
Log
路徑。在本文中為:/workspace/KaraDetroit_loar/Log
。Output folder
輸出模型的檔案夾路徑。設定為通過表單配置參數中的掛載路徑拼接OSS中建立的
Model
路徑。在本文中為:/workspace/KaraDetroit_loar/Model
。Model output name
模型輸出名稱。例如:my_model。
設定Training parameters。樣本值見準備工作步驟中的
SS_config.json
內容。參數
描述
LoRA Type
LoRA類型:
LoCON
:可以調整SD的每一層。如:Res
、Block
、Transformer
。LoHA
:同樣大小處理更多資訊。
LoRA network weights
LoRA網路權重,如果要接著訓練則選用最後訓練的LoRA。選填。
Train batch size
訓練批量大小。該值越大,對顯存的要求越高。
Epoch
訓練輪數,將所有資料訓練一次為一輪。需要自行計算。一般情況下:
Kohya中總訓練次數 = 訓練圖片數量 x 重複次數 x 訓練輪數 / 訓練批量大小
。WebUI中總訓練次數 = 訓練圖片數量 x 重複次數
。
使用類別映像時,在Kohya或在WebUI中總訓練次數都會乘2,在Kohya中模型儲存次數會減半。
Save every N epochs
每N個訓練周期儲存一次。如設為2,則每完成2輪訓練儲存一次訓練結果。
Caption Extension
打標副檔名,例如:.txt。選填。
Mixed precision
混合精度。視顯卡效能決定。預設可選no、fp16、bf16。30GB顯存以上的顯卡建議設定為bf16。
Save precision
儲存精度,同上。
Number of CPU threads per core
CPU每核線程數。主要為顯存,根據所購執行個體和需求調整。
Learning rate
學習率。預設0.0001。
LR Scheduler
學習率調度器。按需選擇
cosine
或cosine with restart
等函數。LR Warmup(% of steps)
學習預熱步數。按需調節,預設為10,無需預熱則可選擇0。
Optimizer
最佳化器。按需選擇,預設
AdamW8bit
,DAdaptation
代表自動操作。Max Resolution
最大解析度。根據圖片情況進行設定。
Network Rank(Dimension)
模型複雜度。一般設定為128即可適應大部分情境。
Network Alpha
一般設定為比Network Rank(Dimension)小或者相同,常用的便是Network Rank設定為128,Network Alpha設定為64。
Convolution Rank(Dimension)
& Convolution Alpha
卷積度,LoRA對模型的微調涵蓋範圍。需根據不同的LoRA Type進行調整。
Kohya官方建議:
LoCon
:dim <= 64
,alpha = 1
(或更低)。LoHA
:dim <= 32
,alpha = 1
。
clip skip
使用的CLIP模型的次數,取值範圍是1到12,值越小,產生的映像就越接近原始映像或輸入映像。
寫實模型:選擇1。
二次元:選擇2。
Sample every n epoch
每N輪樣本。每幾輪儲存一次樣本。
Sample Prompts
提示詞樣本。需要使用命令,參數如下:
--n
:提示詞、反向提示詞。--w
:圖片寬度。--h
:圖片高度。--d
:映像種子。--l
:提示詞相關性(cfg)。--s
:迭代步數(steps)。
在頁面下方,單擊Train model開始進行訓練。
在模型線上服務(EAS)頁面的服務列表中單擊對應的服務名稱,進入服務詳情。單擊服務日誌即可即時查看訓練進度。
當出現
model saved
即表示訓練完成。訓練完成後,在配置的模型目錄(
Model
)中擷取訓練得到的LoRA模型檔案。例如:my_model.safetensors
。
使用訓練的LoRA模型進行Stable Diffusion AIGC繪畫
當您訓練好自己的LoRA模型後,可將其上傳到相應的SD WebUI的目錄中進行掛載使用,從而實現利用自己訓練的LoRA模型產生圖片。如何部署Stable Diffusion服務,可參考:5分鐘使用EAS一鍵部署Stable Diffusion實現文生圖能力。
如何在Stable Diffusion WebUI中上傳LoRA模型檔案,詳情設定如下:
Stable Diffusion WebUI的叢集版(Cluster)
配置Stable Diffusion WebUI鏡像,需選擇-cluster版本(例如stable-diffusion-webui:4.2-cluster-webui)。服務啟動成功後會在掛載的OSS路徑下自動建立
/data-{當前登入使用者ID}/models/Lora
路徑。在運行命令中添加以下參數:
--lora-dir
,選擇性參數。--lora-dir
未指定時,所有使用者的模型檔案隔離,只載入{OSS路徑}/data-{當前登入使用者ID}/models/Lora
下的模型檔案。--lora-dir
指定時,所有使用者均會載入該目錄以及{OSS路徑}/data-{當前登入使用者ID}/models/Lora
目錄下的模型檔案。例如:--lora-dir /code/stable-diffusion-webui/data-oss/models/Lora
。
--data-dir {OSS掛載路徑}
,例如:--data-dir /code/stable-diffusion-webui/data-oss
。
將LoRA模型檔案上傳到
{OSS路徑}/data-{當前登入使用者ID}/models/Lora
中。例如:oss://bucket-test/data-oss/data-1596******100/models/Lora
。說明OSS中的
/data-{當前登入使用者ID}/models/Lora
路徑會在當前服務啟動成功後自動建立,因此需在服務啟動成功後再上傳LoRA模型檔案。{當前登入使用者ID}
可在頁面右上方的個人頭像處查看。
Stable Diffusion WebUI的單機版
配置Stable Diffusion WebUI鏡像,需選擇非
-cluster
版本(例如stable-diffusion-webui:4.2-standard)。服務啟動成功後會在掛載的OSS路徑下自動建立/models/Lora
路徑。在運行命令中添加參數:
--data-dir {OSS掛載路徑}
。例如:--data-dir /code/stable-diffusion-webui/data-oss
。將LoRA模型檔案上傳到
{OSS路徑}/models/Lora
下。例如:oss://bucket-test/data-oss/models/Lora
。說明掛載的OSS中的
/models/Lora
路徑會在當前服務啟動成功後自動建立,無需自行建立。因此需要在服務啟動成功後再上傳LoRA模型檔案。