国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA芯片用于神經網絡算法優化的設計實現方案

454398 ? 來源:AI加速微信公眾號 ? 作者:AI加速微信公眾號 ? 2020-09-29 11:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

AI芯片(這里只談FPGA芯片用于神經網絡加速)的優化主要有三個方面:算法優化,編譯器優化以及硬件優化。算法優化減少的是神經網絡的算力,它確定了神經網絡部署實現效率的上限。編譯器優化和硬件優化在確定了算力的基礎上,盡量最大化硬件的計算和帶寬性能。經歷了一年多的理論學習,開始第一次神經網絡算法優化的嘗試。之所以從一個FPGA開發者轉向算法的學習,有幾個原因:

第一是神經網絡在AI芯片上的部署離不開算法的優化。一個浮點數的計算(加法或者乘法)和定點數的計算消耗的資源差距很大,對于FPGA這樣邏輯資源有限的芯片而言,定點計算更加友好,而且能夠提升幾倍于浮點計算的性能。

第二是神經網絡量化壓縮需要密切的結合FPGA硬件的特點,需要考慮到FPGA的存儲資源,計算符號是否能夠被FPGA友好的實現等。在AI加速器項目中,算法和FPGA都有各自的開發者,FPGA會對算法組提出要求,比如激活函數量化,normalization如何做等,然后算法組在這些特定要求下去進行算法優化。如果一個人對FPGA和算法都比較熟悉的話,那么就會更容易發現算法優化的點。

第三是FPGA開發方式的趨勢是多樣化。使用RTL語言仍然是主要的開發方法,需要一個人有一定的數字電路基礎。這種開發方式最底層,所以最靈活,可以更好的去調優。但是同時,FPGA一直渴望去突破固有的開發方式,讓一個不懂得硬件的軟件開發人員也可以很容易的上手,同時能夠縮短開發周期,比如HLS。我相信,隨著HLS的發展和FPGA芯片的演進,使用這種方式的開發者會越來越多。在那些算法復雜,更新較快的項目中,HLS更有優勢,而在一些對資源,時序,功耗要求更高的項目中,RTL更有優勢。當硬件平臺逐漸軟件化后,必然會對FPGA開發者的算法能力提出更高的要求。

Transformer網絡結構

Google在《Attention is all your need》的文章中,提出了使用全attention結構替代LSTM的transformer模型,在翻譯任務上取得了更好的成績。這個網絡結構計算量大,計算符號相對簡單,有一定的應用,所以適合用于網絡加速的展示。結構整體模型如下:

1 embedding

包含了input和output的embedding層,完成詞匯到網絡輸入向量的轉化,embedding的矩陣大小取決于詞匯量的多少,對于翻譯來講,通常都是巨大的,所以其不適合放在FPGA上進行加速,沒有量化的必要。Input和output以及softmax前的linear層都共享相同的參數,這樣做的目的,是因為共享input和output權重能夠降低word level perplexity,當然也降低了參數存儲量。最后的linear使用embedding的權重是為了將網絡向量轉化為詞語出現的logits。

2 positional encoding

Transformer是沒有循環網絡,為了獲取詞匯位置關系信息,對詞匯進行位置編碼。其實就是給每個詞匯加上位置偏移,位置偏移函數選擇了sin和cos函數:

Pos是詞匯位置,i是詞匯向量的維度位置。

3 encoder

由多層的multi-head attention和linear組成,multi-headattention和linear之間由norm和add,add是一個residual連接。

Multi-head attention結構如下:

Q,K,V分別是query,key和value,這是attention機制中抽象出來的三個重要變量,通過計算q和k的相似度,得到每個k對應的v的權重系數,然后對value進行加權求和就得到了attention值。這個是attention機制的本質思想。Transformer中使用softmax函數來描述相似度,當然還有很多其它方法來描述。

這里添加了一個scale1/squart(dk),這其實是一個參數的調節,防止矩陣乘法得到結果太大而導致softmax函數的梯度太小。

這里還要注意transformer網絡沒有對Q,K,V直接進行單一的attention計算,而是對這三個變量進行了拆分,平行計算拆分后的變量,得到的attention值最后在拼接在一起。

4 decoder

Decoder和encoder也有類似的結構,不同的是,在decoder中由三層:mask-multi-head attention,multi-head attention以及FC構成。帶mask的multi-head是為了屏蔽target句子詞之后的詞,因為對句子的翻譯應該是由前向后進行的,后邊的詞語不應該出現在前邊詞語的預測之中。

量化方法

量化實際是一個仿射變換:

其中s是scale,q是量化后的數據,z是偏移,如果采用對稱變換,令z為0,那么就有:

去除中心z,可以消除矩陣計算中的交叉項。接下來就是如何獲得q和s。q和s通過如下方式獲得:

Clip操作是在最小值n和最大值p之間獲得x/s的向下整數值,如果x/s向下整數值超過n或者p就取n和p。

S的值通過訓練獲得,為了保證能夠很好的在FPGA上計算,s的值最好可以取得2的冪次。

