周报5_YMK

news2024/12/26 21:23:07

周报5

论文:FLASHDECODING++: FASTER LARGE LANGUAGE MODEL INFERENCE ON GPUS

https://arxiv.org/pdf/2311.01282.pdf

在斯坦福大学团队的 Tri Dao 等人提出了 FlashAttention 和 FlashDecoding 后,相关的工作又被很快提出,上周来自无问芯穹(Infinigence-AI)、清华大学和上海交通大学的联合团队提出了一种新方法 FlashDecoding++,因为该工作并不是出自FlashAttention 和 FlashDecoding的团队,所以也被叫做野生的 FlashDecoding

Asynchronized Softmax with Unified Maximum Value

回顾上周讲的 FlashDecoding,在 FlashAttention 的基础上引入了新的并行维度:keys/values的序列长度,然而,在每一个块的内部,计算过程还是同步的(主要是局部最大值)。本文发现这种同步操作的开销约为20%。因此,作者希望去除同步操作,也就是独立计算出partial softmax结果。

在这里插入图片描述

Softmax的演变:

navie softmax
y i = e x i ∑ i V e x i y_i=\frac{e^{x_i}}{\sum^V_{i}{e^{x_i}}} yi=iVexiexi
在这里插入图片描述

safe softmax

由于在实际的计算中,指数计算exp存在不稳定性,比如数值容易溢出,超过一定范围计算精度会下降等问题。因此在实际使用中,往往用safe softmax更好,safe softmax的计算是在navie softmax的基础之上将数组x[1…n]每个元素减去数组的最大值max之后,再做softmax
y i = e x i − m a x k = 1 V x k ∑ j = 1 V e x j − m a x k = 1 V x k y_i=\frac{e^{x_i-max_{k=1}^Vx_k}}{\sum_{j=1}^Ve^{x_j-max_{k=1}^Vx_k}} yi=j=1Vexjmaxk=1Vxkeximaxk=1Vxk
在这里插入图片描述

online softmax

是在safe softmax的基础上做的改进

在这里插入图片描述

其中 d j − 1 d_{j-1} dj1表示数组x[1…n]的前j-1个指数和,它的指数和是基于前j-1个元素的最大值 m j − 1 m_{j-1} mj1来算的的,注意哦 m j − 1 m_{j-1} mj1并不是全局的最大值,同理 m j m_{j} mj表示前j个元素的最大值,那么它跟 m j − 1 m_{j-1} mj1的区别在于,它有可能等于 m j − 1 m_{j-1} mj1,也有可能是最新进了的第j个元素 x j x_{j} xj.

能看出分块softmax在求的时候依赖于上一个块的max,为了在块的内部也做到并行,作者提出的方法很简单:就是找到一个合适的公共最大值 ϕ \phi ϕ。然而,如果 ϕ \phi ϕ太大,会造成 e x i − ϕ e^{{x_i}−ϕ} exiϕ溢出;如果 ϕ ϕ ϕ太小,会造成 e x i − ϕ e^{{x_i}−ϕ} exiϕ精度损失。于是作者进行了统计,如下图所示。例如,对于Llama2-7B, >超过99.99%的值在[-16.8, 6.5]之间。

在这里插入图片描述

但是对于OPT-6.7B来说,其范围较大,于是作者采用动态调整策略,如果在推理过程中发现设置的 ϕ \phi ϕ不合理,那么就终止当前操作,然后采用FlashAttention和FlashDecoding的方法计算softmax。不过怎科学拍出 ϕ \phi ϕ 这个数,作者也没给出具体方法。

但是也有人对这个工作表示质疑,一个是 ϕ \phi ϕ 的选择是很困难的,极易造成精度的下降,另一个是该优化未必能带来实际的加速。

因为FlashDecoding中:

  • thread block层次并行度是:sequence_len/block_size

  • block内thread的并行粒度是:Tile Size,且block_size>Tile Size

在FlashDecoding++中:

  • thread block层次并行度是:sequence_len/Tile Size

  • block内thread的并行粒度仍然是:Tile Size

这样不一定对Occupancy(GPU 上同时活跃的线程数量与线程块容量的比率)提升有确定性帮助,如果FlashDecoding的thread block切分比较好把SM沾满,SM内部即使串行计算不同Tile并不一定有什么问题。

Flat GEMM Optimization with Double Buffering

Decoding阶段的过程主要由GEMV(batch size=1)或flat GEMM(batch size>1)。GEMV/GEMM运算可以用M、N、K来表示,其中两个相乘矩阵的大小分别为M × K和K × N。

