SAGEATTENTION: ACCURATE 8-BIT ATTENTION FOR PLUG-AND-PLAY INFERENCE ACCELERATION
文章标题:SAGEATTENTION: 面向即插即用推理加速的精确8位注意力机制
作者/机构:Jintao Zhang, Jia Wei, Haofeng Huang, Pengle Zhang, Jun Zhu, Jianfei Chen∗;清华大学计算机科学与技术系,人工智能研究院,智能产业研究院,清华-博世联合机器学习中心,THBI实验室
A1 主要贡献
本文旨在解决Transformer模型中注意力(Attention)机制的计算效率问题。随着序列长度的增加,具有 $O(N^2)$ 计算复杂度的注意力机制成为主要的性能瓶颈。尽管量化是提升模型推理速度的有效方法,但现有工作主要集中在线性层的优化上,而注意力部分通常仍以FP16等高精度格式运行,缺乏系统性的注意力量化研究。直接对注意力进行8位量化会导致严重的性能下降,例如,在Unidiffuser模型上生成模糊图像,在Llama2模型上准确率降至随机猜测水平。
本文深入分析后发现,注意力量化面临两大挑战:
1. (C1) K矩阵存在显著的通道级异常值(outlier),导致量化过程中精度损失巨大。
2. (C2) 简单地将P矩阵和V矩阵量化为INT8,无法在所有场景下保证PV矩阵乘法结果的准确性。
为应对这些挑战,本文提出了 SageAttention,一种高效且精确的即插即用型注意力推理量化方法,其核心贡献如下:
- 提出K矩阵平滑化方法:针对K矩阵的通道级异常值问题,本文提出一种通过减去所有token的均值来平滑K矩阵的方法。该方法在几乎不增加时间开销(<0.2%)的情况下,显著提升了量化后的模型准确性。
- 为PV矩阵乘法设计高效且精确的计算方案:为解决P、V矩阵量化带来的精度损失,本文提出一种创新的替代方案:保持P和V矩阵为FP16格式,但在执行矩阵乘法时使用低精度的FP16累加器。该策略在不损失任何精度的前提下,将矩阵乘法的速度提升了一倍。
- 实现自适应量化策略:本文实现了四种具有不同速度-精度权衡的注意力核,并提出一种自适应选择方法。该方法能为模型的每一层自动选择最快的注意力实现版本,同时确保不降低模型性能。
- 提供高性能Triton实现:本文使用Triton在RTX4090和3090 GPU上实现了SageAttention的高性能版本,其融合了ROPE与量化操作,并借鉴了FlashAttention风格的分块(tiling)方法。该实现利用了Nvidia Tensor Core的快速INT8
mma(u8.u8.s32)
和FP16-with-FP16-accumulatormma(f16.f16.f16)
指令,其运算速度(OPS)分别比FlashAttention2和xformers快约2.1倍和2.7倍,在RTX4090上达到了340 TOPS,接近理论INT8吞吐量的52%。 - 全面的实验验证:在大型语言模型、图像生成和视频生成等多种先进模型上进行的端到端实验表明,SageAttention可以作为即插即用模块直接替换原有注意力实现,性能损失可忽略不计,同时带来显著的推理加速。
图 1: SageAttention在视频生成任务上的一个示例(CogvideoX on RTX4090)。
图 2: 注意力的延迟。
图 3: 一个比较示例。
A3 背景知识
FlashAttention-2
自注意力计算的公式。自注意力的计算可以表示为:$S = QK^⊤/\sqrt{d}$, $P = σ(S)$, $O = PV$,其中 $σ(S)_{ij} = \exp(S_{ij}) / \sum_k \exp(S_{ik})$ 是softmax操作。矩阵Q、K和V的维度均为 $N \times d$,而矩阵S、P的维度为 $N \times N$。虽然d通常很小(例如64或128),但N可能达到数千甚至数百万。因此,$N \times N$ 的矩阵(S、P)远大于(Q、K、V),朴素的实现会因S、P矩阵的大量读写而遭受巨大的全局内存I/O开销。
FlashAttention的分块(tiling)与在线softmax。FlashAttention 【【6,Flashattention-2: Faster attention with better parallelism and work partitioning,2023,arXiv】】 提出将Q、K和V从token维度分块为 $\{Q_i\}$, $\{K_i\}$, $\{V_i\}$,块大小分别为 $b_q$, $b_{kv}$, $b_{kv}$。为了避免S、P的内存I/O,它使用在线softmax(online softmax)【【40,Online normalizer calculation for softmax,2018,arXiv】】来逐步计算O的每个块,即 $O_i$。
迭代计算过程。首先,对于每个 $\{K_i\}$, $\{V_i\}$ 块,它迭代地计算以下方程:
其中 $m_i^j$ 和 $l_i^j$ 是 $b_q \times 1$ 的向量,分别初始化为 $-\infty$ 和 0。$\tilde{σ}()$ 是一个在线softmax算子:$m_{ji} = \max\{m_{j-1i}, \text{rowmax}(S_{ji})\}$,$P_{eij} = \exp(S_{ji} - m_{ji})$。
最终输出计算。最后,在所有迭代完成后,即 $j = b_{kv}$ 时,输出 $O_i$ 可以通过 $O_i = \text{diag}(l_{ji})^{-1}O_{ji}$ 计算得出。
动态量化
量化加速矩阵乘法的原理。一个矩阵乘法 $C = AB$ 可以通过量化加速为:
在这里,$\psi$ 是一个量化器,它将一个高精度(如FP32)矩阵A转换为一个低精度格式 $\hat{A}$(如INT8或FP8)和一个缩放因子 $\delta_A$。$\psi^{-1}$ 是一个反量化器,用于转换回高精度。我们应该有 $\psi^{-1}(\hat{A}) \approx A$。实际的矩阵乘法 $\hat{A}\hat{B}$ 是在低精度下进行的。在现代GPU中,低精度矩阵乘法通常比高精度快几倍。
不同粒度的量化器。许多量化器依赖于数值格式和粒度,例如,多少个元素共享一个共同的缩放因子。
* per-tensor动态量化器:首先计算整个张量的最大绝对值作为缩放因子,然后将元素缩放到INT8的可表示范围[-127, +127]内,最后四舍五入转换为INT8:$\hat{A} = \lceil A/\delta_A \rfloor$,$\delta_A = \max(|A|)/127$。
* per-token量化器:为张量的每个token分配一个缩放因子:$\hat{A}[i, :] = \lceil A[i, :]/ \delta_A[i, :] \rfloor$,$\delta_A[i, :] = \max(|A[i, :]|)/127$。
* per-channel量化器:为张量的每个通道(即沿通道维度)分配一个缩放因子:$\hat{A}[:, i] = \lceil A[:, i]/\delta_A \rfloor$,$\delta_A = \max(|A[:, i]|)/127$。
* per-block量化器:基于FlashAttention的分块方法,我们可以相应地应用per-block量化。per-block量化器为每 $b = m - n$ 个token分配一个缩放因子:$\hat{A}[m : n, :] = \lceil A[m : n, :]/\delta_A \rfloor$,$\delta_A = \max(|A[m : n, :]|)/127$。
反量化过程。反量化仅涉及逐元素的缩放:$\psi^{-1}_\delta(\hat{A}) = \delta_A \hat{A}$。
A2 方法细节
4.1 公式化表述
量化注意力的通用公式。基于第3.1和3.2节中对FlashAttention和动态量化的描述,我们将量化注意力公式化如下:
* 量化步骤:
$(\delta_Q, \hat{Q}) = \psi_Q(Q/\sqrt{d})$, $(\delta_K, \hat{K}) = \phi_K(K)$, $(\delta_P, \hat{P}) = \psi_P(P)$, $(\delta_V, \hat{V}) = \psi_V(V)$
* 注意力计算步骤:
$S = \psi^{-1}_{\delta_Q \delta_K}(\hat{Q}\hat{K}^\top)$, $(m', P) = \tilde{\sigma}(m, S)$, $O = \text{diag}(\exp(m' - m)) O + \psi^{-1}_{\delta_P \delta_V}(\hat{P}\hat{V})$
其中 $\phi_K$ 是一个用于获得量化K的变换,我们将在后续章节中讨论。为简化起见,我们省略了所有的上标和下标,但注意力中使用的矩阵仍然是分块的,并且计算仍然按照第3.1节描述的FlashAttention方式组织。与原始全精度版本相比,如公式4和5所示,SageAttention为Q、K、P、V添加了量化器,并为乘积添加了反量化器,以加速 $QK^\top$ 和 $PV$ 两个矩阵乘法。在线softmax部分则保持全精度计算。
图 4: (Q, K, V)数据分布的典型示例。
表 1: 不同量化方法的端到端指标比较。
4.2 平滑矩阵K
直接量化Q、K的精度问题。直接量化Q和K通常会导致很大的误差。特别地,将Q和K量化为INT8会在文本到图像/视频任务中产生完全模糊的图像/视频。如图4.1所示,我们可视化了来自文本到图像模型Unidiffuser【【1,All are worth words: A vit backbone for diffusion models,2023,CVPR】】和文本到视频模型CogvideoX【【74,Cogvideox: Text-to-video diffusion models with an expert transformer,2024,arXiv】】的两组典型的Q、K、V。值得注意的是,K表现出明显的通道级异常值。
K矩阵异常值的特点与挑战。然而,不能对K应用per-channel量化,因为量化只能在 $QK^\top$ 矩阵乘法的外轴(token维度)上进行。此外,先前为线性层提出的平滑技术【【70,Smoothquant: Accurate and efficient post-training quantization for large language models,2023a,International Conference on Machine Learning】】也不适用,因为Q也受到异常值的严重影响。幸运的是,K的通道异常值具有一种模式:每个token的键(key)实际上是一个所有token共享的大偏置(bias),加上一个小的token级信号。因此,异常值并非来自token间的巨大变化,而仅仅是这个大的偏置。
提出K矩阵平滑化方法。基于这一观察,我们提出通过一个变换 $\gamma$ 来平滑矩阵K,该变换减去所有token上的平均K值:
其中 mean(K)
= $\frac{1}{N} \sum_{t=1}^N K[t, :]$ 是平均键,形状为 $1 \times d$。需要注意的是,这样的变换不影响softmax的输出,因为 $\sigma(q(K - \text{mean}(K))^\top) = \sigma(qK^\top - q \cdot \text{mean}(K)) = \sigma(qK^\top)$。最终,从全精度K到量化$\hat{K}$的变换可以写为 $\phi_K(K) = \psi_K \circ \gamma$,其中 $\psi_K$ 是一个量化器。换句话说,一个全精度的K在最终被量化之前,会先减去其均值。
平滑K的有效性。表1展示了在各种模型上,使用和不使用平滑K的不同量化方法的端到端指标。结果表明,平滑K能带来显著的准确性提升。此外,平滑K对注意力的速度开销小于0.2%(见表10)。
表 2: 在真实模型的所有层中使用不同数据类型的平均准确率。
表 3: 在真实模型的所有层中使用不同数据类型的最差准确率。
4.3 对Q, K, P, V的量化
Q, K的量化粒度。$\psi_Q(Q)$ 和 $\psi_K(K)$ 的量化粒度可以设置为per-token、per-block或per-tensor。这是因为per-channel量化不可行,因为 $QK^\top$ 矩阵乘法的内轴的缩放因子无法用于反量化【【70,Smoothquant: Accurate and efficient post-training quantization for large language models,2023a,International Conference on Machine Learning】】。
Q, K的数据类型。我们选择INT8用于 $\psi_Q(Q)$ 和 $\psi_K(K)$,原因有二。首先,表2显示了在Llama2 (7B)【【54,Llama 2: Open foundation and fine-tuned chat models,2023,arXiv】】和Unidiffuser的所有层中,使用不同数据类型(INT8、E4M3、E5M2)对Q、K、P、Ṽ进行量化的平均准确率。结果表明,将Q、K量化为INT8比使用E4M3和E5M2的准确率更高。其次,在许多常用GPU(如RTX4090和3090)上,使用INT8的矩阵乘法比使用FP8快两倍。
P̃, V的量化粒度。我们建议对 $\psi_P(P_e)$ 使用per-block量化,对 $\psi_V(V)$ 使用per-channel量化,原因有三。(1)对 $P_e$ 进行per-channel量化和对V进行per-token量化是不可行的,因为反量化需要外轴的缩放因子。(2)$P_e = \exp(S_i - \text{rowmax}(S_i))$,其中 $S_i$ 是Q的一个块与 $K^\top$ 的矩阵乘法结果,因此 $P_e$ 每行的最大值为1。因此,我们可以为 $P_e$ 的一个块分配一个单一的静态缩放因子 $s = \frac{1}{127}$,其准确率等同于per-token量化。(3)per-channel量化可以解决V的通道级异常值问题。
P̃, V的数据类型。我们选择INT8用于 $\psi_P(P_e)$ 和 $\psi_V(V)$,因为在一些常用GPU上,使用INT8的矩阵乘法比使用FP8快两倍,并且尽管使用INT8对 $\psi_P(P_e)$ 和 $\psi_V(V)$ 的准确率低于E4M3和E5M2,但平均准确率是相似的(见表2)。
准确率度量指标。我们使用三个指标来评估量化注意力输出 $O'$ 与全精度注意力输出 $O$ 的准确性:首先,我们将 $O'$ 和 $O$ 展平为形状为 $1 \times n$ 的向量。然后计算:余弦相似度(Cosine Sim)= $\sum OO' / \sqrt{\sum O^2}\sqrt{\sum O'^2}$,相对L1误差(Relative L1)= $\sum |O - O'| / \sum |O|$,均方根误差(RMSE)= $\sqrt{(1/n)\sum(O - O')^2}$。
表 4: 在真实模型的所有层中使用不同累加器的平均准确率。
表 5: 在真实模型的所有层中使用不同累加器的最差准确率。
4.4 FP16累加器:一个更准确且高效的解决方案
INT8量化P̃Ṽ的问题。上述对 $\psi_P(P_e)$ 和 $\psi_V(V)$ 的解决方案存在一个问题,即在某些模型层中,使用INT8的准确性非常差。表3显示了在Llama2和Unidiffuser的所有层中,使用不同数据类型对Q、K、P、Ṽ进行量化的最差准确率。结果表明,INT8的 $\psi_P(P_e)$ 和 $\psi_V(V)$ 会带来不可接受的误差。
提出FP16累加器方案。作为回应,我们提出了一个非常准确且高效的解决方案。具体来说,我们建议使用FP16作为 $PV$ 矩阵乘法的数据类型,并配合一个FP16累加器。
该方案的优势。这种解决方案的好处是显而易见的。首先,在一些常用GPU(如RTX4090和3090)上,使用FP16累加器的FP16矩阵乘法速度是使用FP32累加器的2倍。此外,使用FP16累加器比使用FP32累加器可以节省更多的寄存器资源,从而加速计算。其次,表3显示,对P、Ṽ使用FP16比使用所有其他8位数据类型要准确得多。更重要的是,使用FP16累加器与使用FP32累加器相比,没有准确性损失。具体来说,表4和表5显示了在Llama2和Unidiffuser的所有层上使用FP16或FP32累加器的平均和最差准确率,表明使用FP16累加器没有准确性损失。
表 6: SageAttention的四种核实现。
4.5 自适应量化
实现四种注意力核。基于第4.3和4.4节的讨论,我们实现了四种注意力核(见表6),这些核基于两组选择:(1)对 $\psi_Q(Q)$ 和 $\psi_K(K)$ 使用per-token或per-block量化。(2)对 $\psi_P(P_e)$ 和 $\psi_V(V)$ 使用INT8量化,或保持P、Ṽ为FP16并使用FP16累加器。
自适应选择策略。SAGEAttn-B对于所有模型都足够准确,并且可以实现2倍的加速(见图6和图7)。然而,SAGEAttn-vB在模型的某些层中也足够准确,并且比SAGEAttn-B快一点(约4%)。因此,我们使用各种输入来测试模型每一层SAGEAttn-vB的余弦相似度。然后,对于那些SAGEAttn-vB的余弦相似度大于99.8%(SAGEAttn-B的最差相似度)的层,我们将选择SAGEAttn-vB,而其他层则使用SAGEAttn-B。
图 5: SageAttention的工作流程。
4.6 融合技巧与性能分析
融合技巧。为了减少量化的开销,我们将量化过程与注意力层之前的算子进行融合。例如,我们将量化融合在ROPE(旋转位置嵌入)【【48,Roformer: Enhanced transformer with rotary position embedding,2021,arXiv】】层内。具体来说,在ROPE的结果(A)从共享内存写入全局内存之前,我们执行 $\delta_A, \hat{A} = \psi(A)$。随后,将 $\delta_A, \hat{A}$ 写入全局内存。此外,我们还将 $QK^\top$ 的系数 $(1/\sqrt{d})$ 融合到量化过程中,而不是将其留在注意力层中。具体来说,我们在量化Q之前,在芯片上将Q乘以 $(1/\sqrt{d})$。
性能分析。我们以SAGEAttn-B为例,讨论在实际硬件上的加速效果:
1. 矩阵乘法加速。利用当前主流硬件上的INT8矩阵乘法单元可以实现2-4倍的吞吐量。虽然FP16累加器在大多数计算卡上不提供吞吐量提升,但在边缘加速器(如RTX4090)上,仍可实现比FP32累加器快2倍的提升。
2. 量化开销。量化和反量化被认为是当前量化方法的主要开销【【34,Qserve: W4a8kv4 quantization and system co-design for efficient llm serving,2024,URL https://arxiv.org/abs/2405.04532】】。计算开销无法避免,但通过将Q、K的量化与ROPE融合,我们避免了量化的IO开销。
3. 缓存和寄存器。目前,主流加速器需要在计算过程中将数据存储在缓存中(如SharedMemory)。使用8位数据进行计算可以减少通用缓存的使用,而使用fp16累加器也可以减少累加寄存器的使用。
4. Dram访问。使用8位数据可以将张量从DRAM传输到计算单元的开销减半。尽管量化引入了额外的FP32缩放因子,但与张量相比,这些缩放因子可以忽略不计。
A4 实验
实验环境
- 硬件配置:
- RTX 4090平台:配备PCIE 5.0,16核Intel Xeon(R) 6430 CPU,120GB DDR4 RAM。
- RTX 3090平台:配备16核Intel Xeon(R) 8358P CPU,80GB DDR4 RAM。
- 软件配置:
- 操作系统:Ubuntu 22.04。
- 核心库:torch 2.4.0+cu121,triton-nightly(20240816版本),python 3.11,gcc/g++ 9。
- 实现语言/库:使用OpenAI Triton实现自定义Attention核。
- 模型与数据集:
- Llama2 (7B):用于文本生成,在WikiText、LAMBADA、MMLU数据集上评估。
- CogvideoX:用于文本到视频生成,使用open-sora提示集进行评估。
- Unidiffuser & UltraPixel:用于文本到图像生成,在COCO 2014val数据集的前256个标注上进行评估。
- TIMM (vit_base_patch16_224):用于图像分类,在ImageNet、ImageNet-Sketch、ImageNet-Rendition数据集上评估。
- Llava1.6:用于视觉问答,在TextVQA、POPE、VQAv2数据集上评估。
实验结果
注意力核的速度与精度
- 速度对比:在RTX4090上,无论是头维度(headdim)为64还是128,SageAttention的速度都显著优于基线方法。峰值性能达到341 TOPS,平均比FlashAttention2快2倍,比xformers快2.9倍。在RTX3090上也表现出相似的加速性能(图6, 7, 8, 9)。
- 精度对比:与全精度注意力相比,SageAttention的四种实现版本的数值误差都非常小。在使用正态分布数据进行的测试中,SAGEAttn-T和SAGEAttn-B的余弦相似度达到100%,RMSE在e-4级别(表9)。
图 6: SageAttention与基线在RTX4090上的速度比较 (headdim=64)。
图 7: SageAttention与基线在RTX4090上的速度比较 (headdim=128)。
图 8: SageAttention与基线在RTX3090上的速度比较 (headdim=64)。
图 9: SageAttention与基线在RTX3090上的速度比较 (headdim=128)。
表 9: SageAttention核的准确率。
端到端性能
- 实际加速比:在RTX4090上对Unidiffuser、UltraPixel、CogvideoX、Llama2和TIMM等模型进行的实际测试中,SageAttention相比原始注意力实现了平均2.83倍的加速(表7)。在RTX3090上也获得了平均2.7倍的加速(附录表19)。
- 模型指标损失:SageAttention在所有测试模型上的端到端指标几乎没有损失。在Llama2、CogvideoX、UltraPixel和Unidiffuser上,与全精度注意力相比,平均指标下降仅为0.2%。在TIMM模型上,SageAttention的性能甚至超过了全精度版本(表8)。
表 7: SageAttention在RTX4090上的实际加速比。
表 8: 跨文本、图像和视频生成模型的端到端指标损失。
消融研究
- 平滑K的开销:在实际模型中,平滑K操作对注意力速度的影响极小,性能下降不到0.2%(表10)。
- 自适应量化的增益:与仅使用SAGEAttn-T相比,采用自适应策略(SageAttention)可以在不损失任何模型指标的情况下,将注意力的平均速度提升11.7%(表11)。
表 10: 平滑K的开销。
表 11: 自适应量化的增益。
A5 结论
本文介绍了SageAttention,一种用于注意力的、高效且精确的INT8量化方法。通过三大关键技术:(1)提出一种平滑矩阵K的方法,以低于0.2%的速度开销提升了准确性;(2)在(P, V)矩阵乘法中使用FP16累加器,同时提升了准确性和速度;(3)采用自适应量化策略,在不牺牲准确性的前提下进一步将OPS提升了12%。实验结果表明,SageAttention的速度分别比FlashAttention2和xformers快约2.1倍和2.7倍。在包括语言、图像和视频生成在内的多种模型上的广泛测试证实,我们的方法能够在保持端到端指标的同时,实现即插即用的推理加速。
A6 附录
A.2 注意力核的超参数
块大小与核参数。我们对Q的块大小使用128,对K和V的块大小使用64。代表GPU核中warp调度器数量和处理阶段数量的Num Warps
和Num Stages
参数,详见表12。
表 12: 我们注意力核的超参数。
A.3 数据集和模型详情
提示集与模型版本。对于UltraPixel和Unidiffuser的图像生成,我们选择COCO 2014val数据集的前256个标注作为提示集,并使用对应的256张图像作为真实图像来计算FID和sFID。对于CogvideoX,由于模型在长文本上训练,我们使用了open-sora提示集,每个提示都包含超过120个单词。我们用于TIMM的具体模型是vit_base_patch16_224.augreg2_in21k_ft_in1k
。
A.5 与其他方法的比较
与其他量化方法的正交性与对比。存在一些特定于任务的量化方法,如用于LLM的AWQ、用于文本到图像的Q-diffusion以及用于文本到视频的ViDiT-Q。SageAttention与这些方法是正交的,因为它们主要用于量化线性层。此外,AWQ仅用于压缩LLM的参数,没有计算加速效果。Q-diffusion和ViDiT-Q的官方代码库未提供加速效果的代码。尽管如此,我们还是将SageAttention与这些工作进行了比较:
* 与AWQ的比较:在Llama2-7B上,SageAttention在WikiText上的困惑度更低,并在预填充阶段有显著加速,而AWQ没有加速效果(表13)。
* 与Q-diffusion (W8A8)的比较:在Unidiffuser上,两者指标相当,但SageAttention提供了显著的加速(表14)。
* 与VIDIT-Q的比较:在CogvideoX上,两者指标相当,但SageAttention的加速效果超过了VIDIT-Q的理论最大加速比(22%)(表15)。
表 13: SageAttention与AWQ (W4A16)在Llama2上的比较。
表 14: SageAttention与Q-diffusion (W8A8)在Unidiffuser上的比较。
表 15: SageAttention与VIDIT-Q在CogvideoX上的比较。
A.6 一些见解
Llama2的量化稳定性。表1显示,Llama2的指标在量化后保持稳定。原因是Llama2-7B的注意力中Q、K和V的分布相对均匀。因此,将Q、K和V量化为INT8或FP8对注意力的准确性影响不大。这一见解启发我们,更好地控制模型中的异常值激活可能会带来更精确的量化结果。
B 基于Torch Attention的实现
Torch Attention的实现速度。FlashAttention是当前最先进且最常用的标准注意力实现;另一个常用的是Torch attention【【43,Torch backend documentation】】。我们在表16中报告了基于Torch实现的版本速度。
表 16: 基于Torch Attention的SageAttention。
B.1 额外的精度比较
不同数据类型的精度。表17显示了使用来自Unidiffuser第24层的Q、K,通过per-token量化以不同数据类型计算 $Q \cdot K$ 的精度,并与全精度结果进行比较。结果表明,将Q、K量化为INT8比使用E4M3和E5M2的精度更高。
平滑K的精度增益。表18显示了在各种模型上,使用和不使用平滑K的不同量化方法的精度。结果表明,平滑K能带来显著的精度提升。
表 17: 使用不同类型量化计算 Q·K 的数值误差。
表 18: 使用或不使用平滑K的量化注意力误差。
B.2 可视化结果
生成结果对比。图10展示了UltraPixel使用全精度注意力和SageAttention生成的高分辨率图像(2560x1536)。可以看出,SageAttention在高质量和高细节图像上与全精度版本相匹配。图11展示了Open-Sora【【86,Open-sora: Democratizing efficient video production for all,2024c,URL https://github.com/hpcaitech/Open-Sora】】在不同精度下生成的视频。SageAttention生成的视频与全精度版本完全相同。图12、13和14展示了在UltraPixel、Unidiffuser和CogvideoX上更多的可视化比较结果。
图 10: UltraPixel的一个图像生成示例。
图 11: Open-Sora的一个视频生成示例。
图 12: UltraPixel的更多图像生成示例,其中prompt1=”两只狗在浴室的马桶旁站着抬头看”,prompt2=”一辆灰色自行车锁在一些金属门上”,prompt3=”一辆汽车在高速公路上行驶的图像”,以及prompt4=”一只猫在马桶盖上看起来很不安”。
图 13: Unidiffuser的更多图像生成示例,其中prompt1=”喜马拉雅山脉的美丽景色”,prompt2=”海底的一头大象”,prompt3=”英式乡村花园设计”,以及prompt4=”科罗拉多州杜兰戈的一辆旧红色电气化火车”。
图 14: CogvideoX的更多图像生成示例。关于提示和完整视频的更多细节,请参考 https://anonymous.4open.science/r/image_video_examples-3E44/README.md。
B.3 RTX3090上的实际加速比
RTX3090上的性能。我们进一步在RTX3090上测量了SageAttention和原始注意力在Unidiffuser、UltraPixel、CogvideoX、Llama2和TIMM上的实际速度。表19显示,SageAttention在所有模型上均优于原始注意力。具体来说,SageAttention相比原始注意力平均实现了2.7倍的加速。
表 19: RTX3090上的真实加速比比较。
💬 评论讨论
欢迎在这里分享您的想法和见解!