陳天奇:深度學習編譯技術的現狀和未來

2021-01-13 機器之心Pro

作者:陳天奇

傳統的深度學習框架採用人工優化算子,然後建立運行時圖解釋器來解決內存分配調度等問題。深度學習編譯器技術路線一般指在優化過程中採用了自動或者半自動的代碼生成用以替代人工優化。深度學習編譯器無疑是最近非常熱門的話題。本文主要探討深度學習編譯技術的現狀和未來。

為什麼需要深度學習編譯器

深度學習編譯器的部署目標傳統的深度學習框架也可以做,一個非常自然的問題是為什麼不直接沿用傳統的框架。這是一個編譯器研究者來往往會忽略的問題。深度學習編譯器只有在各種場景超過人工優化的傳統辦法,才有機會真正被採用,到達這一目標之前之前深度學習編譯只是玩具。

從目前的現狀來看,深度學習編譯器TVM已經一定程度上到達了這一目標。在一些部署場景下,深度學習編譯已經到達了可以和傳統框架一拼高下或者超越傳統框架的階段。隨著深度學習自動化編譯研究的進展手寫優化的經驗會被融入到編譯器中,從而把逐步替代傳統的方案。為什麼會如此呢?總結下來的核心是編譯器可以帶來的更多自動化。細化來說分以下幾點:

無限的算力和有限的精力

如果給定一個特定的算子,一個工程師無疑可以做到非常精細的地步,通過精細地選擇流水線,指令集,預讀,寄存器分配來到達接近peak的效果。深度學習編譯器需要一個大的搜索空間涵蓋手寫優化的方案。一旦搜索空間定義足夠大,從而接近人工。很多人會覺得,一個足夠精力的工程師一定可以超過編譯,這一點無疑是對的。那麼機器(自動編譯)的優勢在什麼地方呢?機器的本質優勢在於其強大的算力,可以針對目標網絡的每一層,特定輸入大小場景,進行專門的優化。而人的精力有限,一般會嘗試優化常見的瓶頸算子,而這種有針對性的優化未必適用於網絡的每一層,或者企業相關的應用場景。通過(接近無限)的算力去適配每一個應用場景看到的網絡,這是深度學習編譯器比人工路線強的地方。

當比較TVM和傳統方法的時候的時候,我們往往會發現:在標準的benchmark(如imagenet resnet)上,編譯帶來的提升可能只在10%到20%,但是一旦模型相對不標準化(如最近的OctConv,Deformable, 甚至是同樣的resnet不同的輸入尺寸),編譯技術可以帶來的提升會非常巨大。原因也非常簡單,有限的精力使得參與優化的人往往關注有限的公開標準benchmark,但是我們的部署目標往往並非這些benchmark,自動化可以無差別地對我們關心的場景進行特殊優化。接近無限的算力和有限的精力的差別正是為什麼編譯技術一定會越來越重要的原因。

編譯器可以站在不一樣的起跑線上

如果比拼優化一個固定某一層的3x3卷積,往往精心的手工優化是機器未必可以超越的。那麼在一個標準的benchmark如resnet上,為什麼編譯技術還是可以超過人呢?其原因是往往編譯器可以和人站在不一樣的起跑線上。

舉一個簡單的例子,如果優化一個n層的MLP,我們要優化矩陣乘法。從人工優化的角度來說,往往我們會限制優化目標為,優化一個行優先(row-major)存儲的矩陣乘法。但是對於神經網端到端絡本身而言,內部到底是行優先或者是列優先,或者是(NCHWc4, NCHWc8)都是可以的,而且往往對於每一層最好的排布也不一定相同。同樣的,我們往往可以把算子和後面幾層的各種算子融合起來,或者針對每一層選擇有利於其的量化方案。還是因為精力有限的緣故,人工優化的庫往往會把全局問題限制在一些子問題(如行優先的矩陣乘法)上。如果編譯器和工程師硬碰硬直接解決同樣的子問題,或許並不能討好。但是自動化後的編譯器可以直接去考慮更大的解決空間,去自動選擇更加高效的數據排布或者算子融合,從站在了不一樣的起跑線上。這也是為什麼即使在標準benchmark,只要編譯可以做到人工的80%到90%,更好的起跑線帶來的優勢會掩蓋單個部分微弱的劣勢。

編譯器和手工優化結合

最後,編譯的目標並非替代手工優化,而是吸收手工優化的經驗,使得優化更加自動化。一個笨編譯器比不過聰明的腦子。怎麼辦呢,我們需要從實用主義的角度出發給編譯技術提供定製,允許在需要的加入手工優化來助力編譯器。

