首页 机器学习PAI 最佳实践 Diffusion文图生成解决方案

Diffusion文图生成解决方案

Diffusion文图生成解决方案基于阿里云机器学习PAI产品,帮助您快速搭建囊括模型离线训练和在线部署的端到端全链路构建流程,实现从文本生成图像的功能。本文为您介绍Diffusion文图生成解决方案的使用流程和操作步骤。

背景信息

阿里云机器学习PAI在文图生成创作领域,提供了端到端、多样化的纯白盒解决方案,目前已支持中文文图生成功能。您可以根据自己的业务场景自定义构建智能文图生成模型,或使用PAI提供的默认模型,进行模型调优和线上部署,针对不同的文本输入生成不同风格的图像。具体解决方案如下。

  1. 基于PAI提供的Diffusion模型和算法,根据您自己的文图生成场景,在PAI-DSW平台进行模型微调,从而构建具体场景的Diffusion文图生成模型。

  2. 您可以将微调生成的模型或PAI默认的Diffusion模型部署为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默认提供的模型部署为在线服务,具体操作步骤如下。

  1. 进入PAI EAS模型在线服务页面。
    1. 登录PAI控制台
    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
    3. 在工作空间页面的左侧导航栏选择模型部署 > 模型在线服务(EAS),进入PAI EAS模型在线服务页面。
  2. 推理服务页签,单击部署服务

  3. 部署服务页面,配置参数,并单击部署image

    将以下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

文本输入,支持输入中文或英文文本。

  • "一只猫在弹吉他"

  • "a painting of a virus monster playing guitar"

skip_translation

ARRAY[]

是否使用中翻英模型,取值如下:

  • False:当text为英文文本时,配置为True。

  • True:当text为中文文本时,配置为false。

False

num_inference_steps

INT

推理采样的步长。

50

num_images

INT

生成的图片数量。

3

服务返回参数说明如下。

参数名

类型

说明

text

STRING

输入的文本。

images_base64

ARRAY[]

生成的base64编码的图片。

success

BOOL

服务调用是否成功,取值如下:

  • True:调用成功。

  • False:调用失败。

error

STRING

  • 调用过程出错,则返回错误提示。

  • 调用过程无错误,则返回null。

方式二:使用微调的PAI-Diffusion模型

步骤一:准备数据

  1. 准备训练数据集和验证数据集。

    本文使用某个中文文图数据集的一个子集进行模型训练。训练数据集和验证数据集具体格式要求如下。

    需要准备的数据

    格式

    包含列

    数据集示例文件

    训练数据集

    TSV

    • 文本列

    • 图像列(base64编码)

    T2I_train.tsv

    验证数据集

    TSV

    • 文本列

    • 图像列(base64编码)

    T2I_val.tsv

  2. 将数据集上传至OSS Bucket,具体操作,请参见上传文件

步骤二:构建文图生成模型

  1. 进入DSW Gallery,详情请参见功能试用:DSW Gallery

  2. 深度学习页签的基于EasyNLP Diffusion模型的中文文图生成区域,单击在DSW中打开,并按照控制台操作指引构建文图生成模型,即Finetune模型。image

  3. 将训练好的模型及其他相关配置文件打包。

    将训练得到的模型,及其他配置文件打包为tar.gz格式,并且上传至用户的OSS Bucket。模型和配置的目录结构如下图所示。image

    您可以使用以下命令,将目录打包为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即为打包好的模型文件。

步骤三:部署及调用模型服务

  1. 部署模型服务。

    参照步骤一:部署服务,将以下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等卡型的资源组机器。

  2. 调用模型服务。

    参照步骤二:调用服务,调用Finetune模型服务。其中:text只支持中文文本输入;服务调用参数不支持配置skip_translation

阿里云首页 机器学习 相关技术圈