引言

AIX(artificial intelligence aXellerator)是韓國SK公司為語音識別提供的一個解決方案,應用於微軟的開源語音識別框架Kaldi。AIX使用了Xilinx的FPGA平臺,充分利用了FPGA能提供的外存訪問帶寬和DSP資源。在自動語言識別(ASR)中,在性能和功耗上超過了分別超過了最領先的CPU 10.2倍和流行的GPU20.1倍。

01 硬體平臺和演算法介紹

AIX使用了Xilinx Kintex Ultrascale KCU1500板卡,板卡包括一個KU115晶元,4塊4GB DDR4-2400的DRAM,每塊晶元有64個DQ引腳。最大可以支持76.8GB/s的帶寬。KU115晶元資源如下:

圖1.1 KU115資源

Kaldi是一個基於C++編寫的用於語音識別的開源工具,它依賴於兩個外部工具庫:一個是openFst,另外一個是線性計算,包括矩陣乘法,以及矩陣和向量的操作。openFst基於有限狀態轉換器演算法,可以用於語音和語言識別中。所以在ASR中包含了大量的矩陣乘法運算。AIX主要的目的就是加速這些矩陣乘法運算。

圖1.2 Kaldi庫

一個基本的語音識別演算法過程如下:首先採集人的語音信號,將語音信號分割成一段段向量,每個向量會有一些重疊。將每段語音信號經過FFT等操作,轉換為MFCC或者倒譜,實際上就是做了一些向量的轉換操作。MFCC或者倒譜的表達能更好的提取語音特徵。在論文中每個向量長度為120。為了能夠表現不同向量之間的關係,將每個Ci向量最近鄰的2n個向量組合為一個整體,然後送到MLP進行運算。通過MLP提取特徵,在進行HMM操作進行分類處理。AIX就是加速MLP這部分操作,因為這部分佔據了整個演算法的大部分運算,涉及到大量矩陣運算。

?

圖1.3 ASR演算法過程

02 DNN硬體架構

圖2.1 AIX硬體架構

在KU115上,AIX由兩個核組成,每個核的結構是一樣的。這兩個核分別分佈在晶元的兩個die上。每個核使用兩個DDR4,每個提供38.4GB/s的帶寬。核心計算單元是脈動陣列結構,大小為64x40,總共使用了2560個DSP。語音向量從脈動陣列左側進入,權重數據從上邊脈動進入,然後在每個DSP進行乘法,每個DSP還進行累加。最後可以輸出一個64X40大小的矩陣。因此進入的語音向量,每次在緩存中獲得了40個120的語音向量後,進行轉置操作,得到120X40的向量組合,然後脈動送入陣列。完成矩陣乘法。這種演算法在之前的文章《在DNN中FPGA都做了什麼?》有詳細描述。這對語音向量的帶寬要求是一個FPGA時鐘週期40x16bit,權重為64x16bit。64的選擇可以適配DDR的帶寬38.4GB/s。這樣既充分利用了DSP資源,也更好的利用了DDR帶寬。這種方案適合處理矩陣乘矩陣,但是對於矩陣乘向量的DSP利用率就會很低了。因為權重的IO帶寬較低。

圖2.2 矩陣x矩陣計算陣列

這個板卡是通過PCIE和主機連接,主機完成DNN之外的HMM,decoder等操作。開始主機通過PCIE將一定量的權重存儲到板卡的DDR中,然後AIX主動去獲取權重數據。權重數據是不斷被複用的,因此初始時刻被載入到DDR中以後,就不需要再載入權重了。除非權重很多超過了DDR的存儲空間。主要更新的是語音向量,需要通過PCIE不斷下載到片上。當片上向量隊列存儲了40個後,就可以進行轉置送到脈動陣列進行運算。

對於網路中的其他操作,比如sigmoid,tangent,leakyRelu等,都是通過查找表完成的。查找表的方式可以更靈活的用於這些雜七雜八的運算。這些運算數學公式複雜,直接計算會耗費很多邏輯,不如查找表簡潔。缺點就是需要較大的存儲空間,空間是和數據精度有關的,精度越高消耗存儲空間越大。

03 軟體架構

為了能夠將AIX更好的融入到基於Kaldi的ASR計算中,需要很好的和數據中心的軟體端進行匹配。因此提出三種軟體模型來解決這個問題。

一個模型用於對AIX的配置,即在AIX計算前,需要準備好權重和偏置數據。這種準備工作是由NN converter軟體來做的,主要就是判定一個網路中哪些層可以被AIX加速,然後將這部分權重發送給AIX。

另外一個是監測模型。為了保證AIX的穩定運行,需要進行大量的邊緣條件測試,因此監測軟體來檢測一些異常情況。主要包括:功耗,溫度,資源利用,設備狀態。

最後一個是用於處理語音向量的軟體。為了保證實時處理語音數據,每8個語音向量組成一個batch,然後一起寫入AIX。為了提高脈動陣列的利用效率,語音緩存儘可能收集更多向量,然後開始計算。為了減小收集時間,軟體端提供了多個服務通道,同時準備語音向量,並向AIX發送或者接收來自AIX的結果。由於處理不同語音向量是有順序的,為了保證結果也能夠保持順序不變。每個通道增加了鎖機制來保持向量的發送和接收順序。當需要向AIX寫的時候,就產生一個有wlock的寫進程,直到wlock被解鎖,這個進程才開始往AIX發送數據。同理讀進程也有一個rlock。這些鎖會保證進程間的依賴和同步。

圖3.1 軟體架構

圖3.2 NN converter的作用

04 結果

現在看資源利用率:

圖4.1 資源利用率

AIX的性能和Intel的E5-2620和Nvidia的P100 GPU進行了對比。同時考慮上功耗和語音識別時間,AIX都超過了CPU和GPU。

圖4.2 AIX和CPU以及GPU的性能對比

總結

AIX採用了脈動陣列的架構,充分利用了矩陣乘法中數據的復用率。能夠最大限度利用內存帶寬來獲得最大性能。

文獻

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.

往期回顧

1 在DNN中FPGA做了什麼?

2 稀疏LSTM架構

3 LSTM原理

推薦閱讀:

相關文章