使用倚天CPU实例部署Stable Diffusion

本文介绍如何使用阿里云倚天云服务器(g8y)搭建Stable Diffusion模型,并基于fastsdcpu框架实现文本生成图片。

背景信息

稳定扩散(Stable Diffusion,简称SD)是一种人工智能模型,其工作原理是通过学习逐步将噪声数据转化为有意义的图像数据。这一过程包括两个主要阶段:首先是噪声化过程,即将真实图像逐步添加噪声直至变成纯噪声;然后是去噪过程,模型学习如何逆转这一过程,从噪声中恢复出清晰的图像。Stable Diffusion在图像生成领域取得了显著的成就,能够根据用户提供的文本描述生成高质量、高分辨率的图像。

倚天CPU实例g8y采用阿里云自研倚天710 ARM架构CPU,支持使用SVE指令加速AI任务,并针对SD模型提供优化的容器版本,充分发挥倚天实例的性能优势,对于不同尺寸的图片生成,性能平均提升约60%。

创建ECS实例

  1. 前往实例创建页

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

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

    • 实例:Stable Diffusion模型的推理过程需要耗费大量的计算资源,运行时占用大量内存,为了保证模型运行的稳定,实例规格的内存至少为16 GiB,本文选择ecs.g8y.4xlarge,您也可以根据需要,选择其他实例规格。

    • 镜像:Alibaba Cloud Linux 3.2104 LTS 64位 ARM版。

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

      image..png

  3. 添加安全组规则。

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

  4. 创建完成后,在ECS实例页面,获取公网IP地址。

    说明

    公网IP地址用于进行AI对话时访问WebUI服务。

    image

创建Docker运行环境

  1. 远程连接该ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 安装并启动Docker。

    具体操作,请参见在Alibaba Cloud Linux 3实例中安装Docker

  3. 获取并运行倚天优化后的容器。

    sudo docker pull acr-yu-yitian-tf-20240117-registry.cn-hangzhou.cr.aliyuncs.com/acr_hz_tf/pytorch_ptg_opt:v2.2.0
    sudo docker run --name fastsdcpu --network host --privileged=true -d -v /mnt/:/mnt/ -it acr-yu-yitian-tf-20240117-registry.cn-hangzhou.cr.aliyuncs.com/acr_hz_tf/pytorch_ptg_opt:v2.2.0 /bin/bash
    sudo docker exec -it fastsdcpu /bin/bash
    重要

    后续操作都需要在容器中运行,如果退出了容器,可以通过以下命令启动并再次进入容器的Shell环境。

    sudo docker start fastsdcpu
    sudo docker exec -it fastsdcpu /bin/bash

准备模型数据

  1. 在容器中安装依赖软件。

    yum install -y g++ git wget tar
  2. 创建并进入模型数据目录。

    mkdir /root/stable-diffusion/
    cd /root/stable-diffusion/
  3. 下载dreamshaper-8模型和lcm-lora-sdv1-5模型到/root/stable-diffusion/路径中。

    wget https://m-media-oss.oss-cn-hangzhou.aliyuncs.com/models/dreamshaper-8.tar.gz
    wget https://m-media-oss.oss-cn-hangzhou.aliyuncs.com/models/latent-consistency.tar.gz
    tar -zxvf dreamshaper-8.tar.gz
    tar -zxvf latent-consistency.tar.gz
  4. 下载v1.0.0-beta.23版本fastsdcpu项目代码。

    1. 下载v1.0.0-beta.23版本fastsdcpu,并进入项目目录。

      git clone https://github.com/rupeshs/fastsdcpu.git -b v1.0.0-beta.23
      cd fastsdcpu
    2. 在fastsdcpu目录中,安装依赖包。

      python -m venv env
      pip install transformers==4.36.0 accelerate==0.25.0 peft==0.7.1 pydantic==2.4.2 openvino==2023.2.0 optimum==1.14.0 optimum-intel==1.12.1 onnx==1.15.0 onnxruntime==1.16.1 gradio==3.39.0
    3. 将dreamshaper-8模型路径加入fastsdcpu的配置文件configs/stable-diffusion-models.txt中。

      sed -i '1i/root/stable-diffusion/dreamshaper-8' configs/stable-diffusion-models.txt
    4. 将lcm-lora-sdv1-5模型路径加入fastsdcpu的配置文件configs/lcm-lora-models.txt中。

      sed -i '1i/root/stable-diffusion/latent-consistency/lcm-lora-sdv1-5' configs/lcm-lora-m

启动并访问WebUI服务

  1. 依次执行以下命令,启动WebUI服务。

    cd /root/stable-diffusion/fastsdcpu  
    export TRANSFORMERS_OFFLINE=1   # 使用本地模型
    export GRADIO_SERVER_NAME=0.0.0.0  # 设置监听IP
    python src/app.py -w --use_offline_model --share  # 启动WebUI

    WebUI服务成功启动后,回显信息类似如下所示。

    image

  2. 在浏览器地址栏输入http://<ECS公网IP地址>:7860,进入Web页面。

    image

  3. 单击Mode区域中的LCM-LoRA页签,然后单击Models,在LCM LoRA model下拉框中选择配置好的lcm-lora-sdv1-5路径,在LCM LoRA base model下拉框中选择配置好的dreamshaper-8路径

    image

  4. Generation Settings页签中设置图片生成参数。

    image

  5. Text to Image中输入图片描述,点击Generate即可生成图片。

    image

    在命令行界面可查看图片生成时间。如下图所示,4步生成512*512的图片,仅需4.99秒。

    image