前言

Stable Diffusion (SD) 已迅速成为 2023 年十分风行的文生图的(又称“AI 艺术生成”)模型之一。其胜利的一个关键因素是它已作为开源软件提供。

这催生了一个充满活力的社区,该社区疾速构建了工具,使任何对 SD 感兴趣的人都能更容易地应用 SD,无论他们的技术常识如何。

其中一个工具是由 Automatic1111 开发的简略但功能强大的 Web 界面 stable-diffusion-webui。

它容许咱们无需任何编码即可应用 SD 的所有性能,而且它也是开源的,这意味着任何人都能够下载此 Web UI 以及 SD 模型并将其部署到任何他们想要的中央。

然而,挑战在于 SD 依然须要足够弱小的 GPU 能力能力十分疾速的生成一张图像信息,而这须要咱们自行洽购GPU并部署配置

因而,在本教程中,咱们借助于亚马逊云科技 G4dn 实例类型来部署 stable-diffusion-webui,帮忙减速机器学习推理和图形密集型的工作场景,教程内容也能够在 GitLab 中找到。

咱们只需应用一个命令,应用 AWS CloudFormation 模板来设置所有所需的基础设施即可实现此操作。

部署模板

Cloudformation模板如下所示:

AWSTemplateFormatVersion: '2010-09-09'Description: A CloudFormation template to deploy the Stable Diffusion Web UI by Automatic1111 Parameters :  InstanceType:    Description : EC2 instance type    Type : String    Default : g4dn.xlarge    AllowedValues :           - g4dn.xlarge   KeyName:    Description: Name of an existing EC2 KeyPair to enable SSH access to the instances    Type: AWS::EC2::KeyPair::KeyName Resources:  SecurityGroup:    Type: AWS::EC2::SecurityGroup    Properties:      GroupName: sd-webui-sg      GroupDescription: Security group for whisper-demo EC2 instance      SecurityGroupIngress:        - IpProtocol: tcp          FromPort: 22          ToPort: 22          CidrIp: 0.0.0.0/0        - IpProtocol: tcp          FromPort: 7860          ToPort: 7860          CidrIp: 0.0.0.0/0  EC2Instance:    Type: AWS::EC2::Instance    Properties:      InstanceType: !Ref InstanceType      KeyName: !Ref KeyName      ImageId: ami-03f65b8614a860c29      BlockDeviceMappings:        - DeviceName: /dev/sda1          Ebs:            VolumeSize: 100            VolumeType: gp3      "Tags" : [            {"Key" : "Name", "Value" : "sd-web-ui-cf"},        ]      SecurityGroups:        - Ref: SecurityGroup      UserData:        'Fn::Base64': |            #!/bin/bash            cd /home/ubuntu            git clone http://labs.bosicloud.com/bosi-samples/stable-diffusion-webui.git            bash stable-diffusion-webui/setup.sh -y  MyEIP:    Type: AWS::EC2::EIP  MyEIPAssociation:    Type: AWS::EC2::EIPAssociation    Properties:      AllocationId: !GetAtt MyEIP.AllocationId      InstanceId: !Ref EC2Instance

将此模板文件上传到 Cloudformation 中并部署:

脚本代码阐明

如前所述,咱们在 EC2 实例上运行一个 setup.sh 脚本,该脚本将执行命令来设置 Web UI 的所有内容,让咱们一步步地看。

第一局部在装置软件包后禁用 Ubuntu 重新启动对话框,而后装置一些咱们须要的软件包:

# disable the restart dialogue and install several packagessudo sed -i "/#\$nrconf{restart} = 'i';/s/.*/\$nrconf{restart} = 'a';/" /etc/needrestart/needrestart.confsudo apt-get updatesudo apt install wget git python3 python3-venv build-essential net-tools -y

下一节将下载并装置 CUDA 驱动程序,以便咱们能够拜访机器的 GPU:

# install CUDA (from https://developer.nvidia.com/cuda-downloads)wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.runsudo sh cuda_12.0.0_525.60.13_linux.run --silent

之后咱们须要装置 Git Large File Storage,因为咱们将下载一个大概 5 GB 的稳固扩散模型:

# install git-lfscurl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bashsudo apt-get install git-lfssudo -u ubuntu git lfs install --skip-smudge

当初 Git LFS 已装置,咱们能够从 Hugging Face 模型核心下载模型。请留神,咱们启用了 “skip-smudge” 选项,它容许咱们只下载咱们须要的特定文件。

咱们将下载 SD v2.1(512px 版本)并将其挪动到 Web UI 冀望模型所在的目录中。

# download the SD model v2.1 and move it to the SD model directorysudo -u ubuntu git clone --depth 1 https://huggingface.co/stabilityai/stable-diffusion-2-1-basecd stable-diffusion-2-1-base/sudo -u ubuntu git lfs pull --include "v2-1_512-ema-pruned.ckpt"sudo -u ubuntu git lfs install --forcecd ..mv stable-diffusion-2-1-base/v2-1_512-ema-pruned.ckpt stable-diffusion-webui/models/Stable-diffusion/

请留神,您能够更改脚本以下载不同版本的 Stable Diffusion,例如版本 1.5。您还能够稍后将所需数量的模型增加到 UI 中,办法是将它们放入 odel 目录中。

除了模型之外,咱们还须要一个由 WebUI 读取的配置文件。咱们从 Stable Diffusion Github 存储库下载一个配置文件,并将其重命名以匹配模型名称,并将其也放入同一目录中:

# download the corresponding config file and move it also to the model directory (make sure the name matches the model name)wget https://raw.githubusercontent.com/Stability-AI/stablediffusion/main/configs/stable-diffusion/v2-inference.yamlcp v2-inference.yaml stable-diffusion-webui/models/Stable-diffusion/v2-1_512-ema-pruned.yaml

最初,咱们将 WebUI 的所有权更改为 ubuntu 用户,并以该用户身份启动服务器(因为不容许用户 root 启动应用程序):

# change ownership of the web UI so that a regular user can start the serversudo chown -R ubuntu:ubuntu stable-diffusion-webui/ # start the server as user 'ubuntu'sudo -u ubuntu nohup bash stable-diffusion-webui/webui.sh --listen > log.txt

测试Web UI

期待15-20 分钟实现部署。咱们能够通过 Amazon console 来查看 EC2 实例的 IP 地址:

检索到 IP 地址后,咱们能够通过在浏览器中导航到 :7860 来关上应用程序(如果申请超时,则装置尚未实现)。装置实现后咱们能够看到应用程序已启动并运行。

敞开EC2实例并重新启动应用程序

咱们在不应用的时候进行实例的运行,防止产生过多的费用。咱们能够在AWS控制台中进行实例并在再次须要时重新启动它,而不会失落任何已装置的应用程序。

重新启动 EC2 实例后,咱们能够通过 SSH 登录它并应用以下命令重新启动应用程序:

nohup bash stable-diffusion-webui/webui.sh --listen > log.txt