UIUC陳德銘教授:「萬能晶片」FPGA與深度學習

機器之心發表於2018-06-23

人工智慧的風潮從技術一路蔓延到硬體,讓「晶片」成為今年行業裡盛極一時的主題。人們關注通用晶片領域裡 CPU 和 GPU 不斷重新整理的基準(benchmark),更對專用晶片(ASIC)領域不同場景下不斷問世的解決方案表示出了空前的熱情。

而眾所周知,在專用晶片與通用晶片中間,還有一個更為靈活,也更為神秘的領域:FPGA。無論是英特爾天價的收購還是微軟與 IBM 雄心勃勃的計劃,都讓人對其更加好奇。而「萬能晶片」的名稱,以及多樣化的職責範圍:它可以是智慧手機裡不起眼的一個小元件,也可以是數千美金一塊的開發板,也讓人對其真面目更加疑惑。

 FPGA 與深度學習的關係究竟是什麼?它適合加速何種型別的運算?適合應用於何種場景?6 月,機器之心採訪了美國伊利諾伊大學香檳分校電氣與計算機工程系(UIUC ECE)教授、深度學習演算法硬體加速解決方案創業公司 Inspirit IoT 創始人陳德銘,與他聊了聊「萬能晶片」FPGA 在深度學習領域的用法。陳教授於近期宣佈兼任國內計算機視覺領域創業公司觸景無限的首席科學家。

 以下為採訪實錄。

機器之心:從演算法的角度,FPGA 適合於加速哪些運算?

 FPGA 的優勢在於可定製化的並行。它可以為了特定演算法專門定製邏輯單元。例如,演算法中需要完成一個開三次方的運算,在通用晶片上需要一長串指令實現它,但是在 FPGA 上可以為這個特定運算設計一個單元。

 定製化的一個「極限」的例子是,如果能夠把神經網路中的引數全部二值化、特徵圖(feature map)也全部二值化,那麼甚至可以不用乘法器,而是用異或門XOR gate)完成計算,會有異常強大的表現。即使不全部二值化,因為全部二值化會讓準確度明顯下降,只要合理使用各種低位寬的運算,仍可以讓 FPGA 大放異彩。比如在我們最近和 IBM 合作的 ELB-NN 專案中,我們可以在功耗低於 5 瓦的情形下,讓神經網路在 FPGA 上的算力達到 10.3 TOPS,同時依然維持非常高的準確度。

另一個例子是微軟的 Brainwave FPGA 專案,透過使用特殊的 8-bit 的浮點運算,可以在高容量的 FPGA 上達到 40 TOPS。 

值得一提的是,LSTM 等神經網路每一步操作都很相似,這種整體運算過程是序列的演算法也非常適用於用 FPGA 進行加速。FPGA 非常擅長處理流資料,可以設計流水線機制,使得在運算過程中不需要將中間資料存入記憶體而是直接送到下一步進行操作。

機器之心:相比於其他晶片,FPGA 在實現深度學習模型時有哪些結構帶來的優勢?

FPGA 的引腳比一般的晶片多,同時它的邏輯單元可以完全根據演算法要求來重組從而產生定製化的資料通路(datapath),因此非常適合處理大批次流資料。它不像 GPU 一樣需要反覆調取片外儲存中的資料,理想狀態時,只要資料一次性流進去再流出來,演算法就完成了,因此,FPGA 非常適合具有低延遲需求的任務。

另外 FPGA 的速度快、功率低的特點也讓它在能耗方面相比於 CPU、GPU 也有很大優勢。

比如我們在 FPGA 上實現了長期迴圈卷積網路(Long-term Recurrent Convolutional Network),它的速度 ( latency ) 比 GPU 快 3.1 倍,FPGA 的功率比 GPU 小 5.6 倍,最終整體能耗降低 17 倍左右。

機器之心:從行業的角度,FPGA 都能夠用於哪些機器學習深度學習任務的加速?

 在終端,有些自動駕駛公司的車上系統中就採用了 FPGA 完成一些實時檢測識別任務。例如,我曾經代表 UIUC 與小鵬汽車的副總裁、機器學習專家谷俊麗女士交流,她提到,FPGA 可以憑藉訊號處理和低能耗方面的優勢,成為一個可靠的第二系統,在汽車的第一系統出現失誤的時候,作為安全模式介入進來。IoT 方面的應用就更多了,無論是安防還是智慧家居,FPGA 都會有機會進入市場。

在雲端,也有結合 FPGA 的巨大空間。之前,微軟的 Project Catapult 就搭建起了大規模的 FPGA 雲伺服器。現在 Catapult 正在執行搜尋和資料儲存方面的運算,同時,他們也在積極地思考如何把機器學習運算部署在上面,包括是否能將 FPGA 作為其 Azure 雲的後端支援。亞馬遜 AWS 的 FPGA 雲端計算已經很有規模了,並且一直在大力推動之中。最近,國內創業公司深鑑也開始結合華為的雲端 FPGA 來進行深度學習演算法的加速,特別在基於 LSTM 的語音識別上非常有優勢。

機器之心:能否介紹一下使用高層次綜合(HLS)自動生成暫存器級(RTL)實現與手工用硬體描述語言(HDL)進行實現的區別?

對於深度學習相關演算法來說,HLS 是有優勢的。 