其中最簡單的辦法當然是直接把一些層offload給類似於cudnn這樣的庫。這也是XLA等在內的工具採取的技術路線。更進一步,TVM允許手工提供微內核(micro kernel)用於優化4x4外積等,但是依然採用自動優化的辦法優化內存排布和loop。達到手工和自動化相結合的目標。類似的,用戶可以通過構造特定的搜索空間模版來加入人工信息。

總結下來,深度學習編譯器之所以可以到達今天的高度,正是得益於深度學習優化工程師的經驗總結。接下來的一段時間,我們應該會看到越來越多優化工程師加入到深度學習編譯器建設中去,使得兩條路線逐漸融為一體。

深度學習編譯和傳統編譯的技術路線差別

在優化需求上深度學習編譯器和傳統編譯器有很大的差別。傳統編譯器注重於優化寄存器使用和指令集匹配,其優化往往偏向於局部。而深度學習編譯器的優化往往需要涉及到全局的改寫,包括之前提到的內存,算子融合等。目前深度學習框架的圖優化或者高層優化(HLO)部分和傳統編譯的pass比較匹配,這些優化也會逐漸被標準的pass所替代。但是在高層還會有開放的問題,即高層的抽象如何可以做到容易分析又有足夠的表達能力。TVM的Relay,XLA和Glow是三個在這個方向上的例子。