一般LLM推理引擎利用Tensor Core使用cuBLAS和CUTLASS等库来加速。Tensor Core 在处理矩阵乘法(GEMM)操作时,通常对 M 和 N 的维度有一些优化。当 M 和 N 维度是 8 的倍数时,可以充分发挥其优势。

但是,在解码阶段,可能会执行矩阵向量乘法(GEMV)或扁平化矩阵乘法(Flat GEMM)等操作。在这些特定的操作中,M 的维度可能相对较小,远远小于 64。

由于 Tensor Core 的优化通常期望 M 和 N 的维度是 8 的倍数,所以在解码阶段,如果 M 维度较小,填充零以满足 Tensor Core 期望的维度可能导致计算利用率下降。这是因为填充的零可能占用了矩阵中的大部分空间,而这些零对实际计算没有贡献,从而浪费了计算资源。

若假设N维度上和K维度上的tiling size分别为 B N B_N BN B K B_K BK,那么每个GEMM tile的计算量为 2 × M × B N × B K 2×M×B_N×B_K 2×M×BN×BK(这里的2表示乘加2次),总共有 B = N × K B N × B K B=\frac{N×K}{B_N×B_K} B=BN×BKN×K个GEMM tiles。总内存访问量为 ( M × B K + B N × B K ) × B + M × N (M×B_K+B_N×B_K)×B+M×N (M×BK+BN×BK)×B+M×N。因此,计算和内存比为:

在这里插入图片描述

另一方面,tiling后的并行度 N / B N N/B_N N/BN

**于是作者发现了:计算和内存比与 B N B_N BN正相关,而并行度与 B N B_N BN负相关。**下图展示了GEMM在不同 B N B_N BN和N下的性能(归一化后)。本文总结了两个关键结论:

  1. N N N较小时,flat GEMM是parallelism-bounded。NVIDIA Tesla A100中有108个Streaming Multiprocessors (SMs),于是应该将 N / B N N/B_N N/BN设置为一个相关的数(128或256)。
  2. N N N 较大时,flat GEMM是memory-bounded。通过隐藏memory access latency可以提高性能。
    在这里插入图片描述

为了隐藏memory access latency,本文引入了double buffering技术。具体来说就是在共享内存中分配两个buffer,一个buffer用于执行当前tile的GEMM计算,同时另一个buffer则加载下一个tile GEMM所需的数据。这样计算和内存访问是重叠的,本文在N较大时采取这种策略。

总结:没有FlashAttention和FlashDecoding惊艳,个人觉得FlashDecoding的同步处理代价不大,而且本文中动态调整softmax方法也引入了判断、终止和分支跳转等操作。

ention和FlashDecoding惊艳,个人觉得FlashDecoding的同步处理代价不大,而且本文中动态调整softmax方法也引入了判断、终止和分支跳转等操作。

另外,目前正在看文章 CosmoFlow: Using Deep Learning to Learn the Universe at Scale

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1207115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

房地产信息展示服务预约小程序的作用是什么

市场中房产品牌很多,中介也比较多,各个品牌在城市中竞争激烈,然而随着线下流量匮乏及多种难题,传统商家线下经营方式变的很低效,急需通过线上实现增长。 房产不同于其它产品,转化时间较长,但又…

RedCap推动5G规模应用,紫光展锐赋能产业高质量发展

5G R17 RedCap作为面向中高速物联网场景的关键技术和解决方案,可以大幅降低终端的复杂度、成本和功耗。在当前国内5G应用规模化发展关键时期,5G R17 RedCap拥有广大的市场潜力与广泛的应用场景,将有助于推动5G规模应用、构建融通发展的5G生态…

快手自动引流软件的运行分享,以及涉及到技术与核心代码分享

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 一、引言 引流是任何网络创业者或营销人员必备的技能之一。手动引流不仅耗时,而且效果难以保证。因此,自动引流软件应运而生,成为许多人的得力助…

多区域LCC-HVDC一次调频二次调频

多区域LCC-HVDC高压直流互联一次二次调频,后续可加入双馈永磁风机调频,储能调频等。多个四机两区域模型互联。 目前实现的主要是区域之间的调频。

掌握这11点外贸知识,能够给你外贸工作带来很大提升!

01.产品展示 关于产品展示,非常重要也一再提及,一个好的产品必须包括以下几部分: ● 产品标题准确概括产品; ● 产品图片清晰且包括细节图; ● 提供详尽的产品描述,比如型号、尺寸、材质、配件等等。最好…

【Android】统一系统动画

