生成式人工智能已经取得了长足的进步。
GPT3以及包括ChatGPT在内的衍生产品已经普及了文本生成,而像Dall-E和Midjourney等则被用于根据书面提示创作令人惊叹的原创艺术作品。
生成式人工智能这项技术不仅引人注目,还反映出领先的人工智能研究和消费者能够使用该类技术之间的差距正在急剧缩小。
Stable Diffusion是生成式人工智能技术革命的耀眼明星之一,它是由CompVis在慕尼黑大学(Ludwig Maximilian University of Munich)开发的开源文本-图像模型。
Stable Diffusion因其图像质量和多功能性在生成艺术领域获得了广泛的赞誉,还将催生大量的商业应用。
现在,人工智能艺术爱好者和创建人工智能平台与服务的专业开发人员首次可以在Graphcore拟未 IPU上运行Stable Diffusion,并使用Paperspace Gradient notebook,作为建立业务的第一步或探索新的创意途径。
任何人都可以在几分钟内开始生成图像,只需启动一个基于网络的notebook并运行预先训练好的Hugging Face Stable Diffusion模型。除了文字到图像的生成,针对IPU的Stable Diffusion还支持图像到图像,以及文本引导的图像修复。
开发人员可以获得6个小时的免费课程,免费试用一些Stable Diffusion notebook。从今天起,开发人员可以灵活的以灵活的每小时费率购买更多的IPU计算时间,并可以选择升级到更大或更快的IPU系统。
Stable Diffusion Notebook
在IPU上的文本-图像生成 在IPU上的图像-图像生成 在IPU上的文本引导的图像修复
Stable Diffusion概览
图像的扩散模型通过向训练图像添加不同数量的噪声来工作,并学习如何逆转扩散过程以恢复原始实例。Stable Diffusion的工作方式与此类似,但它的工作对象是压缩后的图像特征而不是图像本身。
为了实现这一点,Stable Diffusion是由三个独立的神经网络组成的。

第一个是文本编码器,它将用户提供的文本提示的每个标记转化为一个数字向量。技术上讲,这是一个预训练的CLIP模型的编码器,Stable Diffusion 1.x的参数为1.23亿个。Stable Diffusion 2.x使用LAION开发的OpenCLIP编码器,由3.4亿个参数组成。
核心模型UNet噪声预测器的任务是学习如何对随机噪声图像进行去噪,以返回其源头,这个迭代过程通常要运行50次。
UNet由几个下采样块和几个上采样块组成。上采样块将其中间特征与相同分辨率的相应下采样特征连接起来。块中的注意力模块整合了由编码的用户提示提供的背景。总的来说,UNet有8.6亿的参数,是计算成本最高的组成部分。
最后,一个图像VAE解码器将去噪后的图像特征投射出来,生成最终的输出图像。
在IPU上开始使用Stable Diffusion技术
1. 安装要求
!pip install diffusers[torch]==0.9 optimum-graphcore huggingface_hub
2. 登录Hugging Face,重新使用一个经过训练的检查点
要下载和使用预训练的Stable-Diffusion-v1-5检查点,首先需要对Hugging Face Hub进行认证。首先在Hugging Face网站上创建一个读取访问标记,然后执行以下单元,并在提示时输入您的读取标记:
from huggingface_hub import notebook_login
notebook_login()
您需要接受模型页面上的用户许可,以便使用RunwayML训练的检查点。
3. 为Stable Diffusion创建一个Hugging Face的扩散器流水线
我们使用来自上游🤗扩散器的 “StableDiffusionPipeline”,并做了两个小的修改。
- 我们只把UNet网络放在IPU上,因为它是计算要求最高的步骤。
- 我们对最长的序列使用注意力切分,以减少存储压力。
我们已在拟未 IPU优化的HuggingFace Optimum库中进行了这些修改。
这些都包含在 “IPUStableDiffusionPipeline “模型中,我们将在下面导入该模型。创建和运行流水线不需要进行其他改动。
import torch
from ipu_models import IPUStableDiffusionPipeline
pipe = IPUStableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
revision="fp16",
torch_dtype=torch.float16,
)
pipe.enable_attention_slicing()
第一次调用的时间会稍长一些,因为模型在被加载到IPU之前要进行编译。
pipe("apple", guidance_scale=7.5);
4. 文本-图像(txt2img)生成
现在你可以根据提供的提示去运行流水线。我们鼓励你自己尝试。以下是一个例子。
prompt = "a shiba inu in a zen garden, acrylic painting"
pipe(prompt, guidance_scale=7.5).images[0]

5. 用于其他任务的Stable Diffusion
Stable Diffusion流水线可以用于其他图像合成任务,例如:
图像-图像(img2img),使用调用:
pipe(prompt, init_image=init_image, strength=0.75, guidance_scale=7.5).images[0]
其中init_image是一个pillow图像对象。
图像修复,使用流水线调用:
pipe(prompt, image=image, mask_image=mask_image, guidance_scale=7.5).images[0]
其中图像和掩码是pillow图像对象。
面向拟未 IPU的Stable Diffusion 2.0很快将与Paperspace Gradient Notebook一起面世。
补充资源:
- 教程:在Paperspace上启动并运行拟未 IPU
- 定价:Paperspace Gradient上的IPU机器
- 更多Notebook:查看由IPU驱动的notebook的完整列表,包括自然语言处理、计算机视觉、卷积神经网络和语音等。
博客标题图片显示:“J. M. W. Turner / Van Gough / Joan Miró风格的未来主义城市空间”,由运行在拟未IPU上的Stable Diffusion生成。