Diffusion文图生成解决方案
Diffusion文图生成解决方案基于阿里云机器学习PAI产品,帮助您快速搭建囊括模型离线训练和在线部署的端到端全链路构建流程,实现从文本生成图像的功能。本文为您介绍Diffusion文图生成解决方案的使用流程和操作步骤。
背景信息
阿里云机器学习PAI在文图生成创作领域,提供了端到端、多样化的纯白盒解决方案,目前已支持中文文图生成功能。您可以根据自己的业务场景自定义构建智能文图生成模型,或使用PAI提供的默认模型,进行模型调优和线上部署,针对不同的文本输入生成不同风格的图像。具体解决方案如下。
基于PAI提供的Diffusion模型和算法,根据您自己的文图生成场景,在PAI-DSW平台进行模型微调,从而构建具体场景的Diffusion文图生成模型。
您可以将微调生成的模型或PAI默认的Diffusion模型部署为PAI-EAS在线服务,将输入文本生成对应图像。
该解决方案支持以下两种使用方式:
直接将PAI默认的模型部署为PAI-EAS在线服务,并调用模型服务进行在线调试。
在文图生成解决方案中,微调并且部署PAI-Diffusion模型的使用流程如下。
将训练数据集和验证数据集上传到OSS Bucket中,用于后续的文图生成模型训练。
在PAI-DSW平台,使用文图生成模型微调NoteBook,构建文图生成模型。
通过模型在线服务PAI-EAS,您可以将训练好的文图生成模型部署为在线服务,并在实际的生产环境调用,从而实现在线生成图像。
前提条件
在开始执行操作前,请确认您已完成以下准备工作:
已开通PAI(Designer、DSW、EAS)后付费,并创建默认工作空间,详情请参见开通并创建默认工作空间。
已创建OSS存储空间(Bucket),用于存储数据集、训练获得的模型文件和配置文件。关于如何创建存储空间,详情请参见创建存储空间。
(可选)已创建DSW实例且运行正常,详情请参见创建及管理DSW实例。
已创建PAI-EAS专属资源组,用于部署训练好的模型。关于如何创建专属资源组,详情请参见使用专属资源组。
当使用PAI默认的Diffusion模型部署服务时,需要创建A10或A100卡型的资源组机器。
当使用微调后的Finetune模型部署服务时,需创建T4、V100、A10或A100等卡型的资源组机器。
方式一:使用PAI-Diffusion模型
步骤一:部署服务
如果您希望直接部署PAI-Diffusion模型,可以将PAI默认提供的模型部署为在线服务,具体操作步骤如下。
- 进入PAI EAS模型在线服务页面。
- 登录PAI控制台。
- 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
- 在工作空间页面的左侧导航栏选择 ,进入PAI EAS模型在线服务页面。
在推理服务页签,单击部署服务。
在部署服务页面,配置参数,并单击部署。
将以下JSON文件内容粘贴到对应配置编辑下的文本框中。
{ "name": "<替换为您自己的服务名称>", "processor_entry": "./app.py", "processor_path": "https://pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com/wzh-zhoulou/dl_eas_processor/ldm_0117/eas_code_230116_v3.tar.gz", "model_path": "https://pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com/wzh-zhoulou/dl_eas_processor/ldm_0117/eas_model_230116.tar.gz", "data_image": "registry.cn-shanghai.aliyuncs.com/pai-ai-test/eas-service:ch2en_ldm_v002", "metadata": { "resource": "<在控制台选择您使用的资源组>", "instance": 1, "memory": 50000, "cuda": "11.4", "gpu": 1, "rpc.worker_threads": 5, "rpc.keepalive": 50000 }, "processor_type": "python", "baseimage": "registry.cn-shanghai.aliyuncs.com/eas/eas-worker-amd64:0.6.8" }
其中:
name:需要替换为您自己的服务名称,您可以直接在控制台模型服务信息区域修改该参数。
resource:需要替换为您自己的资源组,您可以直接在控制台资源部署信息区域修改该参数。
说明需要使用A10或A100卡型的资源组机器。
步骤二:调用服务
服务提供RESTful API,具体的Python调用示例如下。
import json
import sys
import requests
import base64
from io import BytesIO
from PIL import Image
import os
from PIL import PngImagePlugin
hosts = '<替换为您的服务调用地址>' # 服务地址,可以在目标服务服务方式列下的调用信息中获取。
head = {
"Authorization": "<替换为您的服务Token>" # 服务鉴权信息,可以在目标服务服务方式列下的调用信息中获取。
}
def decode_base64(image_base64, save_file):
img = Image.open(BytesIO(base64.urlsafe_b64decode(image_base64)))
img.save(save_file)
datas = json.dumps({
"text": "一只猫在弹吉他",
"skip_translation": False,
"num_inference_steps": 20,
"num_images": 1,
"use_blade": True,
}
)
r = requests.post(hosts, data=datas, headers=head)
data = json.loads(r.content.decode('utf-8'))
text = data["text"]
images_base64 = data["images_base64"]
success = data["success"]
error = data["error"]
print("text: " + text)
print("num_images:" + str(len(images_base64)))
decode_base64(images_base64[0], "./decode_ldm_base64.png")
其中服务调用参数配置如下。
参数名 | 类型 | 说明 | 默认值 |
text | STRING | 文本输入,支持输入中文或英文文本。 |
|
skip_translation | ARRAY[] | 是否使用中翻英模型,取值如下:
| False |
num_inference_steps | INT | 推理采样的步长。 | 50 |
num_images | INT | 生成的图片数量。 | 3 |
服务返回参数说明如下。
参数名 | 类型 | 说明 |
text | STRING | 输入的文本。 |
images_base64 | ARRAY[] | 生成的base64编码的图片。 |
success | BOOL | 服务调用是否成功,取值如下:
|
error | STRING |
|
方式二:使用微调的PAI-Diffusion模型
步骤一:准备数据
准备训练数据集和验证数据集。
本文使用某个中文文图数据集的一个子集进行模型训练。训练数据集和验证数据集具体格式要求如下。
需要准备的数据
格式
包含列
数据集示例文件
训练数据集
TSV
文本列
图像列(base64编码)
验证数据集
TSV
文本列
图像列(base64编码)
将数据集上传至OSS Bucket,具体操作,请参见上传文件。
步骤二:构建文图生成模型
进入DSW Gallery,详情请参见功能试用:DSW Gallery。
在深度学习页签的基于EasyNLP Diffusion模型的中文文图生成区域,单击在DSW中打开,并按照控制台操作指引构建文图生成模型,即Finetune模型。
将训练好的模型及其他相关配置文件打包。
将训练得到的模型,及其他配置文件打包为tar.gz格式,并且上传至用户的OSS Bucket。模型和配置的目录结构如下图所示。
您可以使用以下命令,将目录打包为tar.gz格式。
cd finetuned_model/ tar czf finetuned_model.tar.gz config.json pytorch_model.bin RRDB_ESRGAN_x4.pth vocab.txt
finetuned_model.tar.gz即为打包好的模型文件。
步骤三:部署及调用模型服务
部署模型服务。
参照步骤一:部署服务,将以下JSON文件内容粘贴到对应配置编辑下的文本框中,并部署Finetune模型服务。
{ "baseimage": "registry.cn-shanghai.aliyuncs.com/eas/eas-worker-amd64:0.6.8", "data_image": "registry.cn-shanghai.aliyuncs.com/pai-ai-test/eas-service:ch_ldm_v100", "metadata": { "cpu": 15, "gpu": 1, "instance": 1, "memory": 50000, "resource": "<请替换成自己的资源组>", "rpc": { "keepalive": 50000, "worker_threads": 5 } }, "model_path": "<请替换成finetune后打包并上传到OSS的模型文件>", "processor_entry": "./app.py", "processor_path": "http://pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com/wzh-zhoulou/dl_eas_processor/ch_ldm/ch_ldm_blade_220206/eas_processor_20230206.tar.gz", "processor_type": "python", "name": "<自己的服务名称>" }
其中:
model_path:需要替换为已打包的模型文件在OSS Bucket的存储路径。
name:需要替换为您自己的服务名称,您可以直接在控制台模型服务信息区域修改该参数。
resource:需要替换为您自己的资源组,您可以直接在控制台资源部署信息区域修改该参数。
说明Finetune模型支持使用T4、V100、A10、A100等卡型的资源组机器。
调用模型服务。
参照步骤二:调用服务,调用Finetune模型服务。其中:text只支持中文文本输入;服务调用参数不支持配置skip_translation。