Diffusion中文文图生成解决方案基于阿里云PAI产品,帮助您快速搭建囊括模型离线训练和在线部署的端到端全链路构建流程,实现从文本生成图像的功能。本文为您介绍Diffusion中文文图生成解决方案的使用流程和操作步骤。
背景信息
阿里云PAI在文图生成创作领域,提供了端到端、多样化的纯白盒解决方案,目前已支持中文文图生成功能。您可以根据自己的业务场景自定义构建智能文图生成模型,或使用PAI提供的默认Diffusion模型,进行模型调优和线上部署,针对不同的文本输入生成不同风格的图像。具体解决方案如下。
基于PAI提供的Diffusion模型和算法,根据您自己的文图生成场景,在DSW平台进行模型微调,从而构建具体场景的Diffusion文图生成模型。
您可以将微调生成的模型或PAI默认的Diffusion模型部署为EAS在线服务,然后调用模型服务将输入文本生成对应的图像。
使用流程
该解决方案的使用流程如下:
首先在DSW平台,准备PAI-Diffusion模型文件,并将模型文件上传到OSS指定的存储路径中。
在DSW平台,使用Diffusion模型微调NoteBook构建中文文图生成模型。
通过模型在线服务EAS,您可以将PAI默认的Diffusion模型或训练好的中文文图生成模型部署为在线服务,并在实际的生产环境中调用服务,从而实现在线生成图像。
前提条件
在开始执行操作前,请确认您已完成以下准备工作:
已开通PAI(DSW、EAS)后付费,并创建默认工作空间,详情请参见开通并创建默认工作空间。
已创建OSS存储空间(Bucket),用于存储数据集、训练获得的模型文件和配置文件。关于如何创建存储空间,详情请参见创建存储空间。
已创建DSW实例且运行正常,详情请参见创建DSW实例。
资源规格:选择ecs.gn6v-c8g1.2xlarge。
镜像:在官方镜像中选择
pytorch-develop:1.12-gpu-py39-cu113-ubuntu20.04
。
步骤一:准备模型文件
进入PAI-DSW开发环境。
登录PAI控制台。
在页面左上方,选择DSW实例所在的地域。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击默认工作空间名称,进入对应工作空间内。
在左侧导航栏,选择模型开发与训练>交互式建模(DSW)。
单击需要打开的实例操作列下的打开,进入PAI-DSW实例开发环境。
在Notebook页签的Launcher页面,单击快速开始区域Tool下的DSW Gallery,打开DSW Gallery页面。
在DSW Gallery页面中,搜索并找到基于Diffusion模型的中文文图生成教程,单击教程卡片中的在DSW中打开。
单击后即会自动将本教程所需的资源和教程文件下载至DSW实例中,并在下载完成后自动打开教程文件。
在打开的教程文件diffusion.ipynb中,单击运行
按钮,执行下载模型操作步骤。当左侧为
时,表明成功运行结束。
将模型文件上传到OSS Bucket存储空间。
在OSS Bucket存储空间中分别创建存储目录
aigc_models/pai-diffusion-art-large-zh/base_model/
和aigc_models/pictures/
。具体操作,请参见管理目录。其中:
base_model
子文件夹下存放模型的基础Checkpoint;pictures
子文件夹下存储模型输出的图像。在DSW中,切换到Terminal页签,安装ossutil并完成配置。具体操作,请参见安装ossutil。
在DSW的Terminal中,执行以下命令将模型文件上传到OSS Bucket存储空间,更多详细内容,请参见命令行工具ossutil快速入门。
cd /mnt/workspace/demos/diffusion ossutil64 cp -r pai-diffusion-artist-large-zh/ oss://<examplebucket>/aigc_models/pai-diffusion-art-large-zh/base_model/
其中:<examplebucket>需要替换为您的实际OSS Bucket存储空间名称。
模型文件上传到OSS Bucket存储空间的目录结构如下:
步骤二(可选):微调PAI-Diffusion模型
如果您直接部署PAI提供的默认Diffusion模型来体验其效果,可跳过以下操作步骤。如果您使用微调后的Diffusion模型部署服务,则需要执行以下操作步骤:
在通过DSW的Notebook打开的教程文件diffusion.ipynb中,直接运行以下操作步骤对应的命令,当成功运行结束一个步骤命令后,再顺次运行下个步骤的命令。
需要执行的操作步骤如下:
安装依赖。
数据下载。
训练脚本。
训练微调。
上述步骤执行成功后,会在
./demos/diffusion/mymodel
目录下生成模型文件pytorch_lora_weights.bin。将获取的模型文件上传到OSS Bucket存储空间。
步骤三:部署及调用模型服务
部署服务
具体操作步骤如下。
进入模型在线服务(EAS)页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应的工作空间。
在工作空间页面的左侧导航栏选择 ,进入模型在线服务(EAS)页面。
在模型在线服务(EAS)页面,单击部署服务,在自定义模型部署区域,单击JSON独立部署。
将以下JSON文件内容粘贴到JSON编辑框中,修改相应配置后,单击部署。
{ "cloud": { "computing": { "instance_type": "ecs.gn7i-c16g1.4xlarge" } }, "containers": [ { "command": "python /home/pai/app.py --oss_save_dir oss://examplebucket/aigc_models/pictures/ --region hangzhou --func_name base", "image": "eas-registry-vpc.<RegionID>.cr.aliyuncs.com/pai-eas/diffuser-inference:2.2.1-py38-cu113-unbuntu2004-blade-public-zh", "port": 8000 } ], "features": { "eas.aliyun.com/extra-ephemeral-storage": "100Gi" }, "metadata": { "cpu": 16, "gpu": 1, "instance": 1, "memory": 60000, "name": "sd_chinese", "rpc": { "keepalive": 500000 } }, "name": "sd_chinese", "storage": [ { "mount_path": "/oss", "oss": { "path": "oss://examplebucket/aigc_models/pai-diffusion-art-large-zh/" }, "properties": { "resource_type": "code" } }, { "mount_path": "/result", "oss": { "path": "oss://examplebucket/aigc_models/pictures/" }, "properties": { "resource_type": "code" } } ] }
其中:
containers.command:
--oss_save_dir:配置为您实际的输出结果路径。本方案使用的示例路径为
oss://examplebucket/aigc_models/pictures/
。--region:配置为服务即将部署的地域。例如:华东1(杭州)配置为hangzhou。
containers.image:将镜像地址中的<RegionID>替换为服务即将部署的地域。例如:华东1(杭州)配置为cn-hangzhou。更多详细内容,请参见地域和可用区。
name:需要替换为您自己的服务名称。
storage.oss.path:分别替换为步骤一中创建的OSS存储路径。包括模型存储路径和输出结果路径。本方案中使用的路径示例为:
oss://examplebucket/aigc_models/pai-diffusion-art-large-zh/
和oss://examplebucket/aigc_models/pictures/
。
调用服务
获取服务访问地址和Token。
在模型在线服务(EAS)页面,单击目标服务的服务方式列下的调用信息。
在公网地址调用页签获取服务访问地址和Token。
在终端中,执行如下Python代码调用服务,来验证模型效果。
Python代码示例如下:
import json import requests import base64 from io import BytesIO from PIL import Image hosts = '<service_URL>' head = {"Authorization": "<service_Token>"} datas = json.dumps({ "task_id" : "001", "prompt": "一只小猫咪", "negative_prompt": "", "cfg_scale": 7, "steps": 25, "image_num": 1, "width": 512, "height": 512, "use_base64": True, # "lora_attn": 0.75, # "lora_path": 'lora_model/pytorch_lora_weights.bin' }) r = requests.post(hosts, data=datas, headers=head) data = json.loads(r.content.decode('utf-8')) if data['success']: images_base64 = data["images_base64"] print("text: " + data["prompt"]) print("num_images:" + str(len(images_base64))) print(data) else: print(data['error_msg'])
其中:
<service_URL>:需要替换为步骤1获取的服务访问地址。
<service_Token>:需要替换为步骤1获取的服务Token。
datas传入参数(即服务调用参数)说明如下:
说明仅调用微调的Diffusion模型服务时,需要配置lora_attn和lora_path。
参数名
是否必填
类型
说明
默认值
task_id
是
STRING
任务ID。
无
prompt
是
STRING
用户输入的正向提示词。
无
negative_prompt
否
STRING
用户输入的反向提示词。
默认为空
steps
否
INT
用户输入的步数。
25
cfg_scale
否
INT
引导强度。
7
width
否
INT
生成图片宽度。
512
height
否
INT
生成图片高度。
512
image_num
否
INT
生成的图片数量。
1
resize_mode
否
INT
调整生成图片的缩放方式:
0:拉伸。
1:裁剪。
2:填充。
0
use_base64
否
BOOL
是否返回图像的Base64编码。
True
lora_attn
否
FLOAT
LoRA使用的比例。
0.75
lora_path
是
STRING
需要更新的LoRA权重在OSS挂载路径的相对位置。
在示例代码中,因为已将LoRA权重上传到OSS Bucket存储空间,路径为
oss://examplebucket/aigc_models/pai-diffusion-art-large-zh/lora_model/pytorch_lora_weights.bin
。由于在EAS部署过程中已经挂载了OSS模型路径oss://examplebucket/aigc_models/pai-diffusion-art-large-zh
,则LoRA权重的相对路径为lora_model/pytorch_lora_weights.bin
。无
代码执行成功后,返回结果示例如下:
text: 一只小猫咪 num_images:1 {'success': 1, 'task_id': '001', 'prompt': '一只小猫咪', 'seed': '7957812204****23925', 'image_url': ['https://examplebucket.oss-cn-hangzhou.aliyuncs.com/aigc_models/pictures/result/001_20240612_020824_55.png'], 'oss_url': ['oss://examplebucket/aigc_models/pictures/result/001_20240612_020824_55.png'], 'is_nsfw': [True], 'images_base64': ['iVBORw0KGgoAAA****gAAAgAAAAIACAIAAAB7GkOtAAADEUlEQVR4nO3BgQAAAADDoPlTX-EAVQEAA****AMBvArQAAVkUTe8AAAAASUVORK5CYII='], 'use_blade': False}
其中关键参数说明如下:
参数名
类型
说明
success
INT
是否成功:
0:失败 。
1:成功。
task_id
STRING
任务ID。
seed
STRING
生成图像的种子。
image_url
LIST
生成图像的公网可访问链接。仅当OSS Bucket读写权限为公共读写时才有效。
oss_url
LIST
生成图像的OSS地址。
images_base64
LIST
生成的图像列表,Base64编码。
error_msg
STRING
失败原因。只有当success为0时才返回错误信息。
服务调用成功后,会在OSS的输出结果路径(
oss://examplebucket/aigc_models/pictures/
)中生成图片。您的路径和输出结果以实际为准。调用PAI默认Diffusion模型服务,返回如下结果:
调用微调的模型服务,返回如下结果:
相关文档
在调试模型时,文生图的配置主要包括提示词(prompt)、反向提示词(negative_prompt)等参数。您可以根据业务需要调整这些参数,以获得更好的效果。具体操作,请参见基于PAI产品的虚拟上装解决方案。
更多关于EAS产品的内容介绍,请参见模型在线服务(EAS)。
更多关于DSW产品的内容介绍,请参见交互式建模(DSW)。
关于使用EAS和DSW产品时相关的计费说明,请参见模型在线服务(EAS)计费说明和交互式建模(DSW)计费说明。