码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Flash-Attention


    这是一篇硬核的优化Transformer的工作。众所周知,Transformer模型的计算量和储存复杂度是 O ( N 2 ) O(N^2) O(N2) 。尽管先前有了大量的优化工作,比如LongFormer、Sparse Transformer、Reformer等等,一定程度上减轻了Transformer的资源消耗,但对Transformer的性能有所折损,且扩展性不强,不能泛化到其它领域、以及复杂结构的叠加。

    这篇工作从底层对Transformer的计算和读写进行了优化,主要有三个贡献:

    1. 加速了模型计算:现在GPU的计算速度已经远远超过了内存读写速度(模型计算速度慢是因为IO慢,而不是 O ( N 2 ) O(N^2) O(N2)的原因导致。也就是说transformer的瓶颈在IO,而不是运算),当GPU完成计算后,内存却还在读取数据,造成GPU闲置而内存繁忙读(消费者早就消费完了,生产者还在缓慢生产)的现象,也就是内存墙问题。FlashAttention通过tiling和算子融合计算,将复杂操作放到SRAM中计算,并减少从HBM读取次数,加快了模型计算速度。而之前的工作虽然减少了Transformer的计算复杂度,却并没有减少模型计算时间。
    2. 节省了显存:FlashAttention通过引入全局统计量,避免实例化大注意力矩阵,减少了显存占用。
    3. 精确的注意力:FlashAttention从底层优化了Transformer的计算,但是任务指标上没有任何折损,与普通的Transformer结果是完全等价。

    现代GPU内存分级

    architecture

    flash attention的思路就是尽量地在SRAM中进行分块计算、算子融合,减少对HBM(即常说的显存)的读写,从加快模型计算,减轻内存墙问题。

    算法流程

    algorithm

    tiling分块计算

    # ---------------------
    # Tc: K和V的分块数
    # Tr: Q的分块数量
    # ---------------------
    for 1 <= j <= Tc:
        for 1 <= i <= Tr:
            do....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    loop

    由于对 Q , K Q, K Q,K矩阵进行了分块,就无法进行全局归一化。我们的最终目的是得到 O O O ,作者这里根据公式推导,不断用当前最新的rowmax和rowsum去更新,直到遍历完最后一块,最终结果就和标准场景下的结果完全一致。

    计算量和显存分析

    1. 计算量: O ( N 2 d ) O(N^2 d) O(N2d),跟标准attention计算一致

    computation

    1. 显存: m ∈ R N , l ∈ R N m \in R^N, l \in R^N m∈RN,l∈RN

    gpu memory

    IO复杂度分析

    1. 标准attention

    standard

    1. flash-attention

    flash

    可以看到,flash-attention通过算子融合、分块计算减少了IO,内存墙问题得以缓解。


    参考

    • FlashAttention:加速计算,节省显存, IO感知的精确注意力
    • 图解大模型计算加速系列:Flash Attention V1,从硬件到计算逻辑
  • 相关阅读:
    基于STM32设计的智能家庭防盗系统(华为云IOT)(224)
    upload-labs/Pass-07 未知后缀名解析漏洞复现
    Java 24 Design Pattern 之 观察者模式
    如何用蓝牙实现无线定位(一)--系统原理
    整理笔记——二极管
    Java Lambda表达式的使用
    JAVA继承
    HTML5期末大作业:美妆网页主题网站设计——清新的手工肥皂网站展示(4页)HTML+CSS+JavaScript
    水声功率放大器在声呐系统中的应用有哪些
    【python百炼成魔】python之内置函数range
  • 原文地址:https://blog.csdn.net/transformer_WSZ/article/details/133850453
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号