0
本文作者: 奕欣 | 2018-02-16 12:07 |
雷鋒網(wǎng)AI科技評論消息,F(xiàn)acebook AI 研究院于近日開源了 C++ 庫及數(shù)學(xué)語言 Tensor Comprehensions,它能有效填補研究人員于數(shù)學(xué)運算領(lǐng)域的溝通鴻溝,并基于各種硬件后端上大規(guī)模運行工程模型。它的最大亮點在于,它采用了 Just-In-Time 的編譯自動生成機器學(xué)習(xí)社區(qū)所需的高性能代碼。
也就是說,通過 Tensor Comprehensions,研究人員能夠以數(shù)學(xué)符號的方式進行編寫,系統(tǒng)能夠根據(jù)需求進行編譯調(diào)整,并輸出專業(yè)的代碼。
傳統(tǒng)意義上,如果要從零創(chuàng)造一個具有高性能表現(xiàn)的機器學(xué)習(xí)層需要兩個大步驟,這可能需要耗費工程師數(shù)天甚至數(shù)周的努力。
1. 在 NumPy 層級,研究人員需要寫一個全新層,并在以 PyTorch 為代表的深度學(xué)習(xí)庫中鏈接已有運算,然后進行小規(guī)模測試。如果要運行大規(guī)模實驗,需要通過數(shù)量級加速檢測其代碼實現(xiàn)。
2. 工程師隨后采用這個層,并為 GPU 和 CPU 撰寫有效代碼(但這需要滿足多個條件):
1)工程師需要是一位在高性能計算頗有了解的專家,但這一人才目前非常稀缺;
2)文本、策略、寫代碼,debug,工程師需要樣樣精通;
3)將代碼與實際任務(wù)相關(guān)的后端相連接,如冗長的參數(shù)檢查和添加樣板集成代碼
這也直接導(dǎo)致近年來深度學(xué)習(xí)社區(qū)一直依賴以 CuBLAS, MKL, 和 CuDNN 為代表的高性能庫而構(gòu)建運行于 GPU 和 CPU 的代碼。對于研究員而言,如何尋找一條新的實現(xiàn)思路成為了巨大挑戰(zhàn)。
而在 Tensor Comprehensions 中,研究員們得以將這一流程從幾天甚至幾周減少到數(shù)分鐘。這一開源包含了:
? 用簡單語法表達(dá)一系列機器學(xué)習(xí)概念的數(shù)學(xué)符號
? 基于 Halide IR 數(shù)學(xué)符號的 C ++前端
? 基于整數(shù)集庫(ISL)的 Just-in-Time 編譯器,
? 一個基于進化搜索的多線程、多 GPU 自動調(diào)節(jié)器
Halide 是一種最近在高性能圖像處理領(lǐng)域頗受歡迎的語言,它采用類似的高級函數(shù)語法來描述一個圖像處理的 pipeline,隨后在單獨代碼塊中調(diào)度到硬件上,并且詳細(xì)到如何平鋪、矢量化、并行化和融合。對于具有專業(yè)知識的人而言,這是一種非常高效的語言;但對于機器學(xué)習(xí)從業(yè)者來說,這一難度并不小。Halide 的自動調(diào)度在研究上非?;钴S,但對于 GPU 上運行的機器學(xué)習(xí)代碼,目前還沒有很好的解決方案。
Tensor Comprehension 將 Halide 編譯器作為調(diào)用庫。FAIR 研究員構(gòu)建了 Halide 的中間表征(IR)和分析工具,并與多面編譯進行技術(shù)配對,因此,用戶可以在無需理解運行原理的條件下使用相似的高級語法編寫層。此外,F(xiàn)AIR 研究員也找到了簡化語言的方法,不需要為縮減運算制定循環(huán)邊界。
使用 Halide 和多面編譯技術(shù),Tensor Comprehensions 能通過委托內(nèi)存管理和同步功能以自動合成 CUDA 內(nèi)核。這一編譯能夠針對特定尺寸對一般操作符進行融合,對快速本地內(nèi)存、快速縮減和 Just-in-Time 專業(yè)化都能優(yōu)化。因不嘗試涉足內(nèi)存管理,因此這一流程能夠輕松集成到機器學(xué)習(xí)的任意框架,以及任何允許調(diào)用 C++ 函數(shù)的語言中。
與經(jīng)典編譯器技術(shù)和庫方法相反的是,多面編譯能讓張量理解為每個新網(wǎng)絡(luò)按需調(diào)度單個張量元素的計算。
在 CUDA 層面,它結(jié)合了仿射循環(huán)轉(zhuǎn)換、融合/分裂和自動并行處理,同時確保數(shù)據(jù)在存儲器層次結(jié)構(gòu)中正確移動。
圖中數(shù)字表示最初計算張量元素的順序,箭頭表示它們之間的依賴關(guān)系。在這個例子中,數(shù)字旋轉(zhuǎn)對應(yīng)于循環(huán)交換,能夠?qū)崿F(xiàn)深度操作器的融合。
研究員提供了一個集成的多線程、多 GPU 自動調(diào)節(jié)庫,以推進搜索過程,它使用 Evolutionary Search 來生成和評估數(shù)千種實現(xiàn)方案,并選擇性能最佳的方案。只需調(diào)用 Tensor Comprehension 上的 tune 功能,用戶便能目睹性能的改善。最好的策略是通過 protobuf 序列化,在當(dāng)下或離線情況下可重用。
在性能方面,Tensor Comprehensions 可能仍然有很大提升空間,但在條件滿足的情況下,它已經(jīng)可以匹配或打破當(dāng)前機器學(xué)習(xí)框架與手動調(diào)整庫集成的性能,并通過將代碼生成策略適應(yīng)特定問題大小的能力來實現(xiàn)。下圖展現(xiàn)了 Tensor Comprehensions 與 Caffe2 和 ATen 的對比。
更多信息請參考 arXiv 論文(鏈接見底部)。
未來,Tensor Comprehensions 將補充硬件制造商(如 NVIDIA 和 Intel)編寫的快速庫,并將與 CUDNN,MKL 或 NNPack 等庫一起使用。
雷鋒網(wǎng)AI科技評論了解到,該版本的開源庫能讓研究人員和程序員使用與他們在論文中使用的數(shù)學(xué)相似標(biāo)記來編寫層,并簡明地傳達(dá)程序意圖。他們也能夠在幾分鐘內(nèi)將這種表示方法進行編譯。未來隨著工具鏈的不斷增長,F(xiàn)AIR 認(rèn)為它的預(yù)計可用性和性能將會提升,并受益整個社區(qū)。
晚些時間,F(xiàn)AIR 將會發(fā)布 PyTorch 集成的 Tensor Comprehensions。
GitHub 鏈接:https://facebookresearch.github.io/TensorComprehensions/
arXiv 論文:https://arxiv.org/abs/1802.04730
Slack 頁面:https://tensorcomprehensions.herokuapp.com/
Email: tensorcomp@fb.com
雷鋒網(wǎng)AI科技評論編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。