論文解析——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=1K?exk?exj??

  • 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. 控制模塊負責控制整個計算過程中的數據讀寫和計算使能,根據計算矩陣類型、網絡層類型和輸入數據長度等信息實現加速器的靈活控制。

參考文獻

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40957.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40957.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM垃圾回收性能調優實戰指南

JVM垃圾回收性能調優實戰指南 一、引言 在Java應用程序中,垃圾回收(Garbage Collection, GC)是自動管理內存的重要機制。然而,不恰當的垃圾回收配置可能導致性能瓶頸,如頻繁的GC暫停、內存碎片過多等。因此&#xff…

kpatch制作內核熱補丁步驟總結

零、原理及參考 kpatch入門實踐教程-CSDN博客 Kpatch 使用過程及其原理-CSDN博客 一、準備工作 安裝對應版本的kpatch-build.rpm并解決依賴diff -Naur dir1 dir2 > hot.patch 拿到補丁文件下載對應內核版本的src.rpm安裝好對應的開發包kernel-debuginfo,kern…

從GPT-1到GPT-3 預訓練語言模型的演進與突破

本文由 ChatMoney團隊出品 前言 Generative Pre-trained Transformer(GPT)系列是由OpenAI開發的預訓練語言模型,它們在多種NLP任務中取得了令人矚目的成績,包括文章生成、代碼生成、機器翻譯和問答等。GPT系列模型的核心思想是通…

數據庫開發:mysql基礎一

文章目錄 數據庫開發Day15:MySQL基礎(一)一、MySQL介紹與安裝【1】MySQL介紹(5)啟動MySQL服務(6)修改root登陸密碼 二、SQL簡介三、數據庫操作四、數據表操作4.1、數據庫數據類型4.2、創建數據表…

對標 GPT-4o 的開源實時語音多模態模型:Moshi

是由法國的 AI 實驗室 Kyutai 推出的實時語音多模態模型,支持聽、說、看,最關鍵的是你現在就可以在瀏覽器中使用,如果這個鏈接延遲高,可以試試這個, 無需輸入郵箱,點擊 Join queue 即可。 簡單體驗了下,比…

#### golang中【堆】的使用及底層 ####

聲明,本文部分內容摘自: Go: 深入理解堆實現及應用-騰訊云開發者社區-騰訊云 數組實現堆 | WXue 堆(Heap)是實現優先隊列的數據結構,Go提供了接口和方法來操作堆。 應用 package mainimport ("container/heap&q…

結構方程模型-驗證性因子分析模型

初級 第7講 驗證性因子分析模_嗶哩嗶哩_bilibili

使用 ESP32 接收來自 MAX4466 模擬麥克風模塊的數據,并通過 DAC 輸出模擬音頻信號,可以通過以下步驟實現:

硬件準備 ESP32 開發板MAX4466 模擬麥克風模塊揚聲器或耳機接線 MAX4466 模塊輸出(AO) -> ESP32 ADC 引腳(如 GPIO 34)ESP32 DAC 引腳(如 GPIO 25 或 GPIO 26) -> 揚聲器或耳機軟件準備 音頻采集DAC 轉碼并播放代碼實現 以下代碼展示了如何從 MAX4466 讀取模擬音頻…

【Go語言入門學習筆記】Part7.閉包和defer關鍵字

一、前言 閉包有點像對象,而defer適合于類似功能中利用資源時,提前寫幾句defer 釋放資源,防止后面釋放資源忘記寫釋放資源。 二、學習代碼 package mainimport ("fmt" )// getC的返回值是一個函數,需要的參數為空&…

GitHub Pull Request流程詳解

GitHub Pull Request流程詳解 在協作開發中,GitHub的Pull Request(PR)功能至關重要,它允許開發者在代碼庫中進行修改、審查和合并代碼。本文將詳細介紹GitHub Pull Request的完整流程,幫助你更好地理解和使用這一強大…

網絡安全的十字路口:向“架構化”轉移

市場條件正在快速變化 針對上述這些問題,在這段時間里,安全技術供應商推出了許多技術解決方案,比如SIEM、SOAR、XDR、UEBA等,但新產品的推出并未使得安全態勢有所好轉,許多問題依然存在,這導致了市場動態的…

【DevOps】Java內存分配與JVM參數詳解

目錄 引言 JVM內存結構 JVM參數概述 堆內存分配 年輕代與老年代 調整堆內存大小 調整年輕代與老年代比例 元空間分配 調整元空間大小 垃圾回收 調整GC參數 調整GC日志 線程棧分配 調整線程棧大小 性能調優 結論 在Java開發中,理解Java虛擬機&#x…

claude3.5寫作——《基于灰色預測的中國人口數量預測》

文章目錄 站點和提問引言一、灰色預測模型介紹二、中國歷年人口數據三、灰色預測模型的建立1.建立原始序列2.生成1-AGO序列3.計算背景值4.構造數據矩陣并計算參數5.模型檢驗6.模型預測 四、預測結果分析五、政策建議結語參考文獻 站點和提問 站點:中國官方克勞德3.…

如何更改 Python pip 源為國內源

在使用 Python 安裝包工具 pip 時,經常會遇到下載速度慢的問題。這通常是因為默認使用的官方源 https://pypi.org/simple 在國內訪問速度較慢。為了提高下載速度,我們可以將 pip 源更改為國內的鏡像源。本文將介紹如何臨時和永久地更改 pip 源為國內源。…

光伏電站數據采集方案(基于工業路由器部署)

? 一、方案概述 本方案采用星創易聯SR500工業路由器作為核心網關設備,實現對光伏電站現場數據的實時采集、安全傳輸和遠程監控。SR500具備多接口、多功能、高可靠性等特點,能夠滿足光伏電站數據采集的各種需求。(key-iot.com/iotlist/sr500…

RK3568平臺(opencv篇)ubuntu18.04上安裝opencv環境

一.什么是 OpenCV-Python OpenCV-Python 是一個 Python 綁定庫,旨在解決計算機視覺問題。 ? Python 是一種由 Guido van Rossum 開發的通用編程語言,它很快就變得非常流行,主要是 因為它的簡單性和代碼可讀性。它使程序員能夠用更少的代碼行…

C++ 運算符的優先級和關聯性表

C 運算符的優先級和關聯性表 1. Precedence and associativity (優先級和結合性)2. Alternative spellings (替代拼寫)3. C operator precedence and associativity table (C 運算符的優先級和關聯性表)References C documentation (C 文檔) https://learn.microsoft.com/en-us…

網絡IO模型之多路復用器.md

多路復用是什么?怎么理解? 本文主要涉及為 程序中處理網絡IO時的模型,對于系統內核而言網絡IO模型。這里只做普及使用 前置知識,什么是IO?怎么理解IO IO其實就是In和Out。中文翻譯是輸入和輸出,只要涉及到輸…

clone()方法

在Java中,clone() 方法是一個非常有趣且強大的工具,用于創建對象的一個副本。這個方法位于 Object 類中,因此可以被所有類使用。讓我們討論一下它的幾個要點: 什么是克隆? 克隆就是創建一個對象的新副本,這…

2005-2022全國及各省家庭承包耕地流轉總面積及經營耕地面積數據(無缺失)

2005-2022全國及各省家庭承包耕地流轉總面積及經營耕地面積數據(無缺失) 1、時間:2005-2022年 2、范圍:全國及30省 3、指標:家庭承包耕地流轉總面積、家庭承包經營耕地面積、土地流轉率、 4、來源:農村…