AIX(artificial intelligence aXellerator)是韓國SK公司為語音識別提供的一個解決方案,應(yīng)用于微軟的開源語音識別框架Kaldi。AIX使用了Xilinx的FPGA平臺,充分利用了FPGA能提供的外存訪問帶寬和DSP資源。在自動語言識別(ASR)中,在性能和功耗上超過了分別超過了最領(lǐng)先的CPU 10.2倍和流行的GPU20.1倍。
1. 硬件平臺和算法介紹
AIX使用了Xilinx Kintex Ultrascale KCU1500板卡,板卡包括一個KU115芯片,4塊4GB DDR4-2400的DRAM,每塊芯片有64個DQ引腳。最大可以支持76.8GB/s的帶寬。KU115芯片資源如下:
圖1.1 KU115資源
Kaldi是一個基于C++編寫的用于語音識別的開源工具,它依賴于兩個外部工具庫:一個是openFst,另外一個是線性計算,包括矩陣乘法,以及矩陣和向量的操作。openFst基于有限狀態(tài)轉(zhuǎn)換器算法,可以用于語音和語言識別中。所以在ASR中包含了大量的矩陣乘法運算。AIX主要的目的就是加速這些矩陣乘法運算。
圖1.2 Kaldi庫
一個基本的語音識別算法過程如下:首先采集人的語音信號,將語音信號分割成一段段向量,每個向量會有一些重疊。將每段語音信號經(jīng)過FFT等操作,轉(zhuǎn)換為MFCC或者倒譜,實際上就是做了一些向量的轉(zhuǎn)換操作。MFCC或者倒譜的表達(dá)能更好的提取語音特征。在論文中每個向量長度為120。為了能夠表現(xiàn)不同向量之間的關(guān)系,將每個Ci向量最近鄰的2n個向量組合為一個整體,然后送到MLP進(jìn)行運算。通過MLP提取特征,在進(jìn)行HMM操作進(jìn)行分類處理。AIX就是加速MLP這部分操作,因為這部分占據(jù)了整個算法的大部分運算,涉及到大量矩陣運算。
圖1.3 ASR算法過程
2. DNN硬件架構(gòu)
圖2.1 AIX硬件架構(gòu)
在KU115上,AIX由兩個核組成,每個核的結(jié)構(gòu)是一樣的。這兩個核分別分布在芯片的兩個die上。每個核使用兩個DDR4,每個提供38.4GB/s的帶寬。核心計算單元是脈動陣列結(jié)構(gòu),大小為64x40,總共使用了2560個DSP。語音向量從脈動陣列左側(cè)進(jìn)入,權(quán)重數(shù)據(jù)從上邊脈動進(jìn)入,然后在每個DSP進(jìn)行乘法,每個DSP還進(jìn)行累加。最后可以輸出一個64X40大小的矩陣。因此進(jìn)入的語音向量,每次在緩存中獲得了40個120的語音向量后,進(jìn)行轉(zhuǎn)置操作,得到120X40的向量組合,然后脈動送入陣列。完成矩陣乘法。這種算法在之前的文章《在DNN中FPGA都做了什么?》有詳細(xì)描述。這對語音向量的帶寬要求是一個FPGA時鐘周期40x16bit,權(quán)重為64x16bit。64的選擇可以適配DDR的帶寬38.4GB/s。這樣既充分利用了DSP資源,也更好的利用了DDR帶寬。這種方案適合處理矩陣乘矩陣,但是對于矩陣乘向量的DSP利用率就會很低了。因為權(quán)重的IO帶寬較低。
圖2.2 矩陣x矩陣計算陣列
這個板卡是通過PCIE和主機連接,主機完成DNN之外的HMM,decoder等操作。開始主機通過PCIE將一定量的權(quán)重存儲到板卡的DDR中,然后AIX主動去獲取權(quán)重數(shù)據(jù)。權(quán)重數(shù)據(jù)是不斷被復(fù)用的,因此初始時刻被加載到DDR中以后,就不需要再加載權(quán)重了。除非權(quán)重很多超過了DDR的存儲空間。主要更新的是語音向量,需要通過PCIE不斷下載到片上。當(dāng)片上向量隊列存儲了40個后,就可以進(jìn)行轉(zhuǎn)置送到脈動陣列進(jìn)行運算。
對于網(wǎng)絡(luò)中的其他操作,比如sigmoid,tangent,leakyRelu等,都是通過查找表完成的。查找表的方式可以更靈活的用于這些雜七雜八的運算。這些運算數(shù)學(xué)公式復(fù)雜,直接計算會耗費很多邏輯,不如查找表簡潔。缺點就是需要較大的存儲空間,空間是和數(shù)據(jù)精度有關(guān)的,精度越高消耗存儲空間越大。
3. 軟件架構(gòu)
為了能夠?qū)IX更好的融入到基于Kaldi的ASR計算中,需要很好的和數(shù)據(jù)中心的軟件端進(jìn)行匹配。因此提出三種軟件模型來解決這個問題。
一個模型用于對AIX的配置,即在AIX計算前,需要準(zhǔn)備好權(quán)重和偏置數(shù)據(jù)。這種準(zhǔn)備工作是由NN converter軟件來做的,主要就是判定一個網(wǎng)絡(luò)中哪些層可以被AIX加速,然后將這部分權(quán)重發(fā)送給AIX。
另外一個是監(jiān)測模型。為了保證AIX的穩(wěn)定運行,需要進(jìn)行大量的邊緣條件測試,因此監(jiān)測軟件來檢測一些異常情況。主要包括:功耗,溫度,資源利用,設(shè)備狀態(tài)。
最后一個是用于處理語音向量的軟件。為了保證實時處理語音數(shù)據(jù),每8個語音向量組成一個batch,然后一起寫入AIX。為了提高脈動陣列的利用效率,語音緩存盡可能收集更多向量,然后開始計算。為了減小收集時間,軟件端提供了多個服務(wù)通道,同時準(zhǔn)備語音向量,并向AIX發(fā)送或者接收來自AIX的結(jié)果。由于處理不同語音向量是有順序的,為了保證結(jié)果也能夠保持順序不變。每個通道增加了鎖機制來保持向量的發(fā)送和接收順序。當(dāng)需要向AIX寫的時候,就產(chǎn)生一個有wlock的寫進(jìn)程,直到wlock被解鎖,這個進(jìn)程才開始往AIX發(fā)送數(shù)據(jù)。同理讀進(jìn)程也有一個rlock。這些鎖會保證進(jìn)程間的依賴和同步。
圖3.1 軟件架構(gòu)
圖3.2 NN converter的作用
4. 結(jié)果
現(xiàn)在看資源利用率:
圖4.1 資源利用率
AIX的性能和Intel的E5-2620和Nvidia的P100 GPU進(jìn)行了對比。同時考慮上功耗和語音識別時間,AIX都超過了CPU和GPU。
圖4.2 AIX和CPU以及GPU的性能對比
總結(jié)
AIX采用了脈動陣列的架構(gòu),充分利用了矩陣乘法中數(shù)據(jù)的復(fù)用率。能夠最大限度利用內(nèi)存帶寬來獲得最大性能。
文獻(xiàn)
1. Minwook Ahn, S.J.H., Wonsub Kim, Seungrok Jung, Yeonbok Lee, Mookyoung Chung, Woohyung Lim, Youngjoon Kim, AIX A high performance and energy ef?cient inference accelerator on FPGA for a DNN-based commercial speech recognition. FPGA, 2019.
編輯:hfy
-
加速器
+關(guān)注
關(guān)注
2文章
790瀏覽量
37675 -
Xilinx
+關(guān)注
關(guān)注
71文章
2155瀏覽量
120850 -
語音識別
+關(guān)注
關(guān)注
38文章
1710瀏覽量
112490 -
AIX
+關(guān)注
關(guān)注
0文章
10瀏覽量
9839
發(fā)布評論請先 登錄
相關(guān)推薦
評論