注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的那些值。
在 Oracle Cloud Infrastructure GPU 上部署稳定 Diffusion Automatic1111
在人工智能 (AI) 和机器学习 (ML) 不断发展的格局中,研究人员和工程师一直在不断突破可能的界限。近年来获得势头的一个显著发展是稳定扩散模式。这一尖端技术具有显著优势,可提供广泛的用例,并继续看到令人兴奋的发展。在本教程中,我们将深入探讨稳定 Diffusion AI/ML 模型的世界,探讨它们的优势,探讨它们的用例,并讨论此迷人领域中的最新发展。
简介
Stable Diffusion :稳定扩散是 AI 和 ML 领域的相对新颖的方法。这是一个概率的生成模型,由于它能够生成高质量的数据样本并对各种训练条件具有强健性,因而获得了显著性。稳定的扩散模型通常基于扩散过程,允许受控的数据生成和操纵。下面简要介绍了其主要组件:
扩散过程:稳定扩散模型的核心概念是扩散过程,它对随时间推移的数据分布的演变进行建模。它涉及到向数据重复应用噪声过程,直到它转换为所需的分布。
Denoising Autoencoder :在扩散过程中,使用指示自动编码器从嘈杂的样本中恢复原始数据。此流程可帮助模型学习并捕获有意义的数据的功能。
目标
Automatic1111 稳定扩散是人工智能生成图像领域中改变游戏的工具。此创新 WebUI 提供了一个用户友好的平台,重塑了创建 AI 生成的映像的格局。借助它,用户可以无缝地运行和监视专用于映像生成的 AI 模型。我们将部署 Automatic1111 及其先决条件来推断您在 Oracle Linux 8 中喜爱的稳定扩散模型。
先决条件
-
具有 A10 GPU 限制的 Oracle Cloud Infrastructure (OCI) 租户。至少需要 1 个 A10。
-
现有 OCI 虚拟云网络 (Virtual Cloud Network,VCN),至少具有一个公共子网,公共 IP 受到限制。
-
来自您喜爱的 Huggingface Creator 的稳定扩散模型检查点。将模型限制为 v1-5 和 v2-1。稳定扩散 XL 在单个 A10 GPU 上很难加载,请参见 Stable Diffusion Model - Hugging Face 。
任务 1:在 OCI 上预配 GPU 计算实例
-
使用具有公共子网的现有 VCN 在 OCI 上启动计算实例。有关详细信息,请参阅启动计算实例。
-
从可用的 GPU.A10 配置中选择一个 A10 GPU 实例。
VM.GPU.A10.1
-
启动计算实例时,将配置更改为上述配置之一。要启动 GPU.A10 VM,请单击 Specialty and Previous Generation ,然后选择 VM.GPU.A10.1 配置。
-
如果您的租户没有为 GPU.A10 设置服务限制,这些配置将不在配置列表中。
-
要在 OCI 控制台中检查租户限制,请设置要预配 GPU.A10 计算实例的区域,打开导航菜单并单击监管和管理。
-
在租户管理下,选择限制、限额和使用量。
-
将服务设置为“计算”,在范围字段中选择一个可用性域,然后在资源字段中键入 GPU.A10 。
-
为基于 A10 的 VM 选择 GPU 和 BM 实例。
-
-
计算限制按可用性域计算。检查是否在区域的任何可用性域中设置了限制。如果所有可用性域的服务限制设置为 0,您可以单击“请求提高服务限制”链接,然后为此资源提交限制请求。
注:要访问限制、限额和使用量,您必须是租户管理员组的成员,或者您的组必须分配有策略来读取 LimitsAndUsageViewers。
- 有关详细信息,请参阅服务限制。
-
目前,OCI GPU.A10 计算配置支持 Oracle Linux、Ubuntu 和 Rocky Linux。仅 VM 配置支持 Windows。
注意:NVIDIA 未正式支持 Rocky Linux。
-
在 OCI 上预配计算实例时,请使用标准的 Oracle Linux 8 OS 映像或启用 Oracle Linux 8 GPU 的映像。如果您使用标准的 Oracle Linux OS 映像,请知道这需要安装 NVIDIA vGPU 驱动程序。在本教程中,我们将使用 Oracle Linux 8 GPU 映像。
-
展开“Boot Volume(引导卷)”部分,将引导卷至少增加到 250GB,并将 VPU 提升到更高的性能,从而获得体面的读/写能力,从而更好地进行推断。
-
使用上述参数启动实例。
任务 2:安装 Automatic1111 的先决条件
-
由于 Oracle Linux GPU 构建映像中包含 NVIDIA 驱动程序,因此我们只需运行 nvidia-smi 命令来验证其存在性和功能。这将确保一切正确设置,GPU 驱动程序按预期运行。
-
增长 FileSystem OCI 实例系统内存采用 46.6GB 默认值。由于我们将引导卷增加到 300GB,因此让我们使用 OCI Util 中的内置 OCI 命令来扩展文件系统。
要在将引导卷增加到 300GB 后在 OCI 实例上扩展文件系统,可以使用内置 OCI (Oracle Cloud Infrastructure) 命令。您可以采用以下方法:
-
检查当前磁盘使用情况:在调整文件系统大小之前,最好检查当前磁盘使用情况以确保其反映引导卷大小增加。可以使用
df
命令实现以下目的:df -h
验证可用空间是否与您的新引导卷大小 (300GB) 相匹配。
-
调整文件系统大小:使用 OCI 实用程序命令调整文件系统大小以使用增加的存储。具体命令可能因所使用的特定 OS 和文件系统而异。下面适用于 Oracle Linux 8。
sudo /usr/libexec/oci-growfs
当要求您确认要扩展分区时,输入 "y"。
-
验证文件系统扩展:运行 resize 命令后,再次检查磁盘使用情况以确认文件系统已成功扩展:
df -h
它现在应反映文件系统大小的增加。
通过执行以下步骤,您应该能够在 OCI 实例上扩展文件系统,以利用增加的引导卷提供的额外存储空间。
-
-
在 Oracle Linux 8 中安装 Python 3。10.6 。
sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
现在我们已经安装了 Python3.10.6,让我们安装 git 来克隆 Git 存储库。
sudo dnf install git
-
克隆 Automatic1111 。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
您应该在克隆的目录中包含 repo 稳定分布 -webui。
-
将您喜爱的稳定扩散模型下载到目录
stable-diffusion-webui/models/Stable-Diffusion
。- 对于我们的用例,我已从 stable-diffusion-v1-5 下载了 v1-5-pruned.ckpt。
-
更新防火墙规则以允许端口 7860 通信。
sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
任务 3:运行 AUTOMATIC1111
-
通过成功安装 Python 3。10.6,AUTOMATIC1111 软件和下载的基本稳定扩散模型,我们准备好继续运行 AUTOMATIC1111。但是,在继续之前,让我们微调我们的配置,以优化稳定扩散映像生成的速度和整体质量。
-
编辑
webui-user.sh
文件并进行以下调整。您可以在stable-diffusion-webui
目录中找到此文件。此脚本负责配置 AUTOMATIC1111 的参数,对于了解和更新可用参数至关重要。-
按如下方式修改参数:添加
listen
以在端口 7860 上作为服务器运行此参数,启用扩展访问以安装首选稳定扩散扩展,并将精度设置为满。# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --precision full --no-half-vae --no-half --theme light"
-
以下参数可确保使用 Python3.10。
# python3 executable python_cmd="python3.10"
-
以下参数安装最新的 PyTorch2,而不是缺省的 PyTorch。这在推理和图像迭代速度方面已证明更好。
# install command for torch export TORCH_COMMAND="pip install clean-fid numba numpy torch==2.0.1+cu118 torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118"
-
-
确保没有语法错误后,让我们运行脚本 webui.sh(不要与以前编辑的文件 webui-user.sh 混淆)。
bash webui.sh
此过程的结果应包括安装 AUTOMATIC1111 所需的所有软件包,包括最新的 PyTorch2。它还将加载基本模型并在端口 7860 上启动推断服务器。如果需要,可以通过修改 webui-user.sh 文件来定制端口。
-
确认成功部署后,如上所述在端口 7860 上运行的服务器,让我们继续访问稳定扩散应用程序。打开 Web 浏览器并输入以下地址:
http://<PublicIP>:7860
,将"<PublicIP>"
替换为实例的公共 IP 地址。
执行此操作后,应用程序应加载并显示如下所示。您会发现所需的型号方便地位于右上角,突出显示。
任务 4:通过服务管理器 systemctl 部署 AUTOMATIC1111
-
在路径
/etc/systemd/system
中创建一个文件stable-diffusion.service
,然后在文件stable-diffusion.service
中输入以下内容。[Unit] Description=systemd service start stable-diffusion [Service] WorkingDirectory=/home/opc/stable-diffusion-webui ExecStart=bash webui.sh User=opc [Install] WantedBy=multi-user.target
-
确保将工作目录更改为所需的目录。
-
运行以下命令以重新加载并启用/启动服务。
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
运行以下命令以检查服务的状态。
sudo systemctl start stable-diffusion.service
了解和改进
- 稳定扩散模型采用多种大小和版本,包括 v1.1、v1.2、v1.3、v1.4、v1.5、v2.0、v2.1 和 vSDXL。这些版本按其能力的升序列出,并按其能完成的工作顺序列出。例如,所有 v1 模型都可以生成本机 512x512 映像。v2 可以原生生成 768x768 映像,而无需完全精确。v1 模型的文件大小通常在每个检查点模型的 6-8GB 范围内,而 v2 模型的文件大小通常在每个检查点模型的 5.5GB 范围内。
模型加载
-
多千兆字节模型在执行开始时加载到您的 GPU VRAM 上,而众多 CUDA 核心每秒精心处理数百次。所涉及的数据传输速率以物理定律所定义的绝对限制运行。在显卡内,不低估诸如电信号以光速穿过芯片所需的时间等因素。
-
GPU 处理一组计算,然后指示 CPU 提供更多数据进行处理。随后,当 CPU 访问系统内存以检索另一批数据并通过 PCI-E 将其发送到 GPU 时,它会等待。一旦 GPU 具有数据,它将处理该数据,然后再次向 CPU 发出信号,进入另一个等待阶段。
-
这就是 VRAM 在 AI 任务中发挥关键作用的原因。如果可以在操作开始时将所有必要数据和说明预加载到显卡上,使其能够以惊人的内部速度处理它们,并在结束时简单地收集结果,可以显著缩短等待时间并最大程度地减少浪费的资源。
-
在我们的用例中,我们使用 VM.GPU.A10.1,它具有 24GB RAM 的 NVIDIA A10 GPU。单个 NVIDIA A10 GPU 足以运行 v1.5。但是,随着提示的复杂性增加,生成时间会延长,迭代速度会降低。v2 Stable Diffusion 模型有修剪版本,可以比原始大小的 v2 对应方更快速、更顺利地执行操作,主要原因是空间需求降低。虽然所有版本的稳定扩散模型都可以在单个 NVIDIA A10 24 GB GPU 中容纳,但迭代和映像生成时间的速度取决于各种因素,包括特定模型、其大小、提示复杂性、采样步骤、图像尺寸、高分辨率调整、批量大小等。
-
在即将推出的教程中,我们将探讨如何对模型进行分区,在多个 GPU 中分发模型,以及如何使用单个计算机中的多个 GPU 执行稳定扩散。我们还将探讨如何优化现有的稳定扩散基础模型。
相关链接
确认
作者 - Abhiram Ampabathina(高级云架构师)
更多学习资源
探索 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 频道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.