当前位置: 首页 > news >正文

【论文阅读】AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising

论文:2406.06911 (arxiv.org)

代码:czg1225/AsyncDiff: Official implementation of "AsyncDiff: Parallelizing Diffusion Models by Asynchronous Denoising" (github.com)

简介

异步去噪并行化扩散模型。提出了一种新的扩散模型分布式加速方法,该方法在对生成质量影响最小的情况下显著降低了推理延迟。

原理:用异步过程取代顺序去噪过程,允许去噪模型的每个组件在不同的设备上独立运行。

动机:扩散模型的多步顺序去噪特性导致了高累积延迟,无法并行计算。AsyncDiff是一个通用的即插即用加速方案,可以跨多个设备实现模型并行,将噪声预测模型分成多个组件,并将每个组件分配给不同的设备。为了打破组件之间的依赖链,它利用连续扩散步骤中隐藏状态之间的高度相似性,将传统的顺序去噪转换为异步过程。因此,每个组件都便于在单独的设备上并行计算。该策略显著降低了推理延迟,同时对生成质量的影响小。AsyncDiff还可以应用于视频扩散模型。

原理

先验知识

异步扩散模型

为了解决扩散模型中高延迟的局限性,利用多GPU进行分布式推理是一个有前途的解决方案。通过将顺序去噪近似为异步过程,实现了噪声预测模型的并行推理,有效地减少了延迟并打破了顺序执行的限制。

异步去噪。

对于由T步组成的去噪过程,初始w步被指定为预热阶段。在此阶段,去噪模型ϵθ使用标准顺序推理进行操作。在热身步骤之后,不再分割输入图像,而是将去噪模型ϵθ划分为N个顺序分量,表示为。每个组件被划分以处理可比较的计算负载,并分配给不同的设备。

这种划分旨在将每个组件的时间成本均衡到大约,从而减少总体最大延迟。xt的原始噪声预测可以表示为通过这些子模型的级联操作,定义为:

如图2所示,根据计算负荷,将重量级去噪模型ϵθ依次划分为多个分量,并将每个分量分配给单独的设备。核心思想在于通过利用 连续扩散步骤中隐藏状态的高相似性 来解耦 这些级联组件之间的依赖关系

每个组件将前一个组件的前一个步骤的输出作为其原始输出的近似值。这将传统的顺序去噪转换为异步过程,允许组件并行预测不同时间步长的噪声。此外,结合跨步去噪,以跳过冗余计算和减少设备之间的通信频率,进一步提高效率。

尽管每个设备都可以独立地计算其分配的组件,但依赖链仍然存在,因为每个组件的输入ϵθ,n派生自其前一个组件的输出ϵθ,n−1。因此,尽管模型组件分布在多个设备上,但完全并行化受到这些顺序依赖关系的约束。

我们的主要创新是通过利用前面步骤中的隐藏特性来打破级联组件之间的依赖关系。观察结果表明,去噪模型中每个块的隐藏状态在相邻的时间步长上总是表现出很大的相似性。利用这一点,时间步长为t的每个分量都可以将前一个分量在时间步长为t - 1的输出作为其原始输入的近似值。具体来说,第n-th个分量接收输出。对xt的噪声预测表示如下:

在这个新框架中,噪声预测ϵt是从跨N个前时间步执行的组件派生的。这将去噪过程从顺序转换为异步,因为在步骤t + 1完成去噪之前,噪声ϵt的预测已经开始。在每个时间步,N个分量作为下一个N步的噪声预测模型的一部分运行。具体来说,在时间t并行计算的n-th个分量有助于对未来时间步t - N + n的噪声预测。图3使用n设为4的U-net模型描述了这个异步过程。连续扩散步骤之间隐藏状态的强相似性使得异步过程能够很好地模拟原始顺序过程的去噪结果。

并行模型。通过转换到异步去噪策略,消除了同一时间步长内组件之间的依赖关系。这种调整允许提前准备时间步长t的每个组件的输入,从而使N个分裂组件能够跨多个设备并发处理。一旦计算出来,每个组件的输出必须被存储,然后广播到其他设备,以方便后续时间步骤的并行处理。

相比之下,在传统的顺序去噪过程中,每一步的时间成本累积如下:

图3:异步去噪过程概述。将去噪模型ϵθ分为四个分量。在预热阶段之后,提前准备好每个组件的输入,打破依赖链并促进并行处理。

使用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VS2019 因公司加密无法运行程序原因
  • 树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别
  • Day1--每日一练
  • P8086 『JROI-5』Music
  • 深入理解外观模式(Facade Pattern)及其实际应用
  • 网络钓鱼中的高级同形异义:网络安全的新威胁
  • 【前端】css控制背景图片缩放
  • C++list的模拟实现
  • 【Python123题库】#统计单词的数量 #各位数字之和为5的数 #输出单词
  • qt 按钮链接一个槽函数
  • 昇思25天学习打卡营第十六天|基于MindSpore的GPT2文本摘要
  • 操作系统---进程的同步和互斥(易错知识点梳理)
  • 银行小额支付系统的全面解析
  • jQuery Mobile 实例:构建响应式移动网页的实践指南
  • 【Javascript】微信小程序项目结构目录详解
  • [LeetCode] Wiggle Sort
  • CODING 缺陷管理功能正式开始公测
  • fetch 从初识到应用
  • JavaScript设计模式与开发实践系列之策略模式
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Promise面试题,控制异步流程
  • React-生命周期杂记
  • Terraform入门 - 3. 变更基础设施
  • 关于springcloud Gateway中的限流
  • 云大使推广中的常见热门问题
  • 自动记录MySQL慢查询快照脚本
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • # Redis 入门到精通(七)-- redis 删除策略
  • #pragma预处理命令
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)Linux——Linux常用指令
  • (力扣)循环队列的实现与详解(C语言)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读40-45)图像描述1
  • (七)Knockout 创建自定义绑定
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)scrum常见工具列表
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 设计模式初探
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .net反编译工具
  • .NET基础篇——反射的奥妙
  • .NET未来路在何方?
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @PreAuthorize与@Secured注解的区别是什么?
  • [20140403]查询是否产生日志
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [51nod1610]路径计数
  • [ACTF2020 新生赛]Include