基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化

这篇具有很好参考价值的文章主要介绍了基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于隐空间的扩散模型 (Latent Diffusion Model),是解决文本到图片生成问题上的颠覆者。Stable Diffusion 是最著名的一例,广泛应用在商业和工业。Stable Diffusion 的想法简单且有效: 从噪声向量开始,多次去噪,以使之在隐空间里逼近图片的表示。

但是,这样的方法不可避免地增加了推理时长,使客户端的体验大打折扣。众所周知,一个好的 GPU 总能有帮助,确实如此,但其损耗大大增加了。就推理而言,在 2023 年上半年 (H1’23),一个好 CPU 实例 (r6i.2xlarge,8 vCPUs ,64 GB 内存) 价格是 0.504 $/h,同时,类似地,一个好 GPU 实例 (g4dn.2xlarge,NVIDIA T4,16 GB 内存) 价格是 0.75 $/h ,是前者的近 1.5 倍。

这就使图像生成的服务变得昂贵,无论持有者还是用户。该问题在面向用户端部署就更突出了: 可能没有 GPU 能用!这让 Stable Diffusion 的部署变成了棘手的问题。

在过去五年中,OpenVINO 集成了许多高性能推理的特性。 其一开始为计算机视觉模型设计,现今仍在许多模型的推理性能上取得最佳表现,包括 Stable Diffusion。然而,对资源有限型的应用,优化 Stable Diffusion 远不止运行时的。这也是 OpenVINO NNCF(Neural Network Compression Framework) 发挥作用的地方。

在本博客中,我们将理清优化 Stable Diffusion 模型的问题,并提出对资源有限的硬件 (比如 CPU) 减负的流程。尤其是和 PyTorch 相比,我们速度提高了 5.1 倍,内存减少了 4 倍。

Stable Diffusion 的优化

在 Stable Diffusion 的 管线 中,UNet 的运行是最计算昂贵的。因此,对模型的推理速度,针对 UNet 的优化能带来足够的效益。

然而事实表明,传统的模型优化方法如 8-bit 的后训练量化,对此不奏效。主要原因有两点: 其一,面向像素预测的模型,比如语义分割、超分辨率等,是模型优化上最复杂的,因为任务复杂,参数和结构的改变会导致无数种变数; 其二,模型的参数不是很冗余,因为其压缩了其数以千万计的 数据集 中的信息。这也是研究者不得不用更复杂的量化方法来保证模型优化后的精度。举例而言,高通 (Qualcomm) 用分层知识蒸馏 (layer-wise Knowledge Distillation) 方法 (AdaRound) 来 量化 Stable Diffusion。这意味着,无论如何,模型量化后的微调是必要的。既然如此,为何不用 量化感知的训练 (Quantization-Aware Trainning, QAT),其对原模型的微调和参数量化是同时进行的?因此,我们在本工作中,用 token 合并 (Token Merging) 方法结合 NNCF, OpenVINO 和 Diffusers 实践了该想法。

优化流程

我们通常从训练后的模型开始优化。在此,我们从宝可梦数据集 (Pokemons dataset,包含图片和对应的文本描述) 上微调的 模型。

我们对 Stable Diffusion 用 Diffusers 中的 图片 - 文本微调之例,结合 NNCF 中的 QAT (参见训练的 脚本)。我们同时改变了损失函数,以同时实现从源模型到部署模型的知识蒸馏。该方法与通常的知识蒸馏不同,后者是把源模型蒸馏到小些的模型。我们的方法主要将知识整理作为附加的方法,帮助提高最后优化的模型的精度。我们也用指数移动平均方法 (Exponential Moving Average, EMA) 让我们训练过程更稳定。我们仅对模型做 4096 次迭代。

基于一些技巧,比如梯度检查 (gradient checkpointing) 和 保持 EMA 模型 在内存 (RAM) 而不是虚拟内存 (VRAM) 中。整个优化过程能用一张 GPU 在一天内完成。

量化感知的训练之外呢 ?

量化模型本身就能带来模型消耗、加载、内存、推理速度上的显著提高。但量化模型蛮大的优势在能和其他模型优化方法一起,达到加速的增益效果。

最近,Facebook Research 针对视觉 Transformer 模型,提出了一个 Token Merging 方法。该方法的本质是用现有的方法 (取平均、取最大值等) 把冗余的 token 和重要的 token 融合。这在 self-attention 块之前完成,后者是 Transformer 模型最消耗算力的部分。因此,减小 token 的跨度能减少 self-attention 块消耗的时间。该方法也已被 Stable Diffusion 模型 采用,并在面向 GPU 的高分辨率优化上有可观的表现。