由于s和x都是需要訓練的參數,所以我們需要求得他們的梯度值,梯度值比較簡單,對q(x, s)的x和x進行求導,有:

對x的梯度使用的是hinton提出的strait-through estimator,這樣做是因為可以消除量化引入的噪聲,更快的訓練。

實踐

transformer中有dense,matmul等操作,需要量化的數據有dense中的權重,matmul中的Q,V,K變量。第一次沒有什么經驗,還是一點點來。首先選擇其中一個dense進行量化。從github上下載了一個transformer的實現源碼https://github.com/Kyubyong/transformer,這個代碼寫的很簡潔,容易看懂。官方的實現代碼比較復雜,需要安裝的庫較多,曾經也嘗試過,因為某些庫無法安裝成功,所以放棄了。在使用Kyubyong的transformer的時候,也遇到了一個問題,訓練可以完成,但是在eval的時候,報了維度的錯誤,后來找到是在positional encoding的embedding中,經過查找,源碼中存在一個bug,就是eval的數據集的maxlen是設置了10000,但是在embedding中傳入的查找表維度是從hparams傳入的,兩者不相同。不知道作者為什么會有這個bug。經過改正可以正常完成eval了。

量化第一步是需要將量化插入到tensorflow的圖結構中,即在要量化的權重數據之后。這需要重新定義op和梯度,tensorflow中提供了tf.custom_gradient裝飾函數來對梯度和op進行定義,所以我定義了如下梯度:

其中STE_clip中的y計算了對x的量化值,grad函數是對x和s進行梯度計算。X和s分別是傳入的(d, d)權重和scale。dy是傳入的上一個節點的梯度,所以完成和STE_cllip節點梯度的乘積,這是由函數梯度計算的傳遞性質決定的。這里需要注意的是,s是一個標量,q(x,s)對s梯度是一個矩陣向量,需要和dy進行點積和。

在tensorflow圖構建中,將這個節點插入如下:

這里還添加了tf.print用于打印量化后的數據。

語法錯誤修正:

1 定義的custom_gradient函數中報NoneType object is not iterable,因為函數沒有返回值,默認返回none。

2 TypeError: Input 'e' of 'Select' Op has type float32 that does not match type int32 of argument 't'. 因為使用tf.greater(x, y)x和y應該有相同數據類型。

3 ValueError: Shapes must be equal rank,tf.greater中數據必須具有相同的rank,即維度。

4 ValueError: Shape must be rank 1 but is rank 2,tf.tile(x, axis)中x必須是具有維度的,不能夠是0維。

5 ValueError: Shape must be rank 2 but is rank 3,tf.matmul中兩個矩陣維度必須相同。

6 TypeError: Failed to convert object of type to Tensor. Contents: [None]. Consider casting elements to a supported type。使用tf.tile的時候,shape必須為tensor量。

7 TypeError: Expected int32, got None of type '_Message' instead. 這是因為輸入為[N, T, d_model],其中N開始是none的,所以當使用tf.constant([N,1,1])的時候就會出現錯誤,因為N是none類型。

8 Incompatible shapes between op input and calculated input gradient。輸入的數據和對該輸入數據的梯度維度不一致。

9 使用tf.print無法打印出數據。這是因為print是tensorflow中的一個節點,需要將這個節點加入圖中,然后才能輸出。而且只有計算流經這個print節點,其才會發揮作用。形象的描述應該是:

功能問題:

1 首先就是發現在訓練過程中scale和量化數據都沒有更新,一直保持不變,而且量化值和權重數據以及scale計算的數據不相同。目前還在查找當中。

引用文獻

1 Learning Accurate Integer Transformer Machine-Translation Models,Ephrem Wu

2 Trained uniform quantization for accurate and efficient neural network inference on fixedpoint hardware,Sambhav R. Jain, Albert Gural, Michael Wu, and Chris Dick

3 Attention Is All You Need,Ashish Vaswani,Noam Shazeer,Niki Parmar

