本文為您介紹如何通過提交一個使用DLC計算資源的超參數調優實驗,進行LoRA模型訓練,以尋找最佳超參數配置。
前提條件
首次使用AutoML功能時,需要完成AutoML相關許可權授權。具體操作,請參見雲產品依賴與授權:AutoML。
已完成DLC相關許可權授權,授權方法詳情請參見雲產品依賴與授權:DLC。
已建立工作空間並關聯了通用計算資源公用資源群組。具體操作,請參見建立工作空間。
已開通OSS並建立OSS Bucket儲存空間,詳情請參見控制台快速入門。
步驟一:建立資料集
建立OSS類型的資料集,通過資料集將OSS儲存目錄掛載到DLC路徑,用於儲存超參數調優實驗產生的資料檔案。其中關鍵參數說明如下,其他參數使用預設配置,詳情請參見建立資料集:從阿里雲雲產品。
資料集名稱:自訂資料集名稱。
選擇資料存放區:選擇指令檔所在的OSS儲存目錄。
屬性:選擇檔案夾。
步驟二:建立實驗
進入建立實驗頁面,並按照以下操作步驟配置關鍵參數,其他參數配置詳情,請參見建立實驗。參數配置完成後,單擊提交。
設定執行配置。
參數
描述
任務類型
選擇DLC。
資源群組
選擇公用資源群組。
架構
選擇Tensorflow。
資料集
選擇步驟一中建立的資料集。
節點鏡像
選擇鏡像地址,並在文字框中輸入鏡像地址
registry.cn-shanghai.aliyuncs.com/mybigpai/nni:diffusers
。該鏡像中已預先配置了以下資料:
預訓練基本模型:模型Stable-Diffusion-V1-5已預先配置在鏡像路徑
/workspace/diffusers_model_data/model
下。LoRa訓練資料:pokemon已預先配置在鏡像路徑
/workspace/diffusers_model_data/data
下。訓練代碼:diffusers已預先配置在鏡像路徑
/workspace/diffusers
下。
機器規格
選擇
。節點數量
配置為1。
節點啟動命令
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
超參數
每個超參數對應的約束類型和搜尋空間配置如下:
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種超參數組合,後續實驗會分別為每種超參數組合建立一個Trial,在每個Trial中使用一組超參數組合來運行指令碼。
設定Trial配置。
參數
描述
指標類型
選擇stdout。
計算方式
選擇best。
指標權重
key:val_loss=([0-9\\.]+)。
Value:1。
指標來源
配置為cmd1。
最佳化方向
選擇越大越好。
設定搜尋配置。
參數
描述
搜尋演算法
選擇TPE。
最大搜尋次數
配置為5。
最大並發量
配置為2。
開啟earlystop
開啟開關。
start step
5
步驟三:查看實現詳情和運行結果
在實驗列表頁面,單擊實驗名稱,進入實驗詳情頁面。
在該頁面,您可以查看Trial的執行進度和狀態統計。實驗根據配置的搜尋演算法和最大搜尋次數自動建立5個Trial。
單擊Trial列表,您可以在該頁面查看該實驗自動產生的所有Trial列表,以及每個Trial的執行狀態、最終指標和超參數組合。
Trial運行時間長度大約持續5個小時。根據配置的最佳化方向(越大越好),從上圖可以看出,最終指標為0.087655對應的超參數組合較優。
步驟四:部署及推理模型服務
下載LoRA模型,並進行模型檔案格式轉換。
實驗執行成功後,會在啟動命令指定的
output_dir
目錄下產生模型檔案。您可以前往該實驗配置的資料集掛載的OSS路徑的checkpoint-best
目錄中,查看並下載模型檔案。詳情請參見控制台快速入門。執行以下命令,將pytorch_model.bin轉換成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服務。
進入模型線上服務(EAS)頁面。具體操作,請參見步驟一:進入模型線上服務頁面。
在模型線上服務(EAS)頁面,單擊部署服務,在自訂模型部署地區,單擊自訂部署。
在建立服務頁面,配置以下關鍵參數後,單擊部署。
參數
描述
服務名稱
自訂服務名稱。本案例使用的樣本值為:sdwebui_demo。
部署方式
選擇鏡像部署AI-Web應用。
鏡像選擇
在PAI平台鏡像列表中選擇stable-diffusion-webui;鏡像版本選擇4.2-standard。
說明由於版本迭代迅速,部署時鏡像版本選擇最高版本即可。
模型配置
單擊填寫模型配置,進行模型配置。
模型配置選擇OSS掛載,將OSS路徑配置為步驟1中建立的OSS Bucket路徑。例如:
oss://bucket-test/data-oss/
。掛載路徑:將您配置的OSS檔案目錄掛載到鏡像的
/code/stable-diffusion-webui
路徑下。例如配置為:/code/stable-diffusion-webui/data-oss
。是否唯讀:開關關閉。
運行命令
鏡像配置完成後,系統會自動設定運行命令。您需要在運行命令中增加
--data-dir 掛載目錄
,其中掛載目錄需要與模型配置中掛載路徑的最後一級目錄一致。本方案在運行命令末尾增加--data-dir data-oss
。資源配置方法
選擇一般資源配置。
資源配置選擇
必須選擇GPU類型,執行個體規格推薦使用ml.gu7i.c16m60.1-gu30(性價比最高)。
系統硬碟配置
將額外系統硬碟設定為100 GB。
單擊部署。
PAI會自動在您配置的OSS空檔案目錄下建立如下目錄結構,並複製必要的資料到該目錄下。
上傳模型檔案到指定路徑下,然後單擊目標服務操作列下的>重啟服務,服務重啟成功後,即可生效。
將上述步驟產生的模型檔案pytorch_model_converted.safetensors上傳到OSS的
models/lora/
目錄中。將revAnimated_v122基本模型,上傳到OSS的
models/Stable-diffusion/
目錄中。
單擊目標服務的服務方式列下的查看Web應用,在WebUI頁面進行模型推理驗證。