我们改进了 Token Merging 方法,以便用 OpenVINO,并在注意力 UNet 模型上采用 8-bit 量化。这包含了上述含知识蒸馏等的所有技术。对量化而言,其需要微调,以保证数值精度。我们也从 宝可梦数据集 上训练的 模型 开始优化和微调。下图体现了总体的优化工作流程。

基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化,AI人工智能,stable diffusion,人工智能

结果的模型在有限资源的硬件上是高度有效的,如客户机或边缘 CPU。如上文所述,把 Token Merging 方法和量化方法叠加能带来额外的推理增益。

基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化,AI人工智能,stable diffusion,人工智能

PyTorch FP32,推理时长:230.5 秒,内存消耗:3.44 GB

基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化,AI人工智能,stable diffusion,人工智能

OpenVINO FP32,推理时长:120 秒 (1.9 倍),内存消耗:3.44 GB

基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化,AI人工智能,stable diffusion,人工智能

OpenVINO 8-bit,推理市场:59 秒 (3.9 倍),内存消耗:0.86 GB(0.25 倍)

基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化,AI人工智能,stable diffusion,人工智能

ToMe + OpenVINO 8-bit, 推理速度:44.6 秒 (5.1 倍),内存消耗:0.86 GB (0.25 倍)

用不同模型优化方法的图片生成的结果 展示。输入提示词为 “cartoon bird”,随机种子为 42。模型用 OpenVINO 2022.3,来自 Hugging Face Space,用“CPU 升级”的实例: 第三代 Intel® Xeon® Scalable Processors,和 Intel® 深度学习加速技术。

结果

我们用优化模型不完整的流程以得到两种模型: 基于 8-bit 量化的和基于 Token Merging 量化的,并和 PyTorch 作为基准比较。我们也把基准先转化成 vanilla OpenVINO (FP32) 的模型,以用以分析性比较。

上面的结果图展示了图像生成和部分模型的特性。如你所见,仅转化成 OpenVINO 就带来大的推理速度提高 ( 1.9 倍)。用基于 8-bit 的量化加速和 PyTorch 相比带来了 3.9 倍的推理速度。量化的另外一个重要提高在于内存消耗减少,0.25 倍之于 PyTorch,同时也提高了加载速度。在量化之上应用 Token Merging (ToME) (融合比为 0.4) 带来了 5.1 倍 的提速,同时把模型内存消耗保持在原水平上。我们不提供输出结果上的质量改变,但如你所见,结果还是有质量的。

下面我们展示将最终优化结果部署在 Intel CPU 上代码。

from optimum.intel.openvino import OVStableDiffusionPipeline

# Load and compile the pipeline for performance.
name = "OpenVINO/stable-diffusion-pokemons-tome-quantized-aggressive"
pipe = OVStableDiffusionPipeline.from_pretrained(name, compile=False)
pipe.reshape(batch_size=1, height=512, width=512, num_images_per_prompt=1)
pipe.compile()

# Generate an image.
prompt = "a drawing of a green pokemon with red eyes"
output = pipe(prompt, num_inference_steps=50, output_type="pil").images[0]
output.save("image.png")

在 Hugging Face Optimum Intel 库中你可以找到训练和量化 代码。比较优化过的和原模型的 notebook 代码在 这里。你可以在 Hugging Face Hub 上找到 OpenVINO 下的 许多模型。另外,我们在 Hugging Face Spaces 上建了一个 demo,以运行 [带第三代 Intel Xeon Scalable 的 r6id.2xlarge 实例]。

一般的 Stable Diffusion 模型呢?

正如我们在宝可梦图像生成任务中展现的一样,仅用小量的训练资源,对 Stable Diffusion 管线实现高层次的优化是可能的。同时,众所周知,训练一般的 Stable Diffusion 模型是一个 昂贵的任务。但是,有充足的资金和硬件资源,用上述方法优化一般的模型生成高分辨率的模型是可能的。我们唯一的警告是关于 Token Merging 方法,其会减弱模型容忍性。这里衡量标准是,训练数据越复杂,优化模型时的融合比就该越小。文章来源地址https://www.toymoban.com/news/detail-584608.html