當你閱讀用高層語言描述的深度學習模型時,你會發現模型是有規律的。比如,卷積操作在 C 語言裡就是一個六層的巢狀迴圈。此時我就可以針對這個迴圈開發一個 IP 核,確定如何進行流水線設計(pipelining),如何分配儲存等,然後再將 IP 核用在 FPGA 上,進而讓神經網路中的所有卷積層來共享 IP 核即可。

此時設計的最佳化要點是 IP 核的大小、是否需要多個 IP 核並行運算等。這是一個非常適用 HLS 的場景,因為 HLS 可以自動化地、快速地探索不同的解決方案。如果採用 RTL,則需要很多工程師,組成多個團隊,每個團隊根據工程師過去的設計經驗著重探索一個方向,這是一個成本非常高的過程。

RTL 是一種描述硬體的空間的關係和邏輯時序等邏輯關係的硬體描述語言。這是一門難學的語言,能夠熟練掌握的從業者也不多,開發和測試都很慢。誇張點說,如果 HLS 開發週期以天和周來計算,那麼 RTL 通常是以月和年。

從最終結果角度講,RTL 完全手工調製的解決方案是很可能比 HLS 自動生成的方案效果好的。我們曾經做過比較,在深度學習的情境下,HLS 和 RTL 方法的差距在 10% 左右。

因此,問題在於是否願意花 3-5 倍的時間獲得額外 10% 的效果。

機器之心:在簡化 FPGA 開發過程這一任務上,研究者做了哪些工作?

我們的團隊開發了一個研究工具,是一個 C 語言的模板庫,能夠根據 Caffe 和 TensorFlow 的程式碼自動生成 C 語言的表達。然後研究者可以將 C 語言的程式碼再交給 HLS 工具生成 RTL 程式碼。

C 語言是軟體工程師普遍掌握的語言,這樣的工具讓軟體工程師也具有 FPGA 開發能力,而且讓開發者更專注於演算法,而不用過多考慮底層硬體。

而且,這個過程中的中間結果都可以匯出,專業人員也可以在自動生成的基礎上再進行最佳化,總而言之,整個開發的效率都得到了極大的提高。 

這只是舉一個例子。還有其它很多的研究人員在做相關的提升深度學習設計效率和質量的各類工具和平臺。工業和學術屆的都有。學術屆比如 UCLA 的叢京生老師,以及 Cornell 的張志汝老師等。工業屆比較領先的是賽靈思和英特爾自己設計的一些工具。

 機器之心:各個大公司在 FPGA 的應用方面都進行了哪些工作?擴充市場的思路都有哪些?

 IBM 和賽靈思正在 Power 系列上進行合作,致力於在 FPGA 上加更多的儲存,在最新的原型機上,把儲存加到了 64G,相比於市面上現在常見的最大 8 或 16G,極大擴充套件了資料頻寬,來進行和大資料相關的處理。 

英特爾收購了 Altera,並且致力於幫助 Altera 進行編譯等工具的開發。這是一個 FPGA 商品化的思路,就像 GPU 一樣,說不定未來的 PC 裡就會有一個 FPGA 協處理器在 CPU 旁邊完成工作。或者在晶片層面上,CPU 片上就有一塊 FPGA。總而言之,一旦工具做好,整合的機會會有很多。英特爾在智慧城市、智慧製造方面都有很多的構想,並且希望藉由 FPGA 實現。 

再就是微軟。它的思路主要就是雲端計算,除了 Bing 之外,也希望在進行機器學習任務的 Azure 雲中使用 FPGA。 

機器之心:能否介紹一下 Inspirit IoT 透過哪些產品實現了深度學習演算法在 FPGA 上的加速?

UIUC陳德銘教授:「萬能晶片」FPGA與深度學習

我們公司主要有三個產品,按照層次分別是 DNN 最佳化器、高層次綜合加速編譯器(HLS compiler),以及整體 FPGA 解決方案。

 DNN 最佳化器的目標是定製一個 FPGA 友好的模型,把訓練好的模型中對於推理來說冗餘的部分去掉。例如,訓練時使用的浮點數可以被替換為定點數,訓練時每層有非常多的單元,但是在推理的時候可以進行剪枝Pruning),等等。DNN 最佳化器就是以各種高層框架的模型為基礎,根據硬體的特性和場景的特性進行自動的最佳化。

高層次綜合編譯器讓開發者得以繞開寫 Verilog 硬體描述語言,將 C、 C++、CUDA 等程式碼直接編成 FPGA,旨在降低硬體開發的門檻,提高軟體工程師的生產力。我們的特色是這個編譯器可以自然結合深度學習演算法中的各種 IP 核,從而可以最好的最佳化各種深度學習演算法在 FPGA 上的高速及高質量的實現。

除此之外,我們也有嵌入 FPGA 的開發板,用於聲音相關的應用場景。其上嵌入了 FPGA 和 4 個麥克風,可以檢測聲音來源、提高聲音質量,也可以和攝像頭等其他裝置連用。例如,捕捉到車輛撞擊聲、尖叫聲等特定聲音之後,能夠調轉攝像頭,收錄相關的影片等,希望獲得一個「1+1>3」的效果。

特別鳴謝:北京大學高效能運算機研究中心博士生 王碩

相關文章