需求:除panel动画效果为弹出之外,其余的应用效果为渐入渐出 从系统层面统一把控动画效果,而不是单个应用自己处理 Android系统版本:9.0 代码地址 \frameworks\base\core\res\res\values\styles.xml 当时看注释,以为…

目标检测算法 - YOLOv2

文章目录 1. Batch Normalization2. High Resolution Classifier3. Anchor、Dimension Cluster、Direct location prediction4. Loss Function5. Fine-Grained Features6. Multi-Scale Training7. Faster8. Stronger Better,Faster,Stronger。 2017年&am…

使用 request 和 cheerio 库来发送 HTTP 请求

首先,我们需要导入所需的库。在这个例子中,我们将使用 request 和 cheerio 库来发送 HTTP 请求和解析 HTML。 import request from request; import cheerio from cheerio;然后,我们需要定义一个函数来发送请求并解析响应。 function getHt…

『MySQL快速上手』-⑧-内置函数

文章目录 1.日期函数1.1 获得年月日1.2 获得时分秒1.3 获得时间戳1.4 在日期的基础上加日期1.5 在日期的基础上减去时间1.6 计算两个日期之间相差多少天案例1案例22.字符串函数案例3.数学函数4.其他函数1.日期函数 1.1 获得年月日

【极客时间-系列教程】Vim 实用技巧必知必会-基本概念和基础命令:应对简单的编辑任务

vim很强大,但它的入门确实是比较高,对于初学者来说,怎么退出都是一件很难的事情, 不管你有没有遇到过,反正我是遇到过退出比较难的问题 首先介绍几个常用的命令和按键 :q! 退出不保存:w 写入不退出:r 读文件:wq 写入…

The 8th China Open Source Conference Successfully Concludes

由开源社主办的第八届中国开源年会(COSCon23)于 2023年10月29日在成都圆满收官。本次大会,为期两天,线下参会报名逾千人次,在线直播观看人数总计 168610 人,直播观看次数达 248725 次,官网累计浏…

屏幕录制为什么没有声音?让我来告诉你答案

在日常生活和工作中,屏幕录制是一项非常有用的技能,无论是为了记录教程、演示软件,还是分享游戏经验。然而,有时您可能会遇到一个常见的问题,录制的视频没有声音。本文将深入解析屏幕录制为什么没有声音,并…

合众汽车选用风河Wind River Linux系统

导读合众新能源汽车股份有限公司近日选择了Wind River Linux 用于开发合众智能安全汽车平台。 合众智能安全汽车平台(Hozon Automo-tive Intelligent Security Vehicle Plat-form)是一个面向高性能服务网关及车辆控制调度的硬件与软件框架,将于2024年中开始投入量产…

JCJC错别字检测系统安装部署手册

本手册是针对 Ubuntu 服务器环境的安装使用说明。CentOS安装手册,请参考连接: JCJC错别字系统部署-腾讯云开发者社区-腾讯云 。 安装步骤: 第一步:安装 docker 离线方式在Ubuntu 18.04 上安装Docker ,参考连接&am…

TypeError: Can‘t parse ‘center‘. Sequence item with index 0 has a wrong type

报错代码 import sys sys.path.append(rD:\文档\Temp\WX-FIles\data) # sys.path.append(rD:\文档\Temp\WX-FIles\data)p11 [125, 195] p12 [200, 275] # and the corresponding two points on the second image are:p21 [120, 190] p22 [200, 280] # TODO: write your ow…

Shiro快速入门之三

一、前言 接Shiro快速入门之二,上篇侧重于介绍认证,这篇介绍一下Shiro的授权,先初始化5张表的数据。 注:创建三条权限记录,一个admin角色分配查询和添加用户权限,一个账户qingcai18036授予管理员角色。 二…

用递归解饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始…

phpstudy 开启目录浏览功能

(1)在该目录下: (2)选择对应网站的配置文件; (3)修改: # Options FollowSymLinks ExecCGI Options Indexes FollowSymLinks ExecCGI

python 文本纠错库pycorrector的使用(API变更,许多介绍文章已不可用)

pycorrector是一个nice的中文检测库,在最新的版本API变更,导致许多之前的介绍文章不可用。 现将新API粘贴如下。

pytorch-gpu(Anaconda3+cuda+cudnn)

文章目录 下载Anaconda3安装,看着点next就行比较懒所以自动添加path测试 cuda安装的时候不能改路径如果出现报错,关闭杀毒软件一直下一步就好取消勾选“CUDA”中的“Visual Studio Intergration”一直下一步即可测试安装成功 cudnn解压后将这三个文件夹复…