导读

随着Stable Diffusion模型在AI圈的爆火,AI生成内容(AI Generated Content,AIGC)的利用呈现出井喷式的增长趋势。其中,文图生成(Text-to-image Generation)工作是最风行的AIGC工作之一,旨在生成与给定文本对应的图像。在先前的工作中,阿里云机器学习PAI团队开源了PAI-Diffusion系列模型(看这里),包含一系列通用场景和特定场景的文图生成模型,例如新诗配图、二次元动漫、魔幻事实等。这些模型的Pipeline除了包含规范的Latent Diffusion Model,还集成了PAI团队先前提出的中文CLIP跨模态对齐模型(看这里),及图像超分模型,使得模型能够生成合乎中文文本形容的、各种场景下的高清大图。因为在特定场景下,用户往往有对这些中文Diffusion模型调优(Fine-tune)的需要,而且在线上部署方面,因为Diffusion模型推理速度比较慢,而且须要消耗较多的硬件资源。在本次的工作中,咱们在EasyNLP算法框架中,对先前提出的PAI-Diffusion模型性能进行降级,全链路反对模型调优。在模型推理方面,联合由PAI自主研发的编译优化工具 PAI-Blade,反对对PAI-Diffusion模型的端到端的导出和推理减速,在A10机器下做到了1s内的中文大图生成。

本⽂首先介绍如何体验PAI-Diffusion模型以及其在线部署、减速推理能力。其次,咱们简略回顾了PAI-Diffusion模型的架构,之后具体介绍了在EasyNLP算法框架中对上述模型进行调优的全链路反对。

轻松体验PAI-Diffusion模型

首先让咱们轻松体验PAI-Diffusion模型。

在线体验

PAI-Diffusion模型能够用于各种格调的艺术画的生成。这个模型的参数量仅10亿,应用一张P100 GPU显卡,就能够生成1024*1024的高清大图,示例如下。

咱们在AI模型开源社区ModelScope的创空间上线了咱们的一个PAI-Diffusion模型(体验链接),欢送宽广用户体验。

PAI-Diffusion模型架构回顾

咱们简略回顾一下PAI-Diffusion模型的技术架构。简略的说,PAI-Diffusion模型是面向中文的、基于隐式扩散模型(Latent Diffusion Model, LDM)的文图生成模型。因为中英文在文化和表白上具备很大的差异性,产出的模型通常无奈建模中文特有的景象。PAI-Diffusion模型由阿里云机器学习(PAI)团队公布并开源,除了能够用于通用文图生成场景,还具备一系列特定场景的定制化中文Diffusion模型,包含新诗配图、二次元动漫、魔幻事实等。PAI-Diffusion的模型Pipeline架构,包含中文CLIP模型、Diffusion模型、图像超分模型等:

具体地说,中文CLIP模型把中文文本输出转化成 Embedding 向量,咱们采纳EasyNLP中文CLIP跨模态对齐模型(看这里)的Text Transformer作为Text Encoder。咱们把中文CLIP模型的输入作为LDM的输出,训练模型生成文本对应的图片。可选地,PAI-Diffusion模型链路中还集成了ESRGAN作为图像超分模型,晋升图片的分辨率。

PAI-Diffusion模型减速推理技术

PAI-Blade 采纳多种模型编译优化技术,能够对基于Tensorflow/Pytorch 训练的模型进行推理优化减速。

针对基于PAI-EasyNLP的 PAI-Diffusion模型 和社区的Stable-Diffusion模型的推理进行测速剖析,针对推理的次要局部,引入了编译优化和flashattention的推理减速技术,胜利将整个推理链路均匀提速75%以上,具体减速比视推理步数略有不同,具体能够参考下表(测试推理机器 Nvidia-A10,输入图片分辨率 512x512):

综上能够看到, 引入PAI自主研发的模型推理减速工具Blade 能大幅度晋升DiffusionModel的推理速度,升高服务提早,节俭计算资源。

PAI-Diffusion模型的微调和微调后模型部署

在本次更新中,咱们在PAI-EasyNLP算法框架对PAI-Diffusion模型的调优做了全面反对。咱们介绍如何在PAI-Diffusion模型的训练流程,以及如何在PAI的产品中部署上述微调后的模型用于在线服务。

装置EasyNLP

用户能够间接参考链接的阐明装置EasyNLP算法框架。

数据筹备

首先筹备训练数据与验证数据,为tsv文件。这⼀⽂件蕴含以制表符\t分隔的三列(idx, text, imgbase64),第一列是文本编号,第二列是文本,第三列是对应图片的base64编码。样例如下:

64b4109e34a0c3e7310588c00fc9e157    韩国可恶日系袜子女中筒袜春秋薄款纯棉学院风街头卡通兔子长袜潮  iVBORw0KGgoAAAAN...MAAAAASUVORK5CYII=

为了不便开发者,咱们也提供了转换图片到base64编码的示例代码:

import base64from io import BytesIOfrom PIL import Imageimg = Image.open(fn)img_buffer = BytesIO()img.save(img_buffer, format=img.format)byte_data = img_buffer.getvalue()base64_str = base64.b64encode(byte_data) # bytes

