写点什么

阿里云 PAI-Diffusion 功能再升级,全链路支持模型调优,平均推理速度提升 75% 以上

  • 2023-02-08
    浙江
  • 本文字数:4920 字

    阅读完需:约 16 分钟

阿里云PAI-Diffusion功能再升级,全链路支持模型调优,平均推理速度提升75%以上

导读

随着 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 Image
img = 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-zhangjiakou.aliyuncs.com/wzh-zhoulou/dl_eas_processor/ch_ldm/ch_ldm_blade_220206/eas_model_20230206.tar.gz

当服务部署成功后,可以使用如下格式的 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/EasyNLP)支持全链路模型的调优和在线部署,使得用户能一键实现模型的调优,并且在阿里云 PAI 平台上便捷部署在线服务。此外,阿里云机器学习 PAI 团队也在持续推进中文多模态模型的自研工作,欢迎用户持续关注我们,也欢迎加入我们的开源社区,共建中文 NLP 和多模态算法库!


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

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

EasyNLP 阿里灵杰回顾

EasyNLP 是阿里云机器学习 PAI 团队基于 PyTorch 开发的易用且丰富的中文 NLP 算法框架,支持常用的中文预训练模型和大模型落地技术,并且提供了从训练到部署的一站式 NLP 开发体验。EasyNLP 提供了简洁的接口供用户开发 NLP 模型,包括 NLP 应用 AppZoo 和预训练 ModelZoo,同时提供技术帮助用户高效的落地超大预训练模型到业务。由于跨模态理解需求的不断增加,EasyNLP 也将支持各种跨模态模型,特别是中文领域的跨模态模型,推向开源社区,希望能够服务更多的 NLP 和多模态算法开发者和研究者,也希望和社区一起推动 NLP /多模态技术的发展和模型落地。


发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2020-10-15 加入

分享阿里云计算平台的大数据和AI方向的技术创新和趋势、实战案例、经验总结。

评论

发布
暂无评论
阿里云PAI-Diffusion功能再升级,全链路支持模型调优,平均推理速度提升75%以上_人工智能_阿里云大数据AI技术_InfoQ写作社区