chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

FPGA芯片用于神經(jīng)網(wǎng)絡(luò)算法優(yōu)化的設(shè)計實現(xiàn)方案

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

掃碼添加小助手

加入工程師交流群

前言

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

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

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

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

Transformer網(wǎng)絡(luò)結(jié)構(gòu)

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

1 embedding

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

2 positional encoding

Transformer是沒有循環(huán)網(wǎng)絡(luò),為了獲取詞匯位置關(guān)系信息,對詞匯進行位置編碼。其實就是給每個詞匯加上位置偏移,位置偏移函數(shù)選擇了sin和cos函數(shù):

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

3 encoder

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

Multi-head attention結(jié)構(gòu)如下:

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

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

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

4 decoder

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

量化方法

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

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

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

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

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

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

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

實踐

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

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

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

在tensorflow圖構(gòu)建中,將這個節(jié)點插入如下:

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

語法錯誤修正:

1 定義的custom_gradient函數(shù)中報NoneType object is not iterable,因為函數(shù)沒有返回值,默認返回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應(yīng)該有相同數(shù)據(jù)類型。

3 ValueError: Shapes must be equal rank,tf.greater中數(shù)據(jù)必須具有相同的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])的時候就會出現(xiàn)錯誤,因為N是none類型。

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

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

功能問題:

1 首先就是發(fā)現(xiàn)在訓(xùn)練過程中scale和量化數(shù)據(jù)都沒有更新,一直保持不變,而且量化值和權(quán)重數(shù)據(jù)以及scale計算的數(shù)據(jù)不相同。目前還在查找當中。

