iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 29
0
AI & Data

30 天學會深度學習和 Tensorflow系列 第 29

28. 工欲利其器:深度學習編譯器介紹

現行深度學習架構概況 中,提到現形深度學習架構面臨的第一個問題則是如何在異質化的計算系統上做計算速度上的最佳化。而在深度學習架構的主要成分介紹一文中,我們則簡單的提到計算圖的概念在現行深度學習概況上的使用。

在該文中,我們簡單的比較了動態和靜態計算圖的差異,也簡略的介紹靜態計算圖,以預先規劃資料流在程式運算元間如何相依流動,在程式在大型異質化的計算平台,如多個 GPU 和 CPU,扮演了平行編程抽象化角色,而讓編譯器更容易將原始碼的執行分配到適合的硬體上執行,以及有效的排程。同時,這個資料圖計算圖編程法,不僅僅應用於深度學習的架構中,也應用於處理串流式資料的程式架構如 Apache Flink。

其次,我們則在上篇中提到了深度學習目前的巴別塔障礙,主要是來自於各個架構實作的不同,而造成訓練模型的轉移困難。目前開源社群的解決方案是提出一個統一化的介面格式,稱為 ONNX,並由不同的深度學習架構提供者,或該開源社群參與者實作符合 ONNX 規格的運算元。然而,ONNX 除了能促進深度學習模型在不同架構上轉移,另外一個任務則是讓硬體設備的廠商得以針對 ONNX 模型格式對不同架構做最佳化,而非對不同的架構分別進行最佳化,進而縮短了進入 production 的時程。

Hardware and Framework Gap

上圖則是解說因為深度學習架構的快速蓬勃發展,而造成許多硬體廠商需要針對不同的架構進行最佳化處理,這個難題被稱為「深度學習架構與計算硬體之間的鴻溝」(The Gap Between Framework and Hardware)

而目前學界和業界提供的解決方案,則是將計算圖當作 Intermediate Representation (IR)。若讀者如我,對編譯器(compiler)僅有淺薄知識,約略知道 IR 在整個編譯系統擔任的角色在於作為原始碼,但通常是指已經經過解析而建立而成的 syntax tree (express computation) 與產生真正能執行的機械碼間的平台獨立指令表示法。為了將原始碼編譯成可在不同機器上執行的指令列,通常需要針對不同的機器或處理器分別產生相對的機械語言程式(這個階段稱為 code generation)。而目前許多程式語言的編譯器,會做兩階段的最佳化,第一階段會使用 IR 對與機械無關的程式碼做最佳化,第二階段則是對機械相關的程式碼做最佳化。在做完最佳化後,才會產生真正與平台相依可執行的機械語言。

同樣的,許多深度學習架構提供者或計算硬體廠商也是利用計算圖獨立於平台的表示運算過程的方法,把計算圖當作 IR 先進行與硬體無關的最佳化。

Computational Graph as IR

目前以這種方法對計算圖做最佳化而發展出來的編譯器有:Tensorflow 的 XLA,Nvidia 的 TensorRT 以及 Intel 的 nGraph。下圖則為對計算圖做最佳化的其中一種方式:

Optimization over Graph

最後,以 Nvidia 對計算圖所做的規則最佳化法作為上述計算圖最佳化的真實案例。

TensorRT


上一篇
27. 工欲利其器:突破深度學習的巴別塔障礙
下一篇
29. 工欲利其器:加速前進!
系列文
30 天學會深度學習和 Tensorflow30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言