65.9K
CodeProject 正在变化。 阅读更多。
Home

生成式 AI 游乐场:在最新的 Intel® GPU 上使用 Stability AI、Stable Diffusion XL 和 CompVis 进行文本到图像的 Stable Diffusion

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2023 年 12 月 12 日

CPOL

7分钟阅读

viewsIcon

14082

本文讨论了 Stable Diffusion 模型在生成式 AI 中的应用,重点是根据文本提示生成图像。

本文最初发布在 Medium* 上。

图 1. 由 Stable Diffusion* XL base 1.0 生成的示例。图片来源:Podell 等人 (2023)

2023 年 10 月 15 日 — Stable Diffusion 模型在生成式 AI 领域取得了进展,能够根据文本提示生成照片级逼真的图像(图 1)。这些模型不仅引起了 AI 开发者的兴趣并可供他们使用,还吸引了来自各行各业的创意人士,包括作家、艺术家和教师。Intel 发布了其强大的新 Intel® Data Center GPU Max Series,我在该 GPU 上运行了这些 Stable Diffusion 模型的预测。

市面上有许多开源的 Stable Diffusion 模型。我演示的三个模型托管在 Hugging Face* 上

所有这些模型都以文本作为输入,并根据该文本提示生成图像。我生成了如图 2 所示的图像,提示为“马在帝国大厦上吃胡萝卜”,以及如图 3 所示的图像,提示为“月球上生长的山核桃树”。

图 2. 由“马在帝国大厦上吃胡萝卜”的文本提示在 Intel 最新 GPU 上的 Stable Diffusion 模型生成的图像。

图 3. 使用“月球上生长的山核桃树”提示 Stable Diffusion 模型。

Stability AI Stable Diffusion v2–1 模型

名为 Stability AI Stable Diffusion v2–1 的模型在由 32 x 8 x A100 GPU(共 256 张 GPU 卡)组成的强大集群上进行了训练。它是在 Stable Diffusion v2 模型的基础上进行了微调。原始数据集是 LAION-5B 数据集的一个子集,由 Stability AI 的 DeepFloyd 团队创建。截至撰写本文时,LAION-5B 数据集是迄今为止最大的文本-图像对数据集,包含超过 58.5 亿个文本-图像对。图 3 显示了该数据集中的一些样本。

图 4. LAION-5B 数据集中猫咪示例的样本。图片来源

显示的示例图像表明,原始图像确实具有各种像素尺寸;然而,在实践中训练这些模型通常需要裁剪、填充或调整图像大小,以使模型架构具有一致的像素尺寸。

数据集的细分如下

  • Laion2B-en:23.2 亿个英文文本-图像对
  • Laion2B-multi:来自 100 多个其他语言的 22.6 亿个文本-图像对
  • Laion1B-nolang:12.7 亿个语言不可检测的文本-图像对

追溯这些模型的训练路径有些曲折,但这是其路径

有关训练的更多详细信息,请参阅 Stability AI Stable Diffusion v2–1 Hugging Face 模型卡

Stability AI 的 Stable Diffusion XL Base 1.0 模型

名为 Stability AI Stable Diffusion XL Base 1.0 的模型是另一个文本到图像的 Stable Diffusion 模型,但在后端进行了一些改进。它采用了 3 倍更大的 U-NET 主干架构,以及第二个文本编码器。图 1 显示了 Stable Diffusion XL 1.0 模型图像输出的样本。

Stable Diffusion XL 1.0 的训练顺序如下

  1. 一个基础模型在 256 x 256 分辨率的图像上训练了 600K 步。
  2. 在 512 x 512 像素图像上继续训练了 200K 步。
  3. 有趣的是,最后的微调阶段涉及各种矩形尺寸,但大约相当于 1024 x 1024 像素的区域。

一项用户偏好研究表明,Stable Diffusion XL 1.0 的表现优于 Stable Diffusion v2–1 模型(Podell 等人,2023)。Stable Diffusion XL 1.0 模型在最后阶段使用各种不同的图像尺寸进行训练,以及模型的架构变化,是其获得采用和成功的关键。图 4 说明了 Stable Diffusion XL 1.0 相较于先前模型的改进。

图 5. 在先前 Stable Diffusion 模型和 Stable Diffusion XL 1.0 模型之间,使用相同提示的图像比较。图片来源:Podell 等人,2023

CompVis 的 Stable Diffusion v1–4 模型