引用文獻

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1655

    文章

    22277

    瀏覽量

    629924
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4825

    瀏覽量

    106742
  • 算法優(yōu)化
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6401
  • AI芯片
    +關(guān)注

    關(guān)注

    17

    文章

    2060

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    NMSIS神經(jīng)網(wǎng)絡(luò)庫使用介紹

    :   神經(jīng)網(wǎng)絡(luò)卷積函數(shù)   神經(jīng)網(wǎng)絡(luò)激活函數(shù)   全連接層函數(shù)   神經(jīng)網(wǎng)絡(luò)池化函數(shù)   Softmax 函數(shù)   神經(jīng)網(wǎng)絡(luò)支持功能   該庫具有
    發(fā)表于 10-29 06:08

    在Ubuntu20.04系統(tǒng)中訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的一些經(jīng)驗

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

    液態(tài)神經(jīng)網(wǎng)絡(luò)(LNN):時間連續(xù)性與動態(tài)適應(yīng)性的神經(jīng)網(wǎng)絡(luò)

    1.算法簡介液態(tài)神經(jīng)網(wǎng)絡(luò)(LiquidNeuralNetworks,LNN)是一種新型的神經(jīng)網(wǎng)絡(luò)架構(gòu),其設(shè)計理念借鑒自生物神經(jīng)系統(tǒng),特別是秀麗隱桿線蟲的
    的頭像 發(fā)表于 09-28 10:03 ?648次閱讀
    液態(tài)<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>(LNN):時間連續(xù)性與動態(tài)適應(yīng)性的<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>

    無刷電機小波神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)子位置檢測方法的研究

    摘要:論文通過對無刷電機數(shù)學(xué)模型的推導(dǎo),得出轉(zhuǎn)角:與三相相電壓之間存在映射關(guān)系,因此構(gòu)建了一個以三相相電壓為輸人,轉(zhuǎn)角為輸出的小波神經(jīng)網(wǎng)絡(luò)實現(xiàn)轉(zhuǎn)角預(yù)測,并采用改進遺傳算法來訓(xùn)練網(wǎng)絡(luò)結(jié)
    發(fā)表于 06-25 13:06

    神經(jīng)網(wǎng)絡(luò)專家系統(tǒng)在電機故障診斷中的應(yīng)用

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

    基于FPGA搭建神經(jīng)網(wǎng)絡(luò)的步驟解析

    本文的目的是在一個神經(jīng)網(wǎng)絡(luò)已經(jīng)通過python或者MATLAB訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型,將訓(xùn)練好的模型的權(quán)重和偏置文件以TXT文件格式導(dǎo)出,然后通過python程序?qū)xt文件轉(zhuǎn)化為coe文件,(coe
    的頭像 發(fā)表于 06-03 15:51 ?878次閱讀
    基于<b class='flag-5'>FPGA</b>搭建<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的步驟解析

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)在多個方面存在顯著差異,以下是對兩者的比較: 一、結(jié)構(gòu)特點 BP神經(jīng)網(wǎng)絡(luò) : BP神經(jīng)網(wǎng)絡(luò)是一種多層的前饋神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 02-12 15:53 ?1284次閱讀

    如何優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)率

    訓(xùn)練過程中發(fā)生震蕩,甚至無法收斂到最優(yōu)解;而過小的學(xué)習(xí)率則會使模型收斂速度緩慢,容易陷入局部最優(yōu)解。因此,正確設(shè)置和調(diào)整學(xué)習(xí)率對于訓(xùn)練高效、準確的神經(jīng)網(wǎng)絡(luò)模型至關(guān)重要。 二、學(xué)習(xí)率優(yōu)化算法 梯度下降法及其變種 : 標準梯
    的頭像 發(fā)表于 02-12 15:51 ?1403次閱讀

    BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)步驟詳解

    BP神經(jīng)網(wǎng)絡(luò)實現(xiàn)步驟主要包括以下幾個階段:網(wǎng)絡(luò)初始化、前向傳播、誤差計算、反向傳播和權(quán)重更新。以下是對這些步驟的詳細解釋: 一、網(wǎng)絡(luò)初始化 確定網(wǎng)
    的頭像 發(fā)表于 02-12 15:50 ?1090次閱讀

    BP神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點分析

    自學(xué)習(xí)能力 : BP神經(jīng)網(wǎng)絡(luò)能夠通過訓(xùn)練數(shù)據(jù)自動調(diào)整網(wǎng)絡(luò)參數(shù),實現(xiàn)對輸入數(shù)據(jù)的分類、回歸等任務(wù),無需人工進行復(fù)雜的特征工程。 泛化能力強 : BP神經(jīng)網(wǎng)絡(luò)通過訓(xùn)練數(shù)據(jù)學(xué)習(xí)到的特征表示
    的頭像 發(fā)表于 02-12 15:36 ?1530次閱讀

    什么是BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法

    BP神經(jīng)網(wǎng)絡(luò)的反向傳播算法(Backpropagation Algorithm)是一種用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的有效方法。以下是關(guān)于BP神經(jīng)網(wǎng)絡(luò)的反
    的頭像 發(fā)表于 02-12 15:18 ?1259次閱讀

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系

    ),是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過反向傳播算法進行訓(xùn)練。BP神經(jīng)網(wǎng)絡(luò)由輸入層、一個或多個隱藏層和輸出層組成,通過逐層遞減的方式調(diào)整網(wǎng)絡(luò)權(quán)重,目的是最小化
    的頭像 發(fā)表于 02-12 15:15 ?1323次閱讀

    BP神經(jīng)網(wǎng)絡(luò)在圖像識別中的應(yīng)用

    BP神經(jīng)網(wǎng)絡(luò)在圖像識別中發(fā)揮著重要作用,其多層結(jié)構(gòu)使得網(wǎng)絡(luò)能夠?qū)W習(xí)到復(fù)雜的特征表達,適用于處理非線性問題。以下是對BP神經(jīng)網(wǎng)絡(luò)在圖像識別中應(yīng)用的分析: 一、BP
    的頭像 發(fā)表于 02-12 15:12 ?1163次閱讀

    深度學(xué)習(xí)入門:簡單神經(jīng)網(wǎng)絡(luò)的構(gòu)建與實現(xiàn)

    深度學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)是核心模型。今天我們用 Python 和 NumPy 構(gòu)建一個簡單的神經(jīng)網(wǎng)絡(luò)。 神經(jīng)網(wǎng)絡(luò)由多個神經(jīng)元組成,神經(jīng)元之間通過
    的頭像 發(fā)表于 01-23 13:52 ?834次閱讀

    人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

    在上一篇文章中,我們介紹了傳統(tǒng)機器學(xué)習(xí)的基礎(chǔ)知識和多種算法。在本文中,我們會介紹人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法,供各位老師選擇。 01 人工神經(jīng)網(wǎng)絡(luò) ? 人工
    的頭像 發(fā)表于 01-09 10:24 ?2224次閱讀
    人工<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理和多種<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>架構(gòu)方法