下列文件曾经实现预处理,可用于测试:

# trainhttps://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/painter_text2image/T2I_train.tsv# validhttps://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/painter_text2image/T2I_val.tsv# testhttps://atp-modelzoo-sh.oss-cn-shanghai.aliyuncs.com/release/tutorials/painter_text2image/T2I_test.tsv

模型微调

咱们采纳以下命令对PAI-Diffusion模型进行fine-tune:

easynlp \    --mode=train \    --worker_gpu=1 \    --tables=T2I_train.tsv,T2I_val.tsv \    --input_schema=idx:str:1,text:str:1,imgbase64:str:1 \    --first_sequence=text \    --second_sequence=imgbase64 \    --checkpoint_dir=./finetuned_model \    --learning_rate=4e-5 \    --epoch_num=3 \    --random_seed=42 \    --logging_steps=100 \    --save_checkpoint_steps=1000 \    --sequence_length=288 \    --micro_batch_size=16 \    --app_name=latent_diffusion \    --user_defined_parameters='        pretrain_model_name_or_path=alibaba-pai/pai-diffusion-general-large-zh    reset_model_state_flag=True      ' 

训练实现后模型被保留到./finetune_model/。

模型离线推理

模型训练结束后,咱们能够将其用于图片的生成,示例如下:

easynlp \      --mode=predict \      --worker_gpu=1 \      --tables=T2I_test.tsv \      --input_schema=idx:str:1,text:str:1 \      --output_schema=text \      --outputs=./output.tsv \      --first_sequence=text \      --checkpoint_dir=./finetuned_model \      --random_seed=42 \      --logging_steps=100 \      --save_checkpoint_steps=500 \      --sequence_length=32 \      --micro_batch_size=16 \      --app_name=latent_diffusion \      --user_defined_parameters='          n_samples=2      write_image=True      image_prefix=./output/      '

间接在线部署

用户能够应用PAI-EAS自定义服务部署形式,应用如下config部署咱们曾经打包好的相干processor进行服务部署即可。咱们提供了一个测试模型以供体验模型的推理速度,部署在A10/T4/V100 GPU的config参考如下,您须要将resource字段替换成本人的资源组:

{    "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,        "name": "ch_ldm_easynlp",        "resource": "请替换成本人的资源组",        "rpc": {            "keepalive": 50000,            "worker_threads": 5        }    },    "model_path": "http://pai-vision-exp.oss-cn-zhangjiakou.aliyuncs.com/wzh-zhoulou/dl_eas_processor/ch_ldm/ch_ldm_blade_220206/eas_model_20230206_noblade.tar.gz",    "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": "ch_ldm_easynlp"} 

如果您须要体验Blade优化后的推理速度,能够在A10 GPU中进行部署,用户须要将上述model_path的值替换为http://pai-vision-exp.oss-cn-...。

当服务部署胜利后,能够应用如下格局的request body进行测试:

{    "text": "测试文本",    "num_inference_steps": 20,    "num_images": 1}

在线服务返回示例如下:

{    "text": "测试文本",    "images_base64": ["...", "...", ...]}

images_base64字段返回生成图像的base64编码,生成图像数量由request body中的参数指定。

微调后部署

用户也能够应用EasyNLP进行微调训练后部署,须要将如下训练后的ckpt 打包替换下面json中的model_path字段:

打包命令示例如下:

cd finetuned_model/tar czf finetuned_model.tar.gz config.json pytorch_model.bin RRDB_ESRGAN_x4.pth vocab.txt

而后,采纳前述config 将模型部署到PAI-EAS,倡议应用的GPU型号为A10/T4/V100。

如果用户须要应用Blade 减速,反对应用A10/A100 GPU机器资源进行部署,请分割咱们获取Blade相干教程。

将来瞻望

在这一期的工作中,咱们对PAI-Diffusion模型的性能进行重大降级,在EasyNLP框架中(https://github.com/alibaba/Ea...)反对全链路模型的调优和在线部署,使得用户能一键实现模型的调优,并且在阿里云PAI平台上便捷部署在线服务。此外,阿里云机器学习PAI团队也在继续推动中文多模态模型的自研工作,欢送用户继续关注咱们,也欢送退出咱们的开源社区,共建中文NLP和多模态算法库!

Github地址:https://github.com/alibaba/Ea...

Reference

  1. Chengyu Wang, Minghui Qiu, Taolin Zhang, Tingting Liu, Lei Li, Jianing Wang, Ming Wang, Jun Huang, Wei Lin. EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing. EMNLP 2022
  2. Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, Björn Ommer. High-Resolution Image Synthesis with Latent Diffusion Models. CVPR 2022
  3. Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever. Learning Transferable Visual Models From Natural Language Supervision. ICML 2021
  4. Dao T, Fu D Y, Ermon S, et al. Flashattention: Fast and memory-efficient exact attention with io-awareness. arXiv preprint arXiv:2205.14135, 2022

原文链接

本文为阿里云原创内容,未经容许不得转载。