名为 CompVis 的 Stable Diffusion v1–4 模型在 Stable Diffusion v1-2 模型的基础上继续训练,并在 LAION-Aesthetics v2 5+ 数据集上使用 512 x 512 像素图像进行了 225K 步的微调。该数据集是前面提到的 LAION-5B 数据集的一个子集,其选择标准是高质量的视觉效果(图 5)。

图 6. LAION-Aesthetics 高质量数据集的样本。图片来源

Intel GPU 硬件

我用于推理测试的特定 GPU 是 Intel Data Center GPU Max Series 1100,它拥有 48 GB 内存、56 个 Xe-cores 和 300 W 的热设计功率。在命令行中,我首先可以通过运行以下命令来验证我确实拥有预期的 GPU:

clinfo -l

我收到的输出显示,当前节点上有四个 Intel GPU 可供我使用。

Platform #0: Intel(R) OpenCL Graphics
 +-- Device #0: Intel(R) Data Center GPU Max 1100
 +-- Device #1: Intel(R) Data Center GPU Max 1100
 +-- Device #2: Intel(R) Data Center GPU Max 1100
 `-- Device #3: Intel(R) Data Center GPU Max 1100

nvidia-smi 函数类似,您可以在命令行中运行 xpu-smi,并选择一些选项来获取您想要的 GPU 使用统计信息。

xpu-smi dump -d 0 -m 0,5,18

结果是每秒打印一次设备 0 的重要 GPU 使用情况。

getpwuid error: Success

Timestamp, DeviceId, GPU Utilization (%), GPU Memory Utilization (%), GPU Memory Used (MiB)
13:34:51.000,    0, 0.02, 0.05, 28.75
13:34:52.000,    0, 0.00, 0.05, 28.75
13:34:53.000,    0, 0.00, 0.05, 28.75
13:34:54.000,    0, 0.00, 0.05, 28.75

运行 Stable Diffusion 示例

我的同事 Rahul Nair 编写了一个 Stable Diffusion 文本到图像的 Jupyter* Notebook,该 Notebook 直接托管在 Intel® Developer Cloud 上。以下是您可以开始的步骤:

  1. 访问 Intel Developer Cloud
  2. 注册为标准用户。
  3. 登录后,转到“培训和研讨会”部分。
  4. 选择“GenAI Launch Jupyter Notebook”选项。您可以在那里找到文本到图像的 Stable Diffusion for Jupyter Notebook 并运行它。

在 Jupyter Notebook 中,为了加快推理速度,使用了 Intel® Extension for PyTorch*。一个关键函数是 _optimize_pipeline,其中调用 ipex.optimize 来优化 DiffusionPipeline 对象。

def _optimize_pipeline(self, pipeline: DiffusionPipeline) -> DiffusionPipeline:
        """
        Optimizes the model for inference using ipex.

        Parameters:
        - pipeline: The model pipeline to be optimized.

        Returns:
        - pipeline: The optimized model pipeline.
        """

        for attr in dir(pipeline):
            if isinstance(getattr(pipeline, attr), nn.Module):
                setattr(
                    pipeline,
                    attr,
                    ipex.optimize(
                        getattr(pipeline, attr).eval(),
                        dtype=pipeline.text_encoder.dtype,
                        inplace=True,
                    ),
                )
        return pipeline

Notebook 运行应该只需要一分钟左右。一旦模型加载到内存中,每个图像的生成应该只需要几秒钟。只需确保在打开 Jupyter 内核时选择了 pytorch-gpu 环境,这样就不必安装任何包。Notebook 中使用 ipywidgets 包有一个迷你用户界面(图 6)。选择所需的模型,输入提示,然后选择要输出的图像数量。

图 7. Jupyter Notebook 中用于提示到图像的迷你用户界面。

我很高兴地报告,最新的 Intel Data Center GPU Max Series 表现良好,必将在生成式 AI 领域成为一匹有力的竞争者。如果您有任何问题或想在开始尝试 Stable Diffusion 方面获得帮助,请告诉我。

您可以联系我:

使用 Stable Diffusion 模型免责声明

此处提供的 Stable Diffusion 模型是用于高分辨率图像合成的强大工具,包括文本到图像和图像到图像的转换。虽然它们旨在产生高质量的结果,但用户应意识到潜在的限制

  • 质量变化:生成图像的质量可能会因输入文本或图像的复杂性以及与模型训练数据的匹配程度而异。
  • 许可和使用限制:请仔细审查与每个模型相关的许可信息,以确保遵守所有条款和条件。
  • 道德考量:请考虑生成内容的道德影响,尤其是在可能涉及敏感或有争议的主题的情况下。

有关每个模型功能、限制和最佳实践的详细信息,请参阅相应的模型卡。

© . All rights reserved.