领取试用
本次体验使用到阿里云交互式建模(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 ..
若需更新最新版本,你可以点击下面的开源链接前往进行下载。
通过命令运行窗口可以直观看到当前进度。
这个资源包有点大,需要耐心等待一下。
完成后,下载示例数据集及训练代码。
! 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
随机种子:1400244389
CFG Scale:7
使用高清修复
资源清理
登录PAI控制台,在工作空间页面的左侧导航栏选择模型开发与训练>交互式建模(DSW),进入交互式建模(DSW)页面。单击目标实例操作列下的停止,成功停止后即可停止资源消耗。也就是达到了资源清理的效果。
如果你不再使用这个实例,可以继续点击更多进行删除。
体验总结
1、整个体验流程还是通畅的,但在某几个步骤时还是非常考验耐心的,由于需要从github拉取资源,而这个来源是存在网络时好时坏的,这块急需优化,非常影响体验。此外,由于参考的实验链接发布有点旧,里面使用到的资源链接都失效了,比如https://gitcode.net/mirrors/AUTOMATIC1111/stable-diffusion-webui.git,这个是404的。希望往后的体验能够及时修正这些细节。
2、如果有产品试用,其实整个体验的费用还是可以抵扣的。如果是老用户,这块的体验费用就非常高了,因为前面提到的拉取资源会非常耗时,这就从侧面增加了体验费用,此外,训练模型需要的耗时也是挺高的,所以如果你是整个流程都认真体验下来,这块的费用还是挺高的,可以达到30元以上。非常期待后期的体验可以缩减这块费用,让更多感兴趣的小伙伴前来体验。而不是现在的这个情况,从已经发布的话题内容来看,没一个朋友是实际购买实例进行体验的,都是直接挪用了实验中的图或者之前文章中的图稍作修改得来的。
3、非常建议类似这样需要搭建环境配置过程的话题,能否修改成一个专门的评测体验,一方面可以让更多优秀的作者加入体验,一方面可以很好地收集有关产品的建议和意见。
4、既然作为一个话题拿出来讨论,就应该让整个体验过程变得简约,比如魔塔社区模型体验那般就非常适合。建议往后的话题讨论能够简化整体的流程,比如无需部署基础环境,开箱即用。
5、加强与阿里云其他服务的整合,其实本次体验为了简化部署流程,是完全可以融合函数计算FC的。希望后期可以加强这方面的能力。