4 Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations,Itay Hubara,Matthieu Courbariaux,Daniel Soudry

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1660

    文章

    22408

    瀏覽量

    636197
  • 神經網絡
    +關注

    關注

    42

    文章

    4838

    瀏覽量

    107742
  • 算法優化
    +關注

    關注

    0

    文章

    4

    瀏覽量

    6422
  • AI芯片
    +關注

    關注

    17

    文章

    2126

    瀏覽量

    36765
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    神經網絡的初步認識

    日常生活中的智能應用都離不開深度學習,而深度學習則依賴于神經網絡實現。什么是神經網絡?神經網絡的核心思想是模仿生物神經系統的結構,特別是大
    的頭像 發表于 12-17 15:05 ?321次閱讀
    <b class='flag-5'>神經網絡</b>的初步認識

    CNN卷積神經網絡設計原理及在MCU200T上仿真測試

    數的提出很大程度的解決了BP算法優化深層神經網絡時的梯度耗散問題。當x&gt;0 時,梯度恒為1,無梯度耗散問題,收斂快;當x&lt;0 時,該層的輸出為0。 CNN
    發表于 10-29 07:49

    NMSIS神經網絡庫使用介紹

    :   神經網絡卷積函數   神經網絡激活函數   全連接層函數   神經網絡池化函數   Softmax 函數   神經網絡支持功能   該庫具有
    發表于 10-29 06:08

    構建CNN網絡模型并優化的一般化建議

    通過實踐,本文總結了構建CNN網絡模型并優化的一般化建議,這些建議將會在構建高準確率輕量級CNN神經網絡模型方面提供幫助。 1)避免單層神經網絡:我們清楚
    發表于 10-28 08:02

    在Ubuntu20.04系統中訓練神經網絡模型的一些經驗

    , batch_size=512, epochs=20)總結 這個核心算法中的卷積神經網絡結構和訓練過程,是用來對MNIST手寫數字圖像進行分類的。模型將圖像作為輸入,通過卷積和池化層提取圖像的特征,然后通過全連接層進行分類預測。訓練過程中,模型通過最小化損失函數來
    發表于 10-22 07:03

    液態神經網絡(LNN):時間連續性與動態適應性的神經網絡

    1.算法簡介液態神經網絡(LiquidNeuralNetworks,LNN)是一種新型的神經網絡架構,其設計理念借鑒自生物神經系統,特別是秀麗隱桿線蟲的
    的頭像 發表于 09-28 10:03 ?1197次閱讀
    液態<b class='flag-5'>神經網絡</b>(LNN):時間連續性與動態適應性的<b class='flag-5'>神經網絡</b>

    【「AI芯片:科技探索與AGI愿景」閱讀體驗】+神經形態計算、類腦芯片

    AI芯片不僅包括深度學細AI加速器,還有另外一個主要列別:類腦芯片。類腦芯片是模擬人腦神經網絡架構的芯片。它結合微電子技術和新型
    發表于 09-17 16:43

    神經網絡的并行計算與加速技術

    隨著人工智能技術的飛速發展,神經網絡在眾多領域展現出了巨大的潛力和廣泛的應用前景。然而,神經網絡模型的復雜度和規模也在不斷增加,這使得傳統的串行計算方式面臨著巨大的挑戰,如計算速度慢、訓練時間長等
    的頭像 發表于 09-17 13:31 ?1122次閱讀
    <b class='flag-5'>神經網絡</b>的并行計算與加速技術

    【「AI芯片:科技探索與AGI愿景」閱讀體驗】+第二章 實現深度學習AI芯片的創新方法與架構

    連接定義了神經網絡的拓撲結構。 不同神經網絡的DNN: 一、基于大模型的AI芯片 1、Transformer 模型與引擎 1.1 Transformer 模型概述 Transformer 模型的出現
    發表于 09-12 17:30

    無刷電機小波神經網絡轉子位置檢測方法的研究

    摘要:論文通過對無刷電機數學模型的推導,得出轉角:與三相相電壓之間存在映射關系,因此構建了一個以三相相電壓為輸人,轉角為輸出的小波神經網絡實現轉角預測,并采用改進遺傳算法來訓練網絡
    發表于 06-25 13:06

    神經網絡專家系統在電機故障診斷中的應用

    的診斷誤差。仿真結果驗證了該算法的有效性。 純分享帖,需要者可點擊附件免費獲取完整資料~~~*附件:神經網絡專家系統在電機故障診斷中的應用.pdf【免責聲明】本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版
    發表于 06-16 22:09

    基于FPGA搭建神經網絡的步驟解析

    本文的目的是在一個神經網絡已經通過python或者MATLAB訓練好的神經網絡模型,將訓練好的模型的權重和偏置文件以TXT文件格式導出,然后通過python程序將txt文件轉化為coe文件,(coe
    的頭像 發表于 06-03 15:51 ?1190次閱讀
    基于<b class='flag-5'>FPGA</b>搭建<b class='flag-5'>神經網絡</b>的步驟解析

    AI神經網絡降噪算法在語音通話產品中的應用優勢與前景分析

    隨著人工智能技術的快速發展,AI神經網絡降噪算法在語音通話產品中的應用正逐步取代傳統降噪技術,成為提升語音質量的關鍵解決方案。相比傳統DSP(數字信號處理)降噪,AI降噪具有更強的環境適應能力、更高
    的頭像 發表于 05-16 17:07 ?1501次閱讀
    AI<b class='flag-5'>神經網絡</b>降噪<b class='flag-5'>算法</b>在語音通話產品中的應用優勢與前景分析

    NVIDIA實現神經網絡渲染技術的突破性增強功能

    近日,NVIDIA 宣布了 NVIDIA RTX 神經網絡渲染技術的突破性增強功能。NVIDIA 與微軟合作,將在 4 月的 Microsoft DirectX 預覽版中增加神經網絡著色技術,讓開
    的頭像 發表于 04-07 11:33 ?1161次閱讀

    神經網絡壓縮框架 (NNCF) 中的過濾器修剪統計數據怎么查看?

    無法觀察神經網絡壓縮框架 (NNCF) 中的過濾器修剪統計數據
    發表于 03-06 07:10