到了这里,关于基于 NNCF 和 Optimum 面向 Intel CPU 对 Stable Diffusion 优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于CPU的云部署Stable-diffusion-webui的详细过程

    最近看到很多很精美的AI图片,也想体验下,正好我有台2vCPU和2G内存轻量云服务器,但是不想再额外买GPU,就想着用CPU模式自己部署,部署经过摸索能顺利完成,但是加载模型已经很吃力,老是提示没有足够内存。本过程主要是用来记录部署的详细过程,仅针对于CPU跑Stable-d

    2024年01月22日
    浏览(54)
  • intel的集成显卡(intel(r) uhd graphics) 配置stable diffusion

    由于很多商务本没有独立显卡,只有Intel的集成显卡,在配置安装stable diffusion 时候需要特殊对待,参考不少帖子,各取部分现稍加整合。 整体思路分两个部分: 第一步是先配置环境,主要是安装Anaconda + Pytorch, 第二步是安装 stable diffusion 第一步的配置环境阶段(Anaconda

    2024年02月03日
    浏览(47)
  • Stable-diffusion支持Intel和AMD显卡加速出图的操作方法

       英伟达的显卡有CUDA加持Stable diffusion出图很快,但我无奈家徒四壁,只有AMD老显卡苦苦支撑着本不富裕的家庭,但是生活还是继续不是。来吧!兄弟,看看老显卡能不能加速出图就完事了。    说明,我在MacOs上操作成功,同时我也加了windows上操作步骤 目录 第一步,安装

    2024年02月13日
    浏览(53)
  • 使用 Intel Arc GPU 进行Stable Diffusion,在 Windows 上使用 PyTorch 和 Docker

    PyTorch 的英特尔扩展提供优化和功能以提高英特尔硬件的性能。它通过 PyTorch “xpu” 设备为 Intel 离散 GPU 提供简单的 GPU 加速。这允许用户使用 Docker Desktop 和 WSL2 在基于 Intel GPU 的 Windows 计算机上运行 PyTorch 模型。 Docker 的主要优势之一是它简化了安装过程。它负责所有必要的

    2024年02月05日
    浏览(37)
  • 两天时间!我搞定了Intel显卡(核显)+Windows安装stable-diffusion-AI画画软件

    这篇博客是我对stable-diffusion的学习笔记 在AI之潮铺天盖地而来的时候,我也对AI有了好奇之心,加上自身也喜欢动漫绘画,所以我选择从AI绘画这块进入AI领域,当然此时sora已经应运而生了。我应该去研究sora才对呀,毕竟当前是视频为王的时代。我主要基于两点来考虑:第一

    2024年03月09日
    浏览(127)
  • CPU硬解Stable-Diffusion

    很多小伙伴说:哎呀!我没有显卡. 哎呀!我显存是AMD的 哎呀!我没有足够的显存 那这一期,将带来CPU和内存运算SD 其实很简单,我们只需要将${COMMANDLINE_ARGS}环境变量设置为--skip-torch-cuda-test 然后在python launch.py后面添加--no-half即可 运行时禁用half 我们来测试一下速度 博主用的CPU很老

    2024年02月11日
    浏览(32)
  • 如何以CPU方式启动Stable Diffusion WebUI?

    默认情况下 Stable Diffusion WebUI 采用 GPU 模式运行,但是稍微运行起来就知道至少需要4G的显存,2G显存虽然能够通过带 --lowvram 运行起来,但是能够炼出来的图基本都是512x512的,不能够炼大图,如果你刚好和我一样 家境贫寒 ,没钱买好显卡,但是穷得就是时间多,那么我们可

    2024年02月10日
    浏览(36)
  • 面向 Stable Diffusion 的自动 Prompt 工程算法 BeautifulPrompt

    近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型,可以从简单的图片描述中生成高质量的提示词,从而使文生图模型能够生成更美观的图像。BeautifulPrompt通过对低质量和高质量的提示进行微

    2024年02月04日
    浏览(39)
  • 在英特尔 CPU 上加速 Stable Diffusion 推理

    前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 分布式微调 和 推理。 英特尔至强处理器: https://www.intel.com/content/www/us/en/products/details/processors/xeon/scal

    2024年02月09日
    浏览(57)
  • 在英特尔 CPU 上微调 Stable Diffusion 模型

    扩散模型能够根据文本提示生成逼真的图像,这种能力促进了生成式人工智能的普及。人们已经开始把这些模型用在包括数据合成及内容创建在内的多个应用领域。Hugging Face Hub 包含超过 5 千个预训练的文生图 模型。这些模型与 Diffusers 库 结合使用,使得构建图像生成工作流

    2024年02月15日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包