打造你的定制化文生图工具【AI动手】
领取试用
本次体验使用到阿里云交互式建模(PAI-DSW),如果你是新用户,则可以先领取产品试用。点击前往,领取试用。如下:领取试用时认真阅读试用说明,确认后点击立即试用。如下:
主机规格抵扣规则:A10机型(ecs.gn7i-c8g1.2xlarge):每使用1小时,消耗6.99计算时V100机型(ecs.gn6v-c8g1.2xlarge):每使用1小时,消耗14.55计算时G6机型(ecs.g6.xlarge):每使用1小时,消耗0.57计算时可用区中国内地公共云DSW开服Region通用,包括北京、上海、杭州、深圳有效期有效期3个月,试用期间免费,超过试用期限会自动停机或释放
领取试用后,可在我的账单中查看到具体的明细,如下:
开通默认工作空间
登录PAI控制台,如果你是首次使用PAI,会需要先开通个默认的工作空间。如下:为了方便,这里地域就直接选择了杭州。如下:由于本次体验不需要开通其他产品,所以组合服务这里取消默认的组合服务勾选,以免产生不必要的费用。首次开通需要授权,点击授权前往RAM访问控制。如下:点击同意授权即可。如下:完成授权后返回点击刷新,继续点击“确认开通并创建默认工作空间”。如下:这里需要等待一小会,即可完成服务的开通。如下:
新建实例
进入PAI控制台,在左侧导航栏中单击工作空间列表,选择交互式建模(DSW),点击新建实例。配置参数区域这里选择华东1(杭州)实例名称为AIGC_test资源规则选择GPU类别中的ecs.gn7i-c8g1.2xlarge (8 vCPU, 30 GiB, NVIDIA A10 * 1),这也是试用的规格之一,支持资源包抵扣的。镜像这里我们选择stable-diffusion-webui-develop:1.0-pytorch1.13-gpu-py310-cu117-ubuntu22.04,专用于DSW实例环境的。在点击确定开始创建时会遇到如下异常,是因为所在区域的可用资源不足导致的,需要更换到其他可用区域重新提交。其他配置保持默认,点击左下角的确定,开始创建。创建过程中,可以通过事件查看到创建时的日志记录。2分钟后,可以看到状态显示运行中,此时就表明实例创建成功。点击操作项的打开,即可进入PAI-DSW实例开发环境。
安装依赖
单击快速开始区域Notebook下的Python 3(ipykernel)从GitHub下载Diffusers开源库,并安装相关依赖:
! git clone https://github.com/huggingface/diffusers
! cd diffusers && git checkout e126a82cc5d9afbeb9b476455de24dd3e7dd358a
! cd diffusers && pip install .
可以通过如下命令验证环境是否完成安装,如下:
import diffusers
执行如下命令,下载默认配置文件,配置accelerate。
! 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
接下来,安装文生图算法相关依赖库。
! cd diffusers/examples/text_to_image && pip install -r requirements.txt
接着最重要的一步,就是下载stable-diffusion-webui开源库。
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 ..
若需更新最新版本,你可以点击下面的开源链接前往进行下载。stable-diffusion-webuistablediffusiontaming-transformersk-diffusionCodeFormerblip通过命令运行窗口可以直观看到当前进度。这个资源包有点大,需要耐心等待一下。完成后,下载示例数据集及训练代码。
! 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格式。
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
将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
准备额外模型文件。
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/')
在DSW中启动WebUI
执行如下命令,启动WebUI。
! 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页面。到这,我们已经完成了所有操作,成功完成了AIGC文生图模型微调训练及WebUI部署。接下来可以在WebUI页面,进行模型推理验证。如果这个步骤因为拉取资源频繁失败,其实还有一种方法可以实施,那就是DSW Gallery。进入方式有两种,第一种:在页面中输入Lora搜索,找到“AIGC Stable Diffusion文生图Lora模型微调实现虚拟上装”。第二种,可以直接在工作空间左侧的快速开始——Notebook Gallery。按照图示步骤挨个执行即可了,比起Notebook下的Python 3(ipykernel)要直观方便不少。
模型推理验证
正向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随机种子:1400244389CFG Scale:7使用高清修复
资源清理
登录PAI控制台,在工作空间页面的左侧导航栏选择模型开发与训练>交互式建模(DSW),进入交互式建模(DSW)页面。单击目标实例操作列下的停止,成功停止后即可停止资源消耗。也就是达到了资源清理的效果。如果你不再使用这个实例,可以继续点击更多进行删除。
体验总结
1、整个体验流程还是通畅的,但在某几个步骤时还是非常考验耐心的,由于需要从github拉取资源,而这个来源是存在网络时好时坏的,这块急需优化,非常影响体验。此外,由于参考的实验链接发布有点旧,里面使用到的资源链接都失效了,比如https://gitcode.net/mirrors/AUTOMATIC1111/stable-diffusion-webui.git,这个是404的。希望往后的体验能够及时修正这些细节。2、如果有产品试用,其实整个体验的费用还是可以抵扣的。如果是老用户,这块的体验费用就非常高了,因为前面提到的拉取资源会非常耗时,这就从侧面增加了体验费用,此外,训练模型需要的耗时也是挺高的,所以如果你是整个流程都认真体验下来,这块的费用还是挺高的,可以达到30元以上。非常期待后期的体验可以缩减这块费用,让更多感兴趣的小伙伴前来体验。而不是现在的这个情况,从已经发布的话题内容来看,没一个朋友是实际购买实例进行体验的,都是直接挪用了实验中的图或者之前文章中的图稍作修改得来的。3、非常建议类似这样需要搭建环境配置过程的话题,能否修改成一个专门的评测体验,一方面可以让更多优秀的作者加入体验,一方面可以很好地收集有关产品的建议和意见。4、既然作为一个话题拿出来讨论,就应该让整个体验过程变得简约,比如魔塔社区模型体验那般就非常适合。建议往后的话题讨论能够简化整体的流程,比如无需部署基础环境,开箱即用。5、加强与阿里云其他服务的整合,其实本次体验为了简化部署流程,是完全可以融合函数计算FC的。希望后期可以加强这方面的能力。
赞37
踩0