AIGC Stable Diffusion文生图Lora模型微调实现虚拟上装
1. 选择实验资源
本实验支持开通免费试用、个人账户资源两种实验资源方式。
在实验开始前,请您选择其中一种实验资源,单击确认开启实验。
- 如果您选择的是开通免费试用,下方卡片会展示本实验支持的试用规格,可以选择你要试用的云产品资源进行开通。您在实验过程中,可以随时用右下角icon唤起试用卡片。
说明:试用云产品开通在您的个人账号下,并占用您的试用权益。如试用超出免费试用额度,可能会产生一定费用。
阿里云支持试用的产品列表、权益及具体规则说明请参考开发者试用中心。
2. 创建实验资源
本步骤指导您如何创建PAI-DSW。
如果您已创建PAI-DSW,请您选择个人账户资源,并跳过本小节,直接进行实验操作即可。
本步骤仅作为参考使用,您可以根据需求自行选择配置。
如果您选择的是开通免费试用,参考以下步骤创建PAI-DSW。
说明:PAI-DSW免费资源包只适用于本教程中的PAI-DSW产品。如果您领取了PAI-DSW资源包后,使用了PAI-DSW及PAI的其他产品功能(如PAI-DLC、PAI-EAS等),PAI-DSW产品产生的费用由资源包抵扣,其他产品功能产生的费用无法抵扣,会产生对应的费用账单。
- 在本实验页面下方卡片会展示本实验支持的试用规格,选择一个试用规格,单击立即试用。
- 在交互式建模PAI-DSW面板,勾选服务协议后,单击立即试用,进入免费开通页面。
说明:以下几种情况可能产生额外费用。
- 使用了除免费资源类型外的计费资源类型:
您申请试用的是PAI-DSW免费资源包,但您创建的DSW实例使用的资源类型非阿里云免费试用提供的资源类型。当前可申请免费使用的资源类型有:ecs.gn6v-c8g1.2xlarge、ecs.g6.xlarge、ecs.gn7i-c8g1.2xlarge。
- 申请试用的免费资源包与使用的产品资源不对应:
- 您创建了PAI-DSW实例,但您申请试用的是PAI-DLC或PAI-EAS产品的免费资源包。您使用DSW产品产生的费用无法使用免费资源包抵扣,会产生后付费账单。
- 您申请试用的是PAI-DSW免费资源包,但您使用的产品是PAI-DLC或PAI-EAS。使用PAI-DLC和PAI-EAS产品产生的费用无法使用DSW免费资源包抵扣,会产生后付费账单。
- 免费额度用尽或超出试用期:
领取免费资源包后,请在免费额度和有效试用期内使用。如果免费额度用尽或试用期结束后,继续使用计算资源,会产生后付费账单。
请前往资源实例管理页面,查看免费额度使用量和过期时间,如下图所示。
- 开通机器学习PAI并创建默认工作空间。其中关键参数配置如下,更多详细内容,请参见开通并创建默认工作空间。
- 本教程地域选择:华东1(杭州)。您也可以根据情况选择华北2(北京)、华东2(上海)、华南1(深圳)地域。
- 单击免费开通并创建默认工作空间:在弹出的开通页面中配置订单详情。配置要点如下。
- 本教程不需要开通其他产品,您需要在组合开通配置模块,去勾选其他产品的复选框。
- 在服务角色授权模块单击去授权,根据界面提示为PAI完成授权,然后返回开通页面,刷新页面,继续开通操作。
- 开通成功后单击进入PAI控制台,在左侧导航栏中单击工作空间列表。
- 在默认工作空间中创建DSW实例。其中关键参数配置如下,其他参数取默认配置即可。更多详细内容,请参见创建及管理DSW实例。
说明:创建DSW实例需要一定时间,与当前的资源数有关,通常大约需要15分钟。如果您使用地域资源不足,可更换其他支持免费试用的地域申请开通试用并创建DSW实例。
参数 |
描述 |
地域及可用区 |
本教程选择:华东1(杭州)。 |
实例名称 |
您可以自定义实例名称,本教程示例为:AIGC_test。 |
资源类型 |
本教程需选择:GPU规格,规格名称为ecs.gn7i-c8g1.2xlarge。 【说明】:阿里云免费试用提供的资源类型包括以下几种类型:
|
选择镜像 |
选择官方镜像中的stable-diffusion-webui-env:pytorch1.13-gpu-py310-cu117-ubuntu22.04。 |
如果您选择的是个人账户资源,参考以下步骤创建PAI-DSW。
- 前往PAI控制台。
- 开通机器学习PAI并创建默认工作空间。其中关键参数配置如下,更多详细内容,请参见开通并创建默认工作空间。、
- 本教程地域选择:华东1(杭州)。您也可以根据情况选择华北2(北京)、华东2(上海)、华南1(深圳)地域。
- 单击免费开通并创建默认工作空间:在弹出的开通页面中配置订单详情。配置要点如下。
- 本教程不需要开通其他产品,您需要在组合开通配置模块,去勾选其他产品的复选框。
- 在服务角色授权模块单击去授权,根据界面提示为PAI完成授权,然后返回开通页面,刷新页面,继续开通操作。
- 开通成功后单击进入PAI控制台,在左侧导航栏中单击工作空间列表。
- 在默认工作空间中创建DSW实例。其中关键参数配置如下,其他参数取默认配置即可。更多详细内容,请参见创建及管理DSW实例。
说明:创建DSW实例需要一定时间,与当前的资源数有关,通常大约需要15分钟。如果您使用地域资源不足,可更换其他地域创建DSW实例。
参数 |
描述 |
地域及可用区 |
本教程选择:华东1(杭州)。 |
实例名称 |
您可以自定义实例名称,本教程示例为:AIGC_test。 |
资源类型 |
本教程需选择:GPU规格,规格名称为ecs.gn7i-c8g1.2xlarge。 |
选择镜像 |
选择官方镜像中的stable-diffusion-webui-env:pytorch1.13-gpu-py310-cu117-ubuntu22.04。 |
3. 安装Diffusers
- 进入PAI-DSW开发环境。
- 登录PAI控制台。
- 在页面左上方,选择DSW实例所在的地域。
- 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击默认工作空间名称,进入对应工作空间内。
- 在左侧导航栏,选择模型开发与训练>交互式建模(DSW)。
- 在交互式建模(DSW)页面,单击需要打开的实例操作列下的打开,进入PAI-DSW实例开发环境。
- 在JupyterLab页签的Launcher页面,单击快速开始区域Notebook下的Python 3(ipykernel)。
- 在JupyterLab的Notebook中,执行如下命令,从GitHub下载Diffusers开源库,并安装相关依赖。
说明:本教程使用的阿里云官方镜像已为您预置了核心Diffusers开源库,后续的模型微调需依赖其他开源插件,因此您需执行以下命令进行下载,下载过程大约需要持续5分钟。由于Github访问存在不稳定性,如果运行后未出现正常返回结果且提示网络相关原因,例如:Network is unreachable、unable to access 'https://github.com/......',您可以重新运行命令。
! git clone https://github.com/huggingface/diffusers ! cd diffusers && git checkout e126a82cc5d9afbeb9b476455de24dd3e7dd358a ! cd diffusers && pip install .
- 执行如下命令,验证是否安装成功。
import diffusers
系统返回如下结果,表示安装成功。
- 配置accelerate。
在JupyterLab的Notebook中,执行如下命令,下载默认配置文件。
说明:若需要自定义配置则在Terminal中执行命令:accelerate config,并根据DSW实例详情,选择对应配置。
! mkdir -p /root/.cache/huggingface/accelerate/ ! wget -c http://pai-vision-data-sh.oss-cn-shanghai.aliyuncs.com/aigc-data/accelerate/default_config.yaml -O /root/.cache/huggingface/accelerate/default_config.yaml
- 在JupyterLab的Notebook中,执行如下命令,安装文生图算法相关依赖库。
! cd diffusers/examples/text_to_image && pip install -r requirements.txt
- 在JupyterLab的Notebook中,执行如下命令,下载stable-diffusion-webui开源库。
说明:为了提升下载速度,本示例使用了gitcode开源库镜像,并在OSS上缓存了submodule的代码包,直接执行如下命令即可完成下载,若需更新最新版本,用户可前往开源链接进行下载。
import os ! apt update ! apt install -y aria2 def aria2(url, filename, d): !aria2c --console-log-level=error -c -x 16 -s 16 {url} -o {filename} -d {d} url_prefix = { "cn-shanghai": "http://pai-vision-data-sh.oss-cn-shanghai-internal.aliyuncs.com", "cn-hangzhou": "http://pai-vision-data-hz2.oss-cn-hangzhou-internal.aliyuncs.com", "cn-shenzhen": "http://pai-vision-data-sz.oss-cn-shenzhen-internal.aliyuncs.com", "cn-beijing": "http://pai-vision-data-bj.oss-cn-beijing-internal.aliyuncs.com", } dsw_region = os.environ.get("dsw_region") prefix = url_prefix[dsw_region] if dsw_region in url_prefix else "http://pai-vision-data-sh.oss-cn-shanghai.aliyuncs.com" ! git clone https://gitcode.net/mirrors/AUTOMATIC1111/stable-diffusion-webui.git %cd stable-diffusion-webui ! git checkout a9fed7c364061ae6efb37f797b6b522cb3cf7aa2 repositories_url = f"{prefix}/aigc-data/code/repositories.tar.gz" aria2(repositories_url, repositories_url.split("/")[-1], "./") ! tar -xf repositories.tar.gz %cd extensions ! git clone https://gitcode.net/mirrors/DominikDoom/a1111-sd-webui-tagcomplete.git ! git clone https://gitcode.net/ranting8323/stable-diffusion-webui-localization-zh_CN %cd .. ! wget -c http://pai-vision-data-sh.oss-cn-shanghai.aliyuncs.com/aigc-data/webui_config/config_tryon.json -O config.json %cd ..
返回如下结果表明下载完成。
4. Stable Diffusion+LORA模型fintune
- 准备数据集及训练代码。
我们提供了训练代码及一个小的示例数据,可以参照该格式准备自定义数据。
在JupyterLab的Notebook中,执行如下命令,下载示例数据集。后续会使用该数据集进行模型训练。
! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/try_on/cloth_train_example.tar.gz && tar -xvf cloth_train_example.tar.gz ! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/try_on/train_text_to_image_lora.py
系统输出如图结果,表示代码执行成功。
执行如下命令,查看示例服装。
from PIL import Image display(Image.open("cloth_train_example/train/20230407174450.jpg"))
- 执行如下命令,下载预训练模型并转化成diffusers格式。
说明:为了加速下载我们在oss做了缓存,用户可以运行如下命令直接下载,用户也可前往hugging face官网下载。
safety_checker_url = f"{prefix}/aigc-data/hug_model/models--CompVis--stable-diffusion-safety-checker.tar.gz" aria2(safety_checker_url, safety_checker_url.split("/")[-1], "./") ! tar -xf models--CompVis--stable-diffusion-safety-checker.tar.gz -C /root/.cache/huggingface/hub/ clip_url = f"{prefix}/aigc-data/hug_model/models--openai--clip-vit-large-patch14.tar.gz" aria2(clip_url, clip_url.split("/")[-1], "./") ! tar -xf models--openai--clip-vit-large-patch14.tar.gz -C /root/.cache/huggingface/hub/ model_url = f"{prefix}/aigc-data/sd_models/chilloutmix_NiPrunedFp32Fix.safetensors" aria2(model_url, model_url.split("/")[-1], "stable-diffusion-webui/models/Stable-diffusion/") ! python diffusers/scripts/convert_original_stable_diffusion_to_diffusers.py \ --checkpoint_path=stable-diffusion-webui/models/Stable-diffusion/chilloutmix_NiPrunedFp32Fix.safetensors \ --dump_path=chilloutmix-ni --from_safetensors
- 模型训练。执行如下命令,设置num_train_epochs为200,进行lora模型的训练。
! export MODEL_NAME="chilloutmix-ni" && \ export DATASET_NAME="cloth_train_example" && \ accelerate launch --mixed_precision="fp16" train_text_to_image_lora.py \ --pretrained_model_name_or_path=$MODEL_NAME \ --dataset_name=$DATASET_NAME --caption_column="text" \ --width=640 --height=768 --random_flip \ --train_batch_size=1 \ --num_train_epochs=200 --checkpointing_steps=5000 \ --learning_rate=1e-04 --lr_scheduler="constant" --lr_warmup_steps=0 \ --seed=42 \ --output_dir="cloth-model-lora" \ --validation_prompt="cloth1" --validation_epochs=100
- 准备WebUI所需模型文件。
- 将lora模型转化成WebUI支持格式并拷贝到WebUI所在目录。
! wget -c http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/datasets/convert-to-safetensors.py ! python convert-to-safetensors.py --file='cloth-model-lora/pytorch_lora_weights.bin' ! mkdir stable-diffusion-webui/models/Lora ! cp cloth-model-lora/pytorch_lora_weights_converted.safetensors stable-diffusion-webui/models/Lora/cloth_lora_weights.safetensors
- 准备额外模型文件。
为了加速下载我们在oss做了缓存,用户可以运行如下命令直接下载。
detection_url = f"{prefix}/aigc-data/codeformer/detection_Resnet50_Final.pth" aria2(detection_url, detection_url.split("/")[-1], "stable-diffusion-webui/repositories/CodeFormer/weights/facelib/") parse_url = f"{prefix}/aigc-data/codeformer/parsing_parsenet.pth" aria2(parse_url, parse_url.split("/")[-1], "stable-diffusion-webui/repositories/CodeFormer/weights/facelib/") codeformer_url = f"{prefix}/aigc-data/codeformer/codeformer-v0.1.0.pth" aria2(codeformer_url, codeformer_url.split("/")[-1], "stable-diffusion-webui/models/Codeformer/") embedding_url = f"{prefix}/aigc-data/embedding/ng_deepnegative_v1_75t.pt" aria2(embedding_url, embedding_url.split("/")[-1], "stable-diffusion-webui/embeddings/") model_lora_url = f"{prefix}/aigc-data/lora/koreanDollLikeness_v10.safetensors" aria2(model_lora_url, model_lora_url.split("/")[-1], "stable-diffusion-webui/models/Lora/")
5. 在DSW中启动WebUI
- 在JupyterLab的Notebook中,执行如下命令,启动WebUI。
说明:由于Github访问存在不稳定性,如果运行后未出现正常返回结果且提示网络相关原因,例如:Network is unreachable、unable to access 'https://github.com/......',您可以重新运行命令。
! cd stable-diffusion-webui && python -m venv --system-site-packages --symlinks venv ! cd stable-diffusion-webui && \ sed -i 's/can_run_as_root=0/can_run_as_root=1/g' webui.sh && \ ./webui.sh --no-download-sd-model --xformers --gradio-queue
- 在返回结果中,单击URL链接(http://127.0.0.1:7860),进入WebUI页面。后续您可以在该页面,进行模型推理。
6. 测试
完成以上操作后,您已经成功完成了AIGC文生图模型微调训练及WebUI部署。您可以在WebUI页面,进行模型推理验证。
- 在文生图页签通过下方设置可从示例衣服生成如下图片。
- 正向prompt:cloth1,, (extremely detailed CG unity 8k wallpaper),(RAW photo, best quality), (realistic, photo-realistic:1.2), a close up portrait photo, 1girl, shopping mall rooftop cafe, outdoor, smile, (high detailed skin:1.4), puffy eyes, gorgeous hair, air bangs, brown black hair, soft lighting, high quality,
- 负向prompt:ng_deepnegative_v1_75t,paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, ((monochrome)), (grayscale:1.2), skin spots, acnes, skin blemishes, age spot, glans,extra fingers,fewer fingers,(watermark:1.2),(letters:1.2),(nsfw:1.2),teeth
- 采样方法:Euler a
- 采样步数:50
- 宽高: 640,768
- 随机种子:1400244389
- CFG Scale:7
- 使用面部修复
- 单击Generate,输出如图推理结果。
7. 释放资源
清理
- 如果无需继续使用DSW实例,您可以按照以下操作步骤停止DSW实例。
- 登录PAI控制台。
- 在页面左上方,选择DSW实例的地域。
- 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击默认工作空间名称,进入对应工作空间内。
- 在工作空间页面的左侧导航栏选择模型开发与训练>交互式建模(DSW),进入交互式建模(DSW)页面。
- 单击目标实例操作列下的停止,成功停止后即停止资源消耗。
- 领取免费资源包后,请在免费额度和有效试用期内使用。如果免费额度用尽或试用期结束后,继续使用计算资源,会产生后付费账单。
请前往资源实例管理页面,查看免费额度使用量和过期时间,如下图所示。
- 如果需要继续使用DSW实例,请务必至少在试用到期1小时前为您的阿里云账号充值,到期未续费的DSW实例会因欠费而被自动停止。
后续
在试用有效期期间,您还可以继续使用DSW实例进行模型训练和推理验证。
实验地址:https://developer.aliyun.com/adc/scenario/45863d6684d04656b1553478d9147b61