当前位置:首页|资讯|Stable Diffusion|提示词|艺术

使用基于英特尔CPU的g8i实例加速Stable Diffusion推理

作者:英特尔技术汇发布时间:2024-03-12

本文介绍如何使用基于Intel CPU的g8i实例,以DreamShaper8_LCM(基于Stable Diffusion v1-5微调后得到的模型)模型为例,结合系统级优化及IPEX技术加速文生图模型的推理速度,在Intel CPU云服务器上搭建高效的文生图服务。

 

 

01

背景信息

 

 

Stable Diffusion模型
 

Stable Diffusion模型是文本到图像的潜在扩散模型,它可以根据文本提示词生成对应的图像,目前已经可以应用于包括计算机视觉、数字艺术、视频游戏等多种领域和场景。为了更好的用户体验,我们期望能获得在几秒钟内生成高质量图像的能力。这种秒级生成图像的能力可用于许多场景,如2C的应用程序、营销和媒体领域的内容生成,或生成合成数据以扩充数据集。

阿里云第八代企业级实例g8i

 

阿里云第八代企业级通用计算实例g8i采用CIPU+飞天技术架构,搭载最新的Intel第五代至强可扩展处理器(代号EMR),性能进一步提升。同时,ECS g8i实例拥有AMX加持的AI能力增强,拥有AI增强和全面安全防护的两大特色优势。更多信息,请参见通用型实例规格族g8i。

IPEX

 

Intel® Extension for PyTorch(IPEX)是由Intel开源并维护的一个PyTorch扩展库,使用IPEX可以充分利用英特尔CPU上的硬件加速功能,包括AVX-512、矢量神经网络指令(Vector Neural Network Instructions,AVX512 VNNI)以及先进矩阵扩展 (AMX),大幅度提升了使用PyTorch在Intel处理器上运行AI应用,尤其是深度学习应用的性能。Intel正不断为PyTorch贡献IPEX的优化性能,为PyTorch社区提供最新的Intel硬件和软件改进。更多信息,请参见IPEX。

 

 

02

部署并加速文生图服务

 

准备环境与模型

 1创建ECS实例

a.前往实例创建页。

b.按照界面提示完成参数配置,创建一台ECS实例。

   需要注意的参数如下,其他参数的配置,请参见自定义购买实例。

     

*实例:为了保证模型运行的稳定,建议实例规格至少选择ecs.g8i.4xlarge(16 vCPU)。

*镜像:Alibaba Cloud Linux 3.2104 LTS 64位。

*公网IP:选中分配公网IPv4地址,带宽计费模式选择按使用流量,带宽峰值设置为100 Mbps。以加快模型下载速度。

*系统盘:模型数据下载、转换和运行过程中需要较大存储空间,为了保证模型顺利运行,建议系统盘设置为100 GiB。


 

c.添加安全组规则。

   在ECS实例安全组的入方向添加安全组规则并放行22端口(用于访问SSH服务)。具体操作,请参见添加安全组规则。

 

 

 2 下载并安装Anaconda

 

a.运行如下命令,下载Anaconda安装脚本。


wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh

 

 

b.运行如下命令,安装Anaconda安装脚本。


bash Anaconda3-2023.09-0-Linux-x86_64.sh

 

 

安装过程中会出现确认安装协议、初始化conda到当前Shell中,请按以下操作执行。

出现Please,press ENTER to continue时,按一下Enter键。

多次按Enter键,出现Do you accept the license terms? [yes/no]时,输入yes。

出现如下图所示时,按Enter将conda安装到当前目录,或输入您想要安装conda的目录。

出现You can undo this by running 'conda init --reverse $SHELL'? [yes/no]时,输入yes。

出现Thank you for installing Anconda时,说明Anconda已安装完成。

 

c.执行如下命令,使Anaconda相关的环境变量生效。


source ~/.bashrc

 

 

 

 

 3 创建一个包含Transformers、Diffusers、Accelerate、PyTorch以及IPEX库的虚拟环境。

     

     4

     

    使用huggingface-cli下载预训练模型Lykon/dreamshaper-8-lcm。

     

    运行模型

     1 创建ds8_lcm_pipe.py。

    执行如下命令,创建并打开ds8_lcm_pipe.py。


    vim ds8_lcm_pipe.py

     

    该脚本用于测试单张图像生成的平均时延,在脚本中输入以下两部分内容:

    基准测试函数,用于统计单张图像生成的平均时延。


    用默认的float32数据类型构建一个StableDiffusionPipeline。


    ds8_lcm_pipe.py脚本的完整内容如下:


     2 使用jemalloc优化图片生成速度。

    图像生成是一种内存密集型操作,通过安装高性能内存分配库,能够加速内存操作并使之能在CPU之间并行处理。jemalloc和tcmalloc是两个常用的内存优化库。此处使用jemalloc,jemalloc可以用于针对特定工作负载进行调优,如最大化CPU利用率。更多信息,请参见 jemalloc调优指南。

     

    a.安装jemalloc并设置环境变量。

    重要

    export CONDA_LOCATION后的/path_to_your_conda_environment_location请设置为实际的Anaconda安装路径。


     

    b.安装jemalloc并设置环境变量。

    重要

    OMP_NUM_THREADS后的数字请修改为当前实例的物理CPU核数。


     

     3 安装numactl并运行ds8_lcm_pipe.py脚本。


     

    执行结果如下,表示单张图片生成速度约为21 S。


     

    加速图片生成速度
     

    为了更好地发挥EMR CPU性能,可以将IPEX优化应用到pipeline的每个模块,并使用bfloat16数据类型。

     1 执行如下命令,打开ds8_lcm_pipe.py脚本。

     

    对ds8_lcm_pipe.py进行如下修改。

    使用IPEX优化pipeline的每个模块。

    对于StableDiffusionPipeline,需要将IPEX优化应用到pipeline的每个模块,优化点包括将数据格式转换为channels-last格式、调用ipex.optimize函数并使用TorchScript mode等。Intel已将该优化pipeline提交pull request到diffusers库,作为一个custom_pipeline可以直接被客户调用。具体优化细节,请参见Stable Diffusion on IPEX。

    在使用层面,需要做的代码修改非常简单:

    • 在load pipe时配置

    custom_pipeline="stable_diffusion_ipex"。

    • 对custom_pipeline调用prepare_for_ipex函数。

    优化EMR CPU上的AMX加速器

    为了利用EMR CPU上的AMX 加速器,可以借助Automatic Mixed Precision Package使用bfloat16数据类型。

     

     

    修改后的ds8_lcm_pipe.py脚本内容如下:


     3 按Esc键,输入:wq,按Enter键,退出并保存脚本。
     


     

     4 运行ds8_lcm_pipe.py脚本。


    numactl -C 0-15 python ds8_lcm_pipe.py

     

    执行结果如下,表示单张图片生成速度约为7 S。

     

     

     

     

     



    Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1