地平線楊銘:從無形視覺到有形晶元
來自專欄深度學習大講堂10 人贊了文章
編者按:人工智慧先驅阿蘭.圖靈曾設想過這樣一個機器,它擁有電子的大腦,以攝像頭為眼睛,以輪為腳,可以在鄉間漫步,這其實是阿蘭.圖靈對人工智慧走入生活的一個憧憬。而在很長的時間之內,由於硬體條件的不成熟,智能只能從無形的演算法入手,隨著深度學習研究的深入,在很多領域都取得了里程碑式的進展。然而,要想讓人工智慧真正融入人們的生活,則亟需解決演算法在端側落地的問題,而晶元,作為銜接演算法與場景之間的橋樑,無可避免地成為了一大挑戰。
本文中,地平線聯合創始人、美國西北大學楊銘博士,來和大家分享「在晶元上加速神經網路用於視覺任務的挑戰」。非常高興來到VALSE,來到美麗的大連,首先和大家分享一下人工智慧晶元的話題,另外介紹一下地平線在最近兩年做的工作。由於最近的熱點新聞,大家對晶元這個話題比較感興趣,希望今天的分享能給大家一個概念:為什麼人工智慧晶元非常重要,它的研發具有哪些挑戰,都需要做哪些工作。
這是我要分享的幾個要點,先簡介一下地平線,接著介紹一下AI晶元的背景,包括AI晶元研發的必要性,以及現在主流的AI晶元的類型和選擇。隨後會介紹關於AI晶元的兩個主要研究,一個是Google TPU的第一代,這應該是目前公開資料最多的AI晶元,另一個是地平線研發的BPU,最後是關於AI晶元的一個總結。
地平線機器人成立於2015年,我們的願景是希望能夠成為嵌入式人工智慧的領導者,為大家提供高性能、低功耗、低成本、完整開放的嵌入式人工智慧解決方案。主要業務面向智能駕駛、智慧城市、智慧零售等應用場景,為多種終端設備裝上人工智慧「大腦」,讓它們具有從感知、交互、理解到決策的智能,賦能萬物,讓每個人的生活更方便、更安全、更美好。
從2015年7月開始運作,目前地平線已經成長為500人左右的公司,總部位於首都北京,主要進行演算法研發、硬體研發、晶元研發;2016年在南京成立了第二個研發基地,包括應用開發、硬體開發;2017年在上海成立了第三個研發中心,主要目標是把自動駕駛產品和方案落地,同時在深圳也有一個分部,主要負責完成客戶支持、銷售服務工作。
地平線的主要核心團隊都具有計算機視覺與機器學習的背景,我們選擇了從計算機視覺出發轉向於硬體晶元開發。余凱博士是CEO創始人,黃暢博士負責基礎演算法的研發,吳強博士是在計算機體系結構以及雲端後台伺服器的專家,也負責南京所有的研發工作。
首先談談我們為什麼需要人工智慧?在經歷了PC互聯網和移動互聯網時代以後,未來10年最大的可能就是讓萬事萬物所有的設備本身都具備互聯能力和智能功能。什麼是智能功能?就是能夠自主感受環境,能夠根據感受環境的結果自主做出判斷和控制。相信在未來的10年、20年,包括無人車、無人機,也包括攝像頭和玩具,所有這些設備慢慢都會具有智能功能,都會具有自主判斷能力,同時這些設備都會對人工智慧提出更高的要求。過去的10年,由於人工神經網路重新煥發出活力,為我們解決這些人工智慧問題提供了可能。
近幾年來,神經網路基本改變了我們對人工智慧問題解決的範式,現在的基本模式是,數據入、結果出,由神經網路解決問題,只要能夠定義好數據格式,標註好數據,就很有可能在短時間內得到不錯的解決方案,這也是人工智慧被廣泛關注的重要原因。同時,我們發現神經網路是一種非常靈活的建模語言,可以有效描述各種問題,之前的嘉賓也都談到它確實能解決很多不同領域的問題。
神經網路、深度學習正在慢慢改變著很多行業,首先是互聯網行業的廣告搜索業務,之後是語音識別、圖像識別,在金融領域也開始應用神經網路。近兩年來,自動駕駛領域、醫學圖像識別、工業控制領域都逐步應用了神經網路技術。
大規模地應用深度學習還需要解決哪些核心的挑戰呢?我們總結了三個主要問題。第一:如果將AI和神經網路應用到一些行業中去,必須對行業和應用場景有非常深入的理解,這些行業和應用場景有很多痛點,它們描述問題的語言和我們研究AI的語言並不是很兼容的。比如說我們講識別率是99%,大家就會覺得這就很準確了,而我們要表達的是在多數情況下我們的識別率是100%,少數情況的識別率是0%,平均下來才是99%。另一方面,很多行業如果需要AI的話,並不是應用技術,往往需要應用完整的解決方案或者系統,我們需要做進一步深入的工作,才能把技術轉化為系統應用起來,也就是讓演算法和行業之間能夠有很好的交流和理解。第二:目前還沒有低成本、低功耗,成本很經濟的硬體平台。如果有了這樣很好的硬體平台,應用範圍和難度也會降低很多。在各種行業中,包括無人車、無人機或者其它設備都具有不同的限制,比如功耗、成本,以及散熱性和可靠性等。因此,缺少低成本、低功耗、高性能的硬體平台限制了大規模應用AI和神經網路的解決方案。
第三:近年來,演算法發展非常迅速,帶來的問題是人們的期望也不斷提高,演算法的發展是不是能夠一直跟上期望值的增加呢?比如說隨便在一個應用場景只要應用神經網路就能夠達到很好的性能,這是不能保證的。神經網路存在解釋性的問題,它是一個黑匣子,用對了當然很好,如果性能很差,為什麼差呢?這是很難解釋的一個問題。神經網路是基於統計的,針對很少見的情況,比如說在自動駕駛中出現車禍的情況,訓練集能否覆蓋這種情況呢?在實際應用中很難給應用方解釋我們的方法是非常可靠的。另外,雖然加大數據量可以解決一些問題,但是能不能夠把所有數據都標註呢?這也是值得思考的問題。AI或者神經網路距離大規模應用有這樣三個問題,我們今天想談的是第二個問題,能不能先做好硬體平台準備。我們也看到在整個行業中,眾多公司中最近幾年最受益於AI發展的是NVidia。這也說明現階段,有了很好的硬體平台才能做應用,才能讓各種行業應用AI演算法。
為什麼神經網路適合專用晶元或者硬體來加速呢?神經網路結構這幾年有很大發展,從計算角度給大家帶來了新的挑戰。首先神經網路運算有大規模的並行性,所有運算都有共同基本單元,就是相乘累加,非常適合硬體實現的運算符方式。神經網路運算中間會產生很多中間結果,這些中間結果並不會被重用,這與之前的通用計算方式很不同。在神經網路計算中,無論是網路的權重還是數據本身,對硬體帶寬的需求都很高。
這些新的挑戰使得原來非常強大的CPU並不能高效計算神經網路,CPU計算方式還是串列的方式,即使有些指令可以處理多個數據。CPU設計花了很多精力優化多級的緩存,可以方便獲取數據,這對一般運算來說非常好的,但是對於神經網路不必要。這些CPU的優化,如分支預測,讓一般運算非常高效,對神經網路來說額外開銷,因此用CPU來訓練神經網路效率是相對比較低的。因此我們發現近年來提出來很多CPU+X,對神經網路做專門的運算加速。
AI片基本上等價於神經網路加速,我們需要AI晶元的原因是,通過硬體工藝的提高已經很難大幅度提升計算性能,而需要專用晶元架構提高計算性能。例如,硬體工藝改進,隨著三極體數量增加,頻率更高,功耗不變,這條規律在2006年的時候已經不成立了;我們所熟知的摩爾定律,在2015、2016年也已經終結,單純通過硬體改善不太可能繼續提高計算性能,所以需要新的專用架構設計來幫助提高對神經網路計算性能。通常來講,根據之前提到的神經網路計算的特點,神經網路晶元能採取的針對措施有以下幾點:
1.由於有大量數據吞吐,可試圖降低數據量,讓晶元上保存更多的片上數據,存儲計算中間結果。2.由於需平行運算很多,盡量用比較簡單的數據類型和數據大小,實現大量基本運算單元,不需要複雜的調度、分支預測、配置的管理,盡量減少管理調度所需晶元面積開銷。3.神經網路運算資源調度優化工作讓軟體去做,而不是用硬體實現複雜的調度。那麼這個軟體是指哪些層面的軟體呢?後面可以會明確地提到。下面介紹一下已有的神經網路加速晶元的類型,我們可以看到在過去幾年中,很多層出不窮的xPU出現。
首先是GPU,具有很強大的並行計算能力,但能耗比較高,也是目前最成熟的一個軟體工具平台,有很多開源社區軟體的支持;
其次是DSP,利用一些單指令多數據的計算單元,一次性提供超過100個位元組的運算,優點是低功耗,並具有硬體支持的低開銷或無開銷循環及跳轉運算。問題在於DSP的指令集取決於其廠商與型號,不同型號的DSP的指令集都是不太一樣的,這樣給學習和編程開發造成了較大的困難。
FPGA是一種半定製化的硬體,採用編程方式,對片內門電路進行編程,配置片內RAM使用,具有一定的靈活性和可修改性。從編程的角度來看,FPGA採用硬體描述語言,調度連接已有的LUT等運算單元,開發難度高一些;從功耗和成本來看,FPGA採用CMOS工藝,功耗低比GPU低,但比DSP之類ASIC高。
對於TPU,在後面的工作中會提到。
最後是IBM做的仿人腦的晶元,晶元的單元只有激活狀態下才會工作,功耗會非常低。
設計AI晶元,主要有哪些挑戰呢?1.設定合理恰如其分的目標。由於資源的限制,對行業理解的限制,設計一個放之四海而皆準、而全的晶元是很難的,如何去設定好支持哪些功能,如何設定好成本、功耗、可靠性的目標,這是最難的一個問題。另外,整個晶元設計流程周期長、成本高,並不能在實施期間隨意更改目標。
2.如何設計系統架構,包括指令集的設計,能夠讓架構儘可能滿足更多需求,實現更多類型的神經網路,這是一件不容易的事情。3.為了讓神經網路晶元能廣泛可用,需要提供全面的工具支持,提高編程開發效率。而工具鏈的支持也是相當複雜的,需要訓練平台,需要編譯器把神經網路轉換成可運行模塊下載到晶元中去,需要模擬器在沒有晶元的時候可以模擬開發,並且能夠調試分析性能,能夠設計出參考模型。這一系列軟體工具鏈的支持,對AI晶元能否成功起著關鍵性的作用。當然由於這是一個非常複雜的過程,而任何人的資源都不是無限的,總是要做一些非常痛苦的抉擇和權衡,在成本、開發時間、各種資源條件限制下做一個權衡。對於神經網路加速晶元,又會有哪些具體難題呢?1.首先要確定支持的網路子集。神經網路多種多樣,新的演算法層出不窮,到底要支持到什麼程度,支持哪些網路結構激活函數和操作。
2.支持哪些函數和數據類型,同時要考慮是否支持模型壓縮、量化方法,這些都需要在演算法層面上對神經網路目標做很好的設定。3.設計晶元結構,比如片上內存和片下內存,片上內存當然越多越好,但是成本高,功耗和測試時間都會增加。盡量讓硬體本身簡易化,只完成神經網路加速,把任務調度、任務優化交給軟體去完成。這些最終都需要對開發者透明,需要由中間件工具鏈來做優化,這也是工作量非常大的一項工作。4.最後還要提供很多參考模型和設計,完成具體應用場景中的功能示例。這是一個非常簡化的開發AI晶元的流程,從需求(MRD)開始,首先是演算法的研發,要明確哪些神經網路模型是最重要的,是需要支持的,是否能夠滿足應用場景的要求;之後會生成很多參考模型,實現Golden C,在設計的時候可以參考C的實現;右邊是晶元設計的過程,實現架構設計,實現核心神經網路相關的編程,同時晶元需要訪問內存,訪問介面,需要IP集成,集成之後需要進行驗證,並需要實現FPGA平台去做實際驗證;之後是後端設計,包括邏輯綜合、布局布線等;然後進行流片(Tapeout),這需要之前各種驗證都已經做得很充分之後,流片之後修改的機會就很少了,而且流片經濟成本和時間非常高。最後需要把硬體晶元放在一個硬體平台上,啟動起來之後能夠開發中間件運行軟體。左邊是軟體相關工作,包括訓練平台、編譯器、模擬器和調試器,最終做到應用,再測試。可以看出,整個流程的工程量非常巨大。
具體介紹兩個例子。先看一下TPU,這是Google 2013年開發的,經歷了大約15個月,TPU的定位是對神經網路加速的晶元,它可以在數據中心使用,15個月的開發時間已經是相當快的速度,功耗大概是75瓦。TPU上有256×256×8bit的矩陣乘法器,這是最核心的計算單元,所有的設計目標都是希望能夠讓這個乘法器效率最高。每個TPU指令都是由伺服器通過PCIe匯流排發送回來的;然後通過指令把數據調到24兆的緩衝區,安排好數據,同時把神經網路權重從外部DRAM調到晶元中去,讓矩陣乘法器不斷計算,並把中間結果、乘加結果存到4兆緩存區中去;最後再通過激活歸一化函數後存回到緩存區。可以看到TPU實現了一個非常直觀的神經網路預測,並做了很多簡化和約束工作。
TPU的主要指令是從主存儲器中讀數據、讀權重,然後進行乘加,最後通過激活函數把結果寫進去。
對比之前提到的幾個原則,TPU首先做了一些限制,只支持神經網路預測(inference),根據Google內部的業務的需求,主要支持MLP(Multi-layer Perceptron)網路。它支持整數運算,通常為8bit運算,也可以進行16bit或32bit的運算,但處理速度會降低一半或者4倍。從存儲角度上設計了24MB的SRAM來存儲中間結果,權重也是通過SRAM調用進去。它把優化工作基本上都交給軟體來完成,晶元本身的架構沒有非常複雜的優化,主要優化是在於讓乘法器核心能夠持續運算,同時把其它的運算並行起來。從分析和處理的角度來看,TensorFlow和TPU是兼容的,TensorFlow能夠讓它的工作效率很高,因為很多Google軟體工程師針對TensorFlow和TPU進行了開發。
地平線也做了AI晶元,我們做的是什麼呢?首先也是針對於神經網路預測,同時這種預測還只針對圖像和計算機視頻的任務。我們做了一些限制,輸入是8bit 多通道的2D的矩陣,可以是灰度或YUV圖像。我們針對的就是圖像應用,目標是開發高性能、低功耗、低成本神經網路協同處理器,通過編程方式改變演算法架構和替換不同的神經網路。
開發過程首先從MxNet的訓練開始,同樣支持TensorFlow網路架構。主要支持8bit整數的運算,用晶元來實現的話,支持很多的數據類型成本和複雜度會提高。
我們的工作核心是把一個神經網路模型編譯成我們支持的彙編語言,一方面我們知道具體的神經網路模型,另一方面我們知道這是一個檢測演算法,把檢測演算法對應的模型和演算法架構合併在一起,通過聯接器(Linker)得到機器語言的模型文件,其物理地址沒有完全確定,如果是真實晶元則確定物理地址在晶元上運行,如果是軟體模擬器就則可模擬運行。
我們會提供比較全面的開發平台支持,從演算法角度來說,能夠在不同尺度下進行圖象識別,在不同的視頻中進行時間維度上的融合,可以支持分類、檢測、跟蹤、識別等任務。
從晶元架構來講,一個比較創新的思考方式是彈性的Tensor Core。把圖像所需要的一些操作(卷積、池化等)進行硬體化,同時有很多片上內存,通過一個data routing bridge從SRAM中選擇這些操作所需的數據並同時存儲,把存儲跟運算作為兩個資源,通過編程方式靈活調動,實現更多的演算法。
這是圖像所需要的一些基本操作,除了卷積以外,還包括升採樣,降採樣等操作。
第一代晶元在2017年流片,目前已經生產出來了,它支持單路高清視頻進行30幀的物體檢測、跟蹤和識別。第二代晶元支持6~8路的物體檢測識別,包括像素級的分割和識別。
這就是我們在2017年12月份發布的產品,包括兩個系列,一個是面向自動駕駛,叫做「征程系列晶元(Journey)」;一個是面向智能攝像頭的,叫做「旭日晶元(Sunrise)」。它們可以實現1路視頻檢測,同時處理200個物體,並且功耗很低,可以實現物體級別的檢測識別。
這是我們能夠實現的一些功能,包括大範圍的非常密集的場景下的人臉識別(先抓拍,再識別人臉屬性),在本地可以做到一萬人左右的識別,我們已經有了樣機,大家可以體驗。也包含視頻結構化的應用,在複雜的交通環境下,檢測機動車、非機動車、行人,區別屬性、車牌,這也是非常實用的功能,如果把這些功能應用到攝像頭中可以節省很多帶寬和成本。
這是第二代晶元架構,能達到像素級別的識別,這是今年在拉斯維加斯的車上實測的結果,另外一個是在三藩市實時運行的結果,包括物體分割和檢測。
總結一下,在未來10-20年AI功能將無處不在,AI晶元將是非常必要的基礎設施,只有晶元成功才能讓AI演算法真正在生活中得到大規模應用。我們相信我們公司會堅定地致力於「演算法+晶元」,把演算法和晶元兩者結合,做一些創新的、有趣的工作,把AI演算法真正推向大家的生活中去,謝謝大家。
主編:袁基睿,編輯:程一
整理:胡科、楊茹茵、高科、高黎明作者簡介:
楊銘博士,地平線(Horizon Robotics)聯合創始人 & 軟體副總裁,Facebook 人工智慧研究院創始成員之一。楊銘曾任 NEC 美國研究院高級研究員,專註於計算機視覺和機器學習領域研究,包括物體跟蹤、人臉識別、海量圖片檢索、及多媒體內容分析。他在 Facebook 工作期間負責的深度學習研發項目 DeepFace 在業界產生重大影響,被多家媒體廣泛報道,包括 Science Magazine、MIT Tech Review、Forbes 等。他領導 NEC-UIUC 團隊參加 TRECVID08/09 視頻監控事件檢測評測,獲得最佳成績;參與 NEC 團隊 ImageNet2010 大規模圖像分類挑戰,獲得第一名。申請獲得美國專利15項。楊銘畢業於清華大學電子工程系並獲得工學學士和碩士學位,於美國西北大學電氣工程與計算機科學系獲得博士學位。他在頂級國際會議 CVPR/ICCV 發表論文20餘篇,在頂級國際期刊 T-PAMI 上發表9篇論文,被引用超過7600次;多次擔任 CVPR/ICCV/NIPS/ACMMM 等頂級國際會議程序委員會成員,T-PAMI/IJCV/T-IP 等頂級國際期刊審稿人。
該文章屬於「深度學習大講堂」原創,如需要轉載,請聯繫茹茵
原文鏈接:地平線楊銘:從無形視覺到有形晶元
歡迎大家關注我們的微信公眾號,搜索微信名稱:深度學習大講堂
推薦閱讀:
TAG:晶元集成電路 | 科技 | 深度學習DeepLearning |