在自動代碼生成上,傳統編譯器的目標是生成比較優化的通用代碼。而深度學習編譯器的目標是生成接近手寫或者更加高效的特定代碼(卷積,矩陣乘法等)。相對的,在一些情況下深度學習編譯器可以花費更多的時間(去尋找這些解決方案。

整數集分析和Polyhedral Model

Polyhedral model是一個將近研究了十年的領域,其核心思想是採用整數集來表示循環迭代的範圍,利用整數集之間的關係來表示迭代變量之間的依賴,從而達到程序分析變換的目的。傳統的poly方法採用了線性約束來表示整數集和整數集之間的關係。Polyhedral方法也是被很多人覺得有希望用於優化深度學習算子的方法之一。Poly是真的比較重要呢?這個問題可以分兩點來看:

從核心思想上來看,poly的核心思想是整數集抽象和分析。我們也可以稱之為廣義的poly思想。整數集抽象是一個非常值得所有深度學習編譯器採納的抽象。包括TVM,TC,MLIR等在內的各個方案都引入了整數集抽象。具體的技術路線差別會在於如何表示以及整合整數集來進行分析,在這一點上不同的框架的做法有所不同。

當然,如果直接研究傳統的poly文獻,比較狹義上來說的poly包含了一套基於線性約束分析整數集的方法和搜索空間。線性約束空間解法帶來了一些效率上和對於整數集關係的限制。當然採用線性約束求解的好處是可以解決像三角形或者平行四邊形約束的循壞,但是這一類循壞並不常見。反過來說,如何更好的優化規則循環成為更加緊要的問題。因為模型本身的限制,狹義的poly本身不能完全解決搜索空間的問題。

總的來說,直接採用狹義的polyhedral技術並不能完全解決深度學習編譯問題,但是整數集分析(廣義的poly)已經被廣泛地採用於各個方案之中。

包容萬象的搜索空間

搜索空間決定了深度學習編譯器能力的上界,如何設計搜索空間是所有深度學習編譯器需要仔細考慮的話題。很多目前的編譯方案還是採用了有限的規則生成搜索空間。一般來說,這一搜索空間的定義需要大量吸收人工優化經驗並且加以融入。具體的空間包括循環重排,映射部分計算到實際的加速器指令(張量化,tensorzation),流水線優化等。一般很難確定一個完整的解答,以TVM為例,這一搜索空間會在過去和接下來的幾年裡面通過社區不斷迭代,到達越來越好的效果。

用機器學習優化機器學習

搜索空間本身確立之後剩下的問題是如何快速地找到比較好的算子。我們可以採用機器學習來自動優化算子。有興趣的同學可以看 AutoTVM:讓AI來編譯優化AI系統底層算子

編譯器之外的架構

需要指出的是,深度學習編譯器和傳統編譯器的一大區別是出了編譯器之外還有很多周邊的架構用於支持編譯和部署。這些架構包括快速的遠程部署,不同前端的轉化,靈活的運行時設計等。能否有比較好的周邊架構也是會決定深度學習編譯器易用性的關鍵。

AI晶片和編譯器的協同設計

AI晶片需要編譯器嗎?這無疑是一個很有趣的問題。在一定程度上,AI晶片對於編譯器的依賴取決於晶片本身的設計。一般而言,越靈活的晶片對於編譯器的依賴會越大一些。在AI晶片設計之初,大有傳統的CISC風格,把所有的優化在晶片本身解決。但是隨著領域的演化,為了支持更加靈活的需求,AI晶片本身也會在保留張量指令集和特殊內存結構的前提下越來越靈活。相信未來的架構師需要晶片和系統協同設計的,自動化也會越來越多地被應用到專用晶片中去。有興趣的同學可以閱讀 VTA: 開源AI晶片棧

學習與開發深度學習編譯器

深度學習編譯器領域處在起步階段,但是已經有了一定的應用場景。未來這一方向的應用會越來越多,也需要更多的人員參與到學習和開發中。因為深度學習編譯器本身處於研究前沿,最好的學習方式依然是看相關的論文和直接參與社區的開發和討論中去。

最後小廣告:TVM社區堅持合作開發智能,易用,靈活,中立的深度學習編譯器。社區堅持開放和實用主義出發技術路線,以解決最終應用場景為目標和大家一起探討深度學習編譯技術未來和實際場景應用。社區論壇經常有關於深度學習編譯器技術路線,代碼解析,和部署實戰的活躍討論,歡迎更多的同學參與到社區中來。

知乎連結:https://zhuanlan.zhihu.com/p/65452090

本文為機器之心轉載,轉載請聯繫原作者獲得授權。

相關焦點

  • 自動生成硬體優化內核:陳天奇等人發布深度學習編譯器TVM
    TVM 項目負責人陳天奇表示,「我們的框架允許開發人員快速、輕鬆地部署和優化大量硬體設備上的深度學習系統。」項目連結:https://github.com/dmlc/tvm深度學習如今無處不在且必不可少。這次創新部分得益於可擴展的深度學習系統,比如 TensorFlow、MXNet、Caffe 和 PyTorch。
  • 陳天奇的tvm更新了:VTA,開源AI晶片棧
    然而,當我們的合作真正開始的時候,才發現問題比原來想的要困難的多:深度學習晶片的主要問題遠遠超過了硬體本身。深度學習硬體真正的目標,是希望大家都可以把自己的深度學習的模型跑在AI晶片上。而加速器帶來的特殊定製導致對於每個加速器,我們都需要重新設計一套驅動,以及上面的軟體棧—-包含編譯,優化和部署模塊。
  • 陳天奇等人提出TVM:深度學習自動優化代碼生成器
    TVM 是由華盛頓大學在讀博士陳天奇等人提出的深度學習自動代碼生成方法,去年 8 月機器之心曾對其進行過簡要介紹。該技術能自動為大多數計算硬體生成可部署優化代碼,其性能可與當前最優的供應商提供的優化計算庫相比,且可以適應新型專用加速器後端。
  • 從ACM班、百度到亞馬遜,深度學習大牛李沐的開掛人生
    Gluon 為各種水平的深度學習開發人員設計,幫助開發者在雲端、App 和其他設備上設計原型,創建、訓練和部署複雜的深度學習模型。目前,Gluon 已經與深度學習引擎 Apache MXNet 合作,並已支持另一個深度學習引擎——微軟認知工具包(CNTK)。2017 年 10 月 7 日,亞馬遜和華盛頓大學合作發布了開源的端到端深度學習編譯器 NNVM compiler。
  • 2017中國AI英雄風雲榜技術創新人物候選人之陳天奇
    陳天奇,華盛頓大學計算機系博士生,深度學習編譯器TVM發明人。陳天奇,華盛頓大學計算機系博士生,此前畢業於上海交通大學ACM班,研究方向為大規模機器學習。
  • 陳天奇任 CTO,華盛頓大學TVM團隊創業,獲390萬美元種子輪融資
    作為機器學習領域知名的青年華人學者,陳天奇加入創業公司的消息引起了業內極大的關注。今日,OctoML 宣布完成 390 萬美元種子輪融資,主要面向缺少源或知識來構建優化深度學習模型的群體。 本輪融資由麥德羅納風險投資集團領投,Amplify Partners 參投。
  • 華盛頓大學成立SAML實驗室:陳天奇參與,探索跨系統堆棧多層問題
    陳天奇本人在微博上介紹說,實驗室將有整合系統、體系結構、機器學習和程序語言4個方向的團隊推進深度學習算法、系統的硬體和協同設計研究和TVM等開源項目。△ 陳天奇微博截圖四個方向華盛頓大學為什麼想建立這個實驗室?
  • 基於動態編譯(Just-in-Time)的全新深度學習框架
    基於動態編譯(Just-in-Time)的全新深度學習框架 風君子 發表於 2020-11-25 11:08:37 據官方消息,清華大學計算機系圖形實驗室宣布開源一個全新的深度學習框架
  • 陳天奇創業公司首個SaaS產品:快速構建部署ML應用,跨平臺優化
    去年,知名人工智慧青年學者、華盛頓大學博士陳天奇參與創建了 ML 創業公司 OctoML。該公司致力於打造一個可擴展、開放、中立的端到端棧,用於深度學習模型的優化和部署。這不,他們推出了首個 SaaS 產品 Octomizer,其能夠幫助開發者或數據科學家更方便、更省事省力地將 ML 模型部署到設備上。
  • 陳天奇:機器學習科研的十年
    在本文中,陳天奇回顧了自己做機器學習科研的十年。十年前,MSRA 的夏天,剛開始嘗試機器學習研究的我面對科研巨大的不確定性,感到最多的是困惑和迷茫。十年之後,即將跨出下一步的時候,未來依然是如此不確定,但是期待又更多了一些。這其中的變化也帶著這十年經歷的影子。
  • 中科院計算技術研究所王晉東:遷移學習的發展和現狀 | 分享總結
    遷移學習強調通過不同領域之間的知識遷移,來完成傳統機器學習較難完成的任務。它是解決標定數據難獲取這一基礎問題的重要手段,也是未來更好地研究無監督學習的重要方法。在近日雷鋒網(公眾號:雷鋒網) AI研習社的公開課上,來自中國科學院計算技術研究所的在讀博士王晉東帶來了題為《遷移學習的發展和現狀》的分享。
  • 深度學習 Memory & Attention 技術最新進展 (75PPT下載)
    原標題:深度學習 Memory & Attention 技術最新進展 (75PPT下載) 新智元編譯1 來源和 Attention 技術目前在深度學習中得到了較為廣泛的採用,本文總結了這兩項技術的最前沿進展。
  • 陳天奇明年將加入CMU出任助理教授
    華盛頓大學博士生、SAMPL Lab和MODE Lab成員陳天奇,今天在推特上宣布,將於明年秋天加入卡內基梅隆大學(CMU),擔任助理教授。陳天奇在AI領域有諸多貢獻,他參與構建了三個廣為使用的機器學習系統,包括:TVM、XGBoost以及Apache MXNet。2012年,陳天奇還曾獲得KDDCup的冠軍。
  • 探索 揭秘深度學習的隱藏層
    人工智慧家編譯,作者 Amanda Montañez在最近的《科學美國人》雜誌上,刊載了一篇題為「深度學習崛起帶來人工智慧的春天
  • 人工智慧深度學習的未來展望
    本文是推出的人工智慧深度學習綜述,也是Hinton、LeCun和Bengio三位大神首次合寫同一篇文章。該綜述在深度學習領域的重要性不言而喻,可以說是所有人入門深度學習的必讀作品。 本文上半部分深入淺出介紹深度學習的基本原理和核心優勢,下半部分則詳解CNN、分布式特徵表示、RNN及其不同的應用,並對深度學習技術的未來發展進行展望。
  • 2020年深度學習發展大盤點及對2021年深度學習的未來展望|極客雲算
    深度學習框架作為AI底層工具,對個人而言是進入深度學習世界的一把鑰匙,掌握深度學習框架並不等於理解了深度學習,要在AI開發中有所作為,關鍵還是要真正理解框架背後的技術、實踐和生態。隨著近年來的人工智慧發展,2020年深度學習依然是發展最快的領域之一,直奔未來工作。其發展是多方面的,而且是多方位的。
  • 深度學習 vs. 概率圖模型 vs. 邏輯學
    【編者按】在上個月發表博客文章《深度學習 vs. 機器學習 vs. 模式識別》之後,CMU博士、MIT博士後及vision.ai聯合創始人Tomasz Malisiewicz這一次帶領我們回顧50年來人工智慧領域三大範式(邏輯學、概率方法和深度學習)的演變歷程。通過本文我們能夠更深入地理解人工智慧和深度學習的現狀與未來。
  • 關於深度學習未來發展方向的六項預測
    關於深度學習未來發展方向的六項預測 隨著深度學習在大規模市場化應用領域的快速推進,其將與數據可視化、商務智能與預測分析一道成為眾多行業的立足基石。本文將與大家一同探討關於深度學習未來發展方向的六項預測。
  • 資料| 陳天奇介紹Xgboost原理的PPT
    【 圖片來源:https://xgboost.apachecn.org/  所有者:https://xgboost.apachecn.org/ 】內容簡介陳天奇介紹Xgboost原理的PPT,用於學習xgboost原理。
  • CellPress|單細胞技術和基於深度學習的藥物反應預測
    與傳統的大規模測序分析方法相比,單細胞測序分析的快速發展,可以幫助我們更好的理解腫瘤基因組,轉錄組和基因組異質性的概況。不僅如此,據調查顯示,單細胞測序分析技術可以使腫瘤對藥物暴露的反應更大。目前,深度學習模型已經能夠從大量複雜的序列數據中提取出特徵,用於預測藥物的反應。