DLC LoRA訓(xùn)練最佳實踐
本文為您介紹如何通過提交一個使用DLC計算資源的超參數(shù)調(diào)優(yōu)實驗,進行LoRA模型訓(xùn)練,以尋找最佳超參數(shù)配置。
前提條件
首次使用AutoML功能時,需要完成AutoML相關(guān)權(quán)限授權(quán)。具體操作,請參見云產(chǎn)品依賴與授權(quán):AutoML。
已完成DLC相關(guān)權(quán)限授權(quán),授權(quán)方法詳情請參見云產(chǎn)品依賴與授權(quán):DLC。
已創(chuàng)建工作空間并關(guān)聯(lián)了通用計算資源公共資源組。具體操作,請參見創(chuàng)建工作空間。
已開通OSS并創(chuàng)建OSS Bucket存儲空間,詳情請參見控制臺快速入門。
步驟一:創(chuàng)建數(shù)據(jù)集
創(chuàng)建OSS類型的數(shù)據(jù)集,通過數(shù)據(jù)集將OSS存儲目錄掛載到DLC路徑,用于存儲超參數(shù)調(diào)優(yōu)實驗生成的數(shù)據(jù)文件。其中關(guān)鍵參數(shù)說明如下,其他參數(shù)使用默認(rèn)配置,詳情請參見創(chuàng)建數(shù)據(jù)集:從阿里云云產(chǎn)品。
數(shù)據(jù)集名稱:自定義數(shù)據(jù)集名稱。
選擇數(shù)據(jù)存儲:選擇腳本文件所在的OSS存儲目錄。
屬性:選擇文件夾。
步驟二:新建實驗
進入新建實驗頁面,并按照以下操作步驟配置關(guān)鍵參數(shù),其他參數(shù)配置詳情,請參見新建實驗。參數(shù)配置完成后,單擊提交。
設(shè)置執(zhí)行配置。
參數(shù)
描述
任務(wù)類型
選擇DLC。
資源組
選擇公共資源組。
框架
選擇Tensorflow。
數(shù)據(jù)集
選擇步驟一中創(chuàng)建的數(shù)據(jù)集。
節(jié)點鏡像
選擇鏡像地址,并在文本框中輸入鏡像地址
registry.cn-shanghai.aliyuncs.com/mybigpai/nni:diffusers
。該鏡像中已預(yù)先配置了以下數(shù)據(jù):
預(yù)訓(xùn)練基礎(chǔ)模型:模型Stable-Diffusion-V1-5已預(yù)先配置在鏡像路徑
/workspace/diffusers_model_data/model
下。LoRa訓(xùn)練數(shù)據(jù):pokemon已預(yù)先配置在鏡像路徑
/workspace/diffusers_model_data/data
下。訓(xùn)練代碼:diffusers已預(yù)先配置在鏡像路徑
/workspace/diffusers
下。
機器規(guī)格
選擇
。節(jié)點數(shù)量
配置為1。
節(jié)點啟動命令
cd /workspace/diffusers/examples/text_to_image && accelerate launch --mixed_precision="fp16" train_text_to_image_lora_eval.py \ --pretrained_model_name_or_path="/workspace/diffusers_model_data/model" \ --dataset_name="/workspace/diffusers_model_data/data" \ --caption_column="text" \ --resolution=512 --random_flip \ --train_batch_size=8 \ --val_batch_size=8 \ --num_train_epochs=100 --checkpointing_steps=100 \ --learning_rate=${lr} --lr_scheduler=${lr_scheduler} --lr_warmup_steps=0 \ --rank=${rank} --adam_beta1=${adam_beta1} --adam_beta2=${adam_beta2} --adam_weight_decay=${adam_weight_decay} \ --max_grad_norm=${max_grad_norm} \ --seed=42 \ --output_dir="/mnt/data/diffusers/pokemon/sd-pokemon_${exp_id}_${trial_id}" \ --validation_prompts "a cartoon pikachu pokemon with big eyes and big ears" \ --validation_metrics ImageRewardPatched \ --save_by_metric val_loss
超參數(shù)
每個超參數(shù)對應(yīng)的約束類型和搜索空間配置如下:
lr:
約束類型:choice。
搜索空間:單擊,增加3個枚舉值,分別為1e-4、1e-5和2e-5。
lr_scheduler:
約束類型:choice。
搜索空間:單擊,增加3個枚舉值,分別為constant、cosine和polynomial。
rank:
約束類型:choice。
搜索空間:單擊,增加3個枚舉值,分別為4、32和64。
adam_beta1:
約束類型:choice。
搜索空間:單擊,增加2個枚舉值,分別為0.9和0.95。
adam_beta2:
約束類型:choice。
搜索空間:單擊,增加2個枚舉值,分別為0.99和0.999。
adam_weight_decay:
約束類型:choice。
搜索空間:單擊,增加2個枚舉值,分別為1e-2和1e-3。
max_grad_norm:
約束類型:choice。
搜索空間:單擊,增加3個枚舉值,分別為1、5和10。
使用上述配置可以生成648種超參數(shù)組合,后續(xù)實驗會分別為每種超參數(shù)組合創(chuàng)建一個Trial,在每個Trial中使用一組超參數(shù)組合來運行腳本。
設(shè)置Trial配置。
參數(shù)
描述
指標(biāo)類型
選擇stdout。
計算方式
選擇best。
指標(biāo)權(quán)重
key:val_loss=([0-9\\.]+)。
Value:1。
指標(biāo)來源
配置為cmd1。
優(yōu)化方向
選擇越大越好。
設(shè)置搜索配置。
參數(shù)
描述
搜索算法
選擇TPE。
最大搜索次數(shù)
配置為5。
最大并發(fā)量
配置為2。
開啟earlystop
打開開關(guān)。
start step
5
步驟三:查看實現(xiàn)詳情和運行結(jié)果
在實驗列表頁面,單擊實驗名稱,進入實驗詳情頁面。
在該頁面,您可以查看Trial的執(zhí)行進度和狀態(tài)統(tǒng)計。實驗根據(jù)配置的搜索算法和最大搜索次數(shù)自動創(chuàng)建5個Trial。
單擊Trial列表,您可以在該頁面查看該實驗自動生成的所有Trial列表,以及每個Trial的執(zhí)行狀態(tài)、最終指標(biāo)和超參數(shù)組合。
Trial運行時長大約持續(xù)5個小時。根據(jù)配置的優(yōu)化方向(越大越好),從上圖可以看出,最終指標(biāo)為0.087655對應(yīng)的超參數(shù)組合較優(yōu)。
步驟四:部署及推理模型服務(wù)
下載LoRA模型,并進行模型文件格式轉(zhuǎn)換。
實驗執(zhí)行成功后,會在啟動命令指定的
output_dir
目錄下生成模型文件。您可以前往該實驗配置的數(shù)據(jù)集掛載的OSS路徑的checkpoint-best
目錄中,查看并下載模型文件。詳情請參見控制臺快速入門。執(zhí)行以下命令,將pytorch_model.bin轉(zhuǎn)換成pytorch_model_converted.safetensors。
wget http://automl-nni.oss-cn-beijing.aliyuncs.com/aigc/convert.py python convert.py --file pytorch_model.bin
部署Stable Diffusion WebUI服務(wù)。
進入模型在線服務(wù)(EAS)頁面。具體操作,請參見步驟一:進入模型在線服務(wù)頁面。
在模型在線服務(wù)(EAS)頁面,單擊部署服務(wù),在自定義模型部署區(qū)域,單擊自定義部署。
在新建服務(wù)頁面,配置以下關(guān)鍵參數(shù)后,單擊部署。
參數(shù)
描述
服務(wù)名稱
自定義服務(wù)名稱。本案例使用的示例值為:sdwebui_demo。
部署方式
選擇鏡像部署AI-Web應(yīng)用。
鏡像選擇
在PAI平臺鏡像列表中選擇stable-diffusion-webui;鏡像版本選擇4.2-standard。
說明由于版本迭代迅速,部署時鏡像版本選擇最高版本即可。
模型配置
單擊填寫模型配置,進行模型配置。
模型配置選擇OSS掛載,將OSS路徑配置為步驟1中創(chuàng)建的OSS Bucket路徑。例如:
oss://bucket-test/data-oss/
。掛載路徑:將您配置的OSS文件目錄掛載到鏡像的
/code/stable-diffusion-webui
路徑下。例如配置為:/code/stable-diffusion-webui/data-oss
。是否只讀:開關(guān)關(guān)閉。
運行命令
鏡像配置完成后,系統(tǒng)會自動配置運行命令。您需要在運行命令中增加
--data-dir 掛載目錄
,其中掛載目錄需要與模型配置中掛載路徑的最后一級目錄一致。本方案在運行命令末尾增加--data-dir data-oss
。資源配置方法
選擇常規(guī)資源配置。
資源配置選擇
必須選擇GPU類型,實例規(guī)格推薦使用ml.gu7i.c16m60.1-gu30(性價比最高)。
系統(tǒng)盤配置
將額外系統(tǒng)盤設(shè)置為100 GB。
單擊部署。
PAI會自動在您配置的OSS空文件目錄下創(chuàng)建如下目錄結(jié)構(gòu),并復(fù)制必要的數(shù)據(jù)到該目錄下。
上傳模型文件到指定路徑下,然后單擊目標(biāo)服務(wù)操作列下的>重啟服務(wù),服務(wù)重啟成功后,即可生效。
將上述步驟生成的模型文件pytorch_model_converted.safetensors上傳到OSS的
models/lora/
目錄中。將revAnimated_v122基礎(chǔ)模型,上傳到OSS的
models/Stable-diffusion/
目錄中。
單擊目標(biāo)服務(wù)的服務(wù)方式列下的查看Web應(yīng)用,在WebUI頁面進行模型推理驗證。
使用Stable Diffusion模型
在WebUI頁面配置以下參數(shù):
Stable Diffusion模型:選擇revAnimated_v122.safetensors。
正向提示詞Prompt:在編輯框中輸入請求數(shù)據(jù),例如
a drawing of a green pokemon with red eyes
。采樣方法(Sampler):選擇DPM++2M Karras。
迭代部署(Steps):配置為20。
隨機數(shù)種子(Seed):配置為1。
參數(shù)配置完成后,單擊生成。輸出結(jié)果示例如下:
使用Stable diffusion和LoRA模型
在WebUI頁面配置以下參數(shù):
Stable Diffusion模型:選擇revAnimated_v122.safetensors。
正向提示詞Prompt:在編輯框中輸入請求數(shù)據(jù),并將Lora模型的權(quán)重從<lora:pytorch_model_converted:1>調(diào)整為<lora:pytorch_model_converted:0.5>。例如
a drawing of a green pokemon with red eyes <lora:pytorch_model_converted:0.5>
。單擊Lora頁簽,確認(rèn)模型pytorch_model_converted.safetensors已成功加載。
采樣方法(Sampler):選擇DPM++2M Karras。
迭代部署(Steps):配置為20。
隨機數(shù)種子(Seed):配置為1。
參數(shù)配置完成后,單擊生成。輸出結(jié)果示例如下: