使用SD- WebUI容器镜像快速将文本生成图像

Stable Diffusion WebUI(以下简称SD-WebUI)通过DeepGPU工具(例如AIACC Deepytorch)加速了模型的计算和推理性能,您无需深入了解复杂的机器学习模型推理优化细节,便可开箱即用。对于需要文本生成图像的业务场景,在GPU实例上部署SD-WebUI容器镜像后可以提供更快的计算速度和更高的推理性能。本文为您介绍如何在GPU实例上部署SD-WebUI容器镜像来快速将文本生成图像。

背景信息

SD-WebUI是一个基于Gradio库的浏览器界面,用于使用Stable Diffusion生成图像,提供了一个简单易用的界面,可以让您快速将文本生成图像。SD-WebUI的优点:

  • 相比Pytorch+xformer方案,在FP16精度下使用SD-WebUI进行模型的推理优化具有更好的性能,其加速性能提升1.5~4.0倍。

  • 相比预编译优化方案,使用SD-WebUI进行模型的推理优化具有更好的灵活性,具有线上免编译、高效切换等特性。

  • 支持Controlnet/Lora等功能的优化和热插拔,可以获得更高的推理性能和更快的文生图体验。

关于Stable Diffusion的更多信息,请参见Stable Diffusion

重要
  • 阿里云不对第三方模型Stable Diffusion的合法性、安全性、准确性进行任何保证,阿里云不对由此引发的任何损害承担责任。

  • 您应自觉遵守第三方模型Stable Diffusion的用户协议、使用规范和相关法律法规,并就使用第三方模型的合法性、合规性自行承担相关责任。

准备工作

获取SD-WebUI容器镜像详细信息,以便您在GPU实例上部署该容器镜像时使用。例如,创建GPU实例时需要提前了解容器镜像适用的GPU实例类型,拉取容器镜像时需要提前获取镜像地址等信息。

  1. 登录容器镜像服务控制台

  2. 在左侧导航栏,单击制品中心

  3. 仓库名称搜索框,搜索sd-webui,并选择目标镜像egs/sd-webui

    镜像详情如下所示:

    镜像名称

    版本信息

    镜像地址

    优势

    SD-WebUI

    • SD-WebUI:4.3.5-full

    • Python:3.10

    • PyTorch:2.1.2

    • CUDA:12.1.1

    • cuDNN:8.9.0.131

    • 基础镜像:Ubuntu 22.04

    egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/sd-webui:4.3.5-full-pytorch2.1.2-ubuntu22.04

    SD-WebUI镜像仅支持以下GPU实例规格族选择,更多信息,请参见GPU计算型(gn系列)

    • gn6e、ebmgn6e

    • gn7i、ebmgn7i、ebmgn7ix

    • gn7e、ebmgn7e、ebmgn7ex

    SD-WebUI

    • SD-WebUI:4.3.9-full

    • Python:3.10

    • PyTorch:2.1.2

    • CUDA:12.1.1

    • cuDNN:8.9.0.131

    • 基础镜像:Ubuntu 22.04

    egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/sd-webui:4.3.9-full-pytorch2.1.2-ubuntu22.04

操作步骤

  1. 创建GPU实例并安装Tesla驱动。

    具体操作,请参见创建GPU实例

    在GPU实例上使用SD-WebUI容器镜像,需要提前在该实例上安装Tesla驱动且驱动版本应为535或更高,建议您通过ECS控制台购买GPU实例时,同步选中安装GPU驱动

    说明

    下图以Ubuntu 20.04操作系统的gn7i实例规格为例,实例创建完成后,会自动安装Tesla驱动、CUDA、cuDNN库等,相比手动安装方式更快捷。

    llm.png

  2. 远程连接GPU实例。

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

  3. 执行以下命令,安装Docker环境。

    sudo apt-get update
    sudo apt-get -y install ca-certificates curl
    
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io
  4. 执行以下命令,检查Docker是否安装成功。

    docker -v

    如下图回显信息所示,表示Docker已安装成功。

    version.jpg

  5. 执行以下命令,安装nvidia-container-toolkit。

    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
        sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
        sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
  6. 设置Docker开机自启动并重启Docker服务。

    sudo systemctl enable docker 
    sudo systemctl restart docker
  7. 执行以下命令,查看Docker是否已启动。

    sudo systemctl status docker

    如下图回显所示,表示Docker已启动。

    docker restart.jpg

  8. 执行以下命令,拉取SD-WebUI镜像。

    sudo docker pull <SD-WebUI镜像地址>

    请将代码中的<SD-WebUI镜像地址>替换为您在准备工作中获取的SD-WebUI镜像地址,示例如下:

    sudo docker pull egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/sd-webui:4.3.5-full-pytorch2.1.2-ubuntu22.04
  9. 执行以下命令,运行SD-WebUI容器。

    h_mdir=/host/models/ # host models dir
    c_mdir=/workspace/stable-diffusion-webui/models # container dir
    sudo mkdir -p ${h_mdir}/Stable-diffusion
    cd ${h_mdir}/Stable-diffusion
    
    # 下载标准SD-1.5模型
    sudo wget https://aiacc-inference-public-v2.oss-accelerate.aliyuncs.com/aiacc-inference-webui/models/v1-5-pruned-emaonly.safetensors
    
    # 启动容器
    sudo docker run -c 32 --gpus all -it \
    -v ${h_mdir}/Stable-diffusion/:${c_mdir}/Stable-diffusion/ \
    -v ${h_mdir}/ControlNet/:${c_mdir}/ControlNet/ \
    -v ${h_mdir}/Lora/:${c_mdir}/Lora/ \
    -p 5001:5001 egs-registry.cn-hangzhou.cr.aliyuncs.com/egs/sd-webui:4.3.5-full-pytorch2.1.2-ubuntu22.04

    SD-WebUI容器启动后,SD-WebUI服务自动启动。如果您需要修改服务启动命令或默认端口,请参照以下命令进行修改。例如,如需更改服务器监听端口为5002时,即将--port 5001修改为--port 5002;如需更改模型检查点的目录为/example/path/ckpts时,即将--ckpt-dir ./ckpts修改为/example/path/ckpts

    cd /workspace/stable-diffusion-webui
    python -u ./launch.py --ckpt-dir ./ckpts --listen --port 5001 --enable-insecure-extension-access --disable-safe-unpickle --api --xformers --skip-install

测试验证

  1. 在安全组中,为您本地主机的IP(公网IP)开放入方向的访问SD-WebUI的端口。

    本示例以开放入方向5001端口为例,具体操作,请参见添加安全组规则

    5001端口.jpg

  2. 在浏览器中,输入http://<GPU实例的公网IP>:5001访问SD-WebUI网站。

  3. 在Web页面的文生图页签下,输入文本提示词,单击生成/Generate,等待生成图像。

    2024-09-23_18-31-03.jpg