论文解析——Transformer 模型压缩算法研究及硬件加速器实现

作者及发刊详情

邓晗珂,华南理工大学

摘要

正文

实验平台

选取模型: T r a n s f o r m e r b a s e Transformer_{base} Transformerbase

训练数据集:WMT-2014 英语-德语翻译数据集、IWSLT-2014 英语-德语互译数据集

Transformer模型压缩

网络模型计算中的输入数据、权重数据和偏置数据都采取线性量化

量化过程:

  1. 获取训练后的得到的浮点 Transformer 模型,通过百分比校准获取各线性层权重数据的初始量化系数,而后通过均方误差校准获取各线性层的权重数据的量化系数。
  2. 选取训练集中一部分在上述训练后模型基础上多次前向推理,获取该浮点模型中各层矩阵运算输入数据的分布情况,从而根据百分比校准核均方误差校准获取各层矩阵运算的输入数据的量化系数,利用这些系数计算每层矩阵运算输入数据的量化系数
  3. 将第1点和第2点得到的系数相乘得到各层偏置数据的量化系数

采用偏移对角矩阵剪枝方法减少神经网络的模型参数量

偏移对角矩阵结构化规则稀疏剪枝的训练策略:

  1. 载入已训练好的模型参数
  2. 对分类的权重进行基于偏移对角矩阵的结构化剪枝,整体过程遵循“训练-剪枝-再训练”和分批剪枝相结合的策略

Transformer硬件加速器

加速器硬件架构

包括片内全局缓存(包括输入缓存、权重缓存和中间结果/输出缓存)、运算单元阵列、softmax 计算单元、层归一化计算单元(Layer norm)和控制模块。
在这里插入图片描述

运算单元阵列的设计

多个计算单元(Processing Element, PE)和加法单元组成,每个PE对输入和权重块进行计算

  • 输入数据以行数据形式流入运算单元阵列
  • 为了减少数据移动成本,本文采取权重复用最大化的策略,并且权重以稀疏块形式送入运算单元,对于输入到运算单元阵列每一块权重,将与之对应的所有输入数据进行遍历
  • 输入数据在 PE 阵列间传递可以对其进行复用,输入数据的复用次数取决于 PE 阵列的列大小

在这里插入图片描述

PE的设计

每个 PE 中包括 16个乘法器和 1 个数据分配器,可以完成向量乘矩阵操作,输出结果送入加法单元进行加法操作。

在这里插入图片描述

  • 数据分配器的作用是根据偏移量对输入数据进行重新排列,从而完成索引匹配,保证分配后的输入数据和所对应的非零值权重数据相乘,同时也统一了密集矩阵运算和稀疏矩阵运算在 PE 内的数据流
    这样无需在 PE 外对剪枝后的权重数据进行稀疏解码复原,同时不用对部分和输出或计算结果进行地址索引,乘法器的部分和输出排列顺序与最终输出数据的排列顺序一致
    在这里插入图片描述
加法器的设计

加法单元负责将所在列的 4 个 PE 产生的部分和结果或者偏置数据进行加法运算,每个加法器单元内部配备用于缓存部分和结果的 FIFO,与加法单元内部的累加器进行数据交互产生最终计算结果,这样可以缩短部分和的数据移动距离。

在这里插入图片描述

softmax函数计算单元的设计

包括:数据预处理模块、指数计算模块、累加模块和对数计算模块等模块

softmax的计算:
对于一个K维向量 x = [ x 1 , x 2 , . . . , x K ] x=[x_1,x_2,...,x_K] x=[x1,x2,...,xK],则softmax的输出向量s为:
s j = e x j ∑ k = 1 K e x k s_j=\frac{e^{x_j}}{\sum_{k=1}^{K} e^{x_k}} sj=k=1Kexkexj

  • softmax的计算存在除法运算和指数计算的数据溢出两个问题
  • 除法溢出问题:通过计算域变换,即将除法运算转换为减法和对数运算
  • 指数计算溢出问题:将指数函数的输入进行等比例缩小,即将所有输入数据减去数据中的最大值 x m x_m xm,将指数函数的输入范围限定为 ( − ∞ , 0 ] ,从而避免了数据溢出 (-\infty,0],从而避免了数据溢出 (,0],从而避免了数据溢出

在这里插入图片描述

  • 数据预处理模块除了要减去最大值 x m x_m xm,还需要对数据进行去量化操作
  • softmax 计算单元的输入数据的格式为 INT8,而且 Transformer 中的 softmax 的输入值需要根据KaTeX parse error: Expected '}', got 'EOF' at end of input: \sqrt{d_{k}进行缩小,对应图中的右移 3bit
  • 对数计算模块外的其他计算单元的计算并行度为 16
层归一化函数计算单元设计

包括计算模块有:均值计算模块、Var_L1 计算模块和 Norm 计算模块

层归一化计算存在于解码器和编码器的各子层间,为了避免复杂的标准差计算和简化量化推理过程,本文使用 L1 范数的层归一化代替了原始 Transformer 模型中的 L2 范数,通过实验证实了 L1 范数的层归一化不会影响数据分布以及模型性能。

  • 计算输入矩阵每行的均值,并将输入数据进行缓存用于均值差计算
  • 计算每行输入的均值差,并将均值差缓存,避免重复计算
  • 将均值差结果送入 Var_L1 模块计算 L1 范数的标准差
  • 在 Norm 模块中将缓存的均值差进行除法运算,并且与对应的可训练参数进行乘加计算。

在这里插入图片描述

权重数据存储方案

为了减少非零数据的偏移量索引成本,本设计对硬件加速器的权重数据存储进行了优化排列。

  • 加速器运算单元阵列采取权重复用的数据复用模式,在整个计算过程中不重复读取片上权重缓存中的权重数据,所以将偏移量索引与权重数据存储在一起进行同步读取,可以减少偏移量索引的读取次数
  • 在运算单元可以根据权重数据中的偏移量索引对输入数据的顺序进行重新排列,实现高效的索引匹配。

数据流

  1. 加速器的输入数据和各层权重数据从片外 DRAM 中加载,并且在所有计算完成后将最终结果写入到片外存储
  2. 片内全局缓存负责所有片上数据的缓存,减少片外访存的次数
  3. 运算单元阵列负责矩阵运算,可以兼容偏移对角稀疏权重矩阵以及密集矩阵计算,并且针对偏移对角稀疏矩阵进行了设计优化。
  4. softmax 单元负责模型中多头注意力层中的注意力分数计算
  5. 层归一化计算单元负责对编码器和解码器的子层运算结果进行归一化运算
  6. 控制模块负责控制整个计算过程中的数据读写和计算使能,根据计算矩阵类型、网络层类型和输入数据长度等信息实现加速器的灵活控制。

参考文献

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

策略模式入门:基本概念与应用

目录 策略模式策略模式结构策略模式应用场景策略模式优缺点练手题目题目描述输入描述输出描述题解 策略模式 策略模式,又称政策模式,是一种行为型设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以…

基于Spring Boot的高校智慧采购系统

1 项目介绍 1.1 摘要 随着信息技术与网络技术的迅猛发展,人类社会已跨入全新信息化纪元。传统的管理手段因其内在局限,在处理海量信息资源时日渐捉襟见肘,难以匹配不断提升的信息管理效率和便捷化需求。顺应时代发展趋势,各类先…

http数据传输确保完整性和保密性整流程方案(含源码)

往期文章回顾 【深度学习】 【深度学习】物体检测/分割/追踪/姿态估计/图像分类检测演示系统【含源码】【深度学习】YOLOV8数据标注及模型训练方法整体流程介绍及演示【深度学习】行人跌倒行为检测软件系统【深度学习】火灾检测软件系统【深度学习】吸烟行为检测软件系统【深度…

rtpengine_mr12.0 基础建设容器运行

目录 Dockerfile rtpengine.conf 容器内编译安装 RTPEngine 正常提供功能 1. 启动RTPEngine服务 2. 删除 RTPEngine服务 3. 加载内核模块 检查所有进程是否正在运行 上传到仓库 博主wx:yuanlai45_csdn 博主qq:2777137742 后期会创建粉丝群&…

实验二 图像的代数运算

一、实验目的: 1.了解图像的算术运算在数字图像处理中的初步应用。 2.体会图像算术运算处理的过程和处理前后图像的变化。 二、实验内容: 1.图像的加法运算 图像相加一般用于对同一场景的多幅图像求平均效果&…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

如何在TikTok上获得更多观看量:12个流量秘诀

TikTok作为热门海外社媒,在跨境出海行业中成为新兴的推广渠道,但你知道如何让你的TikTok赢得更多关注次数吗?如果您正在寻找增加 TikTok 观看次数的方法,接下来这12种策略,你需要一一做好! 1. 在内容中添加…

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节,“女性”话题都会被郑重地讨论。 从消费市场上来说,最近几年女性群体正在拥有越来越大的影响力,甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问,女性消费群体的崛起已经成为…

2.8亿东亚五国建筑数据分享

数据是GIS的血液! 我们现在为你分享东亚5国的2.8亿条建筑轮廓数据,该数据包括中国、日本、朝鲜、韩国和蒙古5个东亚国家完整、高质量的建筑物轮廓数据,你可以在文末查看领取方法。 数据介绍 虽然开源的全球的建筑数据已经有微软的建筑数据…

【android】【adb shell】写一个shell脚本,监听进程pid变化

前言 当前业务,需要写一个脚本,不断监视com.android.phone 进程是否异常死掉 脚本 #!/system/bin/sh last_pid"" current_pid"" while(true){current_pidps -A | grep com.android.phone | awk {print $2}if [ -n "$current…

大牛“私藏”宝刊,易Accept!中科院1区-Top,偏爱国人,2个月可录!

本周投稿推荐 SCI • 能源科学类,1.5-2.0(来稿即录25天) • 计算机类,2.0-3.0(纯正刊29天录用) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好&a…

职场办公受欢迎的电脑桌面便签,手机电脑同步的备忘录

在快节奏的职场生活中,有效的时间管理和信息记录变得尤为重要。为了帮助大家更好地应对工作挑战,好用的电脑桌面便签和手机电脑同步的备忘录,好用便签应运而生,成为了当前职场办公中的得力助手。 好用便签是一款备受青睐的电脑桌…

SecureCRT--使用sftp上传和下载文件

原文网址:SecureCRT--使用sftp上传和下载文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍SecureCRT如何在软件内直接上传和下载文件。 SecureCRT可以用如下两种方法上传和下载文件: 自带的sftp插件服务器安装rz/sz命令 本文介绍第一种方法&#xff0…

【Sping Boot2】笔记

Spring Boot 2入门 如何创建一个Spring Boot的Web例子?1.如何创建一个Spring Boot项目1.1 使用Maven构建一个Spring Boot 2项目1.1.1创建Maven工程注:Maven项目结构: 1.1.2引入SpingBoot相关依赖依赖注意事项: 1.1.3创建主类1.1.4…

CSS动画keyframes简单样例

一、代码部分 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href…

go——Swagger使用

一. 为什么后端需要配置Swagger 在前后端分离的项目中&#xff0c;后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。 Swagger是一个用于设计&#xff0c;构建和文档化API的开源框架。在Go语言中&#xff0c;Swagger可以帮助后端开发人员快速创建和定义RESTf…

JVM 堆内存结构 年轻代 老年代

堆内存 内存划分 对于大多数应用&#xff0c;Java 堆是 Java 虚拟机管理的内存中最大的一块&#xff0c;被所有线程共享。此内存区域的唯一目的就是存放对象实例&#xff0c;几乎所有的对象实例以及数据都在这里分配内存。 为了进行高效的垃圾回收&#xff0c;虚拟机把堆内存…

关键路径——C语言(理论)

关键路径&#xff0c;是项目网络中从起始事件到终止事件的最长路径&#xff0c;决定了项目的最短完成时间。 关键路径中的任务没有任何可调整的余地&#xff0c;如果任何一个任务被延迟&#xff0c;整个项目的完成时间也会被延迟。 假设我们现在有一个图&#xff1a;把图的边…

高二的他已通过NOI保送北大了,让我们一起了解他的信息学奥赛学习经历吧!!!

相信关注本号的各位&#xff0c;对于信息学奥赛已经不陌生了&#xff0c;部分同学也已经开始踏入信息学的旅程&#xff0c;但前路茫茫&#xff0c;让我们一起看看已经取得成就的同学的经历吧。 今天要介绍的这位同学&#xff0c;是来自深圳中学的高二某班的欧阳达晟同学&#x…

failed to lazily initialize a collection of role,解决Hibernate查询报错

Hibernate报错&#xff1a; org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jiuqi.gov.common.attatchment.entity.AttachmentEntity.properties, could not initialize proxy - no Session at org.hibernate.co…