0
| 本文作者: 張夢華 | 2020-08-13 08:52 | 專題:CCF-GAIR 2020 全球人工智能與機器人峰會 |

雷鋒網按:8 月 7 日 - 9 日,由中國計算機學會(CCF)主辦,雷鋒網、香港中文大學(深圳)承辦,鵬城實驗室、深圳市人工智能與機器人研究院協辦的第五屆 CCF-GAIR 2020 全球人工智能與機器人峰會如期落地。
8 日,大會與 AI 研習社、OpenI 啟智社區聯合舉辦“AI 源創專場”,重點討論了新基建背景下,國內開源創新建設將催生的新勢能,以及其將引發和促進的新產業機會。
會上,百度深度學習技術平臺部高級總監馬艷軍做了主題為《開源深度學習平臺助力產業智能化:百度飛槳的實踐》的分享,他從開源如何為產業賦能的角度切入,結合飛槳四年來的成長與實踐案例,就開源深度學習框架如何進行生態構建、深度學習如何賦能產業、飛槳的智能化落地案例等給出了清晰的解讀。雷鋒網將馬艷軍的演講進行了不改變原意的編輯,以下為全文:
我跟大家分享的主題是“開源深度學習平臺助力產業智能化”,我會從開源如何給產業賦能這個角度分享。
飛槳在 2016 年已經開源了,時間是比較早的,在這個過程中,我們一直認為,技術的迭代有兩個方面:
首先,在百度內部會有大量的應用,并且非常注重配合大量的落地場景,這會驅動我們做一些事情,比如速度做得更快,部署做得更好。

然后,在這個循環過程中持續打磨開源項目。開源以后,我們社區里的開發者非常多,他們的要求非常苛刻。社區里開源的工程師把代碼亮出來以后,大家都能知道你是如何設計的,以及你的代碼、文檔有沒有問題。這就對整個編程的易用性、API 的完備性提出了新的要求,這些要求以前在公司內不做開源時就不會考慮太多。
這兩個循環同時進行,就形成了一個產品。 
現在的飛槳框架部分已經滿 70 萬行代碼,是工程量非常大的工作。如果再加上圍繞核心框架的周邊一系列的模型、工具,現在飛槳有 200 萬行代碼。這樣規模的工程量,要想真正讓它打磨得比較順暢,需要慢慢做,確實沒辦法一下子放出一個跑起來不出問題的大型的工程系統。
飛槳經過這么長時間,已經形成完整的體系,現在有一些能力可以直接在平臺上使用。

開源深度學習框架的建設和很多開源項目有一定的差異性。很多開源項目是把這個開源項目做好,其他人拿去用就可以了。但深度學習框架上下游的生態比較復雜,我們經常說,它是一個生態系統的問題。生態系統里要和很多芯片做對接,因為要基于它做算法研發,再被集成解決方案,形成比較深的產業鏈條,由此就形成了生態。
所以,開源深度學習框架和一般開源項目的差異性就在于,它的生態體系構建非常關鍵,比如說 飛槳放在這兒沒人用那它就掛了,因為沒有生態體系和它一起聯動。沒有生態的構建很成問題,現在國內的深度學習框架一直朝著生態構建的方向發展,開源就是幫助構建生態的很好的方式。

飛槳發展了這么長時間,在很多行業中已經被應用,使用的場景也很多。AI 在應用時和行業綁定非常緊密,需要結合很多行業專家的知識,并和 AI 技術平臺一起設計可在企業中應用的更完整方案。
另一方面,深度學習框架需要和芯片做深度的對接適配才能達到高性能。現在芯片的種類還是蠻多的,把芯片設計好需要非常大的工作量,芯片企業要做更多的貢獻才能把能力提升上來。
現在真實應用中使用的芯片類型也是不一樣的,環境差別很大。真正要讓深度學習框架在芯片上跑起來,是非常大的工程,可能得投入不小的工程團隊開發一年左右,才能把整個硬件的功能進行很好的適配。
咱們國家做開源很重要,需要時間投入,耐心把這事兒做了,沒有巧妙的辦法把工程開發的時間繞過去。一定要投入時間,把這些工程開發做了才有更好的發展基礎。

飛槳一直和國內外的芯片企業都有非常緊密的合作,做軟硬件的適配,社區也有快速的成長。到現在,整個飛槳在 Github 共有 45000 的 Star。
做項目的過程中,第三方的生態貢獻增長非常重要。第三方生態貢獻增長是指什么?比如飛槳這個項目,很多的開發不是百度工程師做的,還有一些其他人在基于這個做出新的項目和更多的貢獻,這就是第三方的貢獻。我們很高興地看到,今年上半年,由于疫情原因,大家的時間變多了,貢獻也非常踴躍,Star 數增長速度非常快,整個生態也在快速成長。這說明國內的開發者也在積極主動做這樣的事情。
飛槳也有一個開發者專家計劃(PPDE),希望不同層次的開發者都能夠加入到這里面做貢獻,可以給框架做貢獻,也可以貢獻算法庫,貢獻各種各樣的應用工具,由此形成整套開發體系。非常歡迎開發者加入這個項目。
飛槳核心技術
我們常常說飛槳有幾個特點:
一是框架層,我們是動態圖和靜態圖統一設計的框架,希望可以從動態圖編程轉成靜態圖部署,并做到極致。 
另外是訓練。百度做大規模的數據處理,天然需要有大規模訓練能力。這個大規模訓練也有很大的挑戰,包括真正做了大規模、分布式,飛槳的大規模分布式訓練已經經過了實踐驗證,比如速度提上來了,收斂性怎么樣,精度是否有保證,這些都需要在實踐檢驗中持續打磨。
再就是部署,對多種硬件的支持。飛槳目前已經支持非常多的硬件,尤其對國產芯片也進行了深入的適配融合。
最后是模型算法。飛槳開放了很多的算法,這上面的算法有 146 個,工業界使用比較廣泛的基本都涵蓋了。
動態圖的編程是飛槳主推的,代碼的行數、編程靈活性都提升很多,語義理解的算法現在都是動態圖實現。
大規模分布式訓練在 CPU 和 GPU 上都有做,并且支持異構硬件的訓練,我們也做了大規模的稀疏參數訓練,這些在公司內用得很多,多種大規模的分布式訓練模式都能支持。 
大家可以看到,部署是多種平臺、多種操作系統都支持。這就是部署麻煩的地方,要適配的環境很多、很復雜,需要很多的工程化工作才能把部署做上去。
現在飛槳的模型庫算法很多,涵蓋的任務也很多,這些算法我們都做了比較多的調優工作,把算法的速度、訓練的速度、參數本身設計到最優。
飛槳助力產業智能化:案例剖析
互聯網行業對深度學習的擁抱是非常明顯的,但要進一步擴展到更多的行業,還有非常大的空間。今天的案例不是互聯網行業,而是實體經濟——無人巡檢的場景。
我們是制造業大國,制造在我們國家占的 GDP 比重非常大。在真實的生活中,很多事情需要檢測,比如設備是否可以正常運轉;工廠里也常常有很多檢查,比如聽到設備發生異響,這些都是真實場景里遇到的。
深度學習在真實場景中的應用面臨的挑戰非常多,比如它有可能算力非常低,不像很多互聯網公司有大型的服務器。在很多真實的行業場景,不僅很多算力很低,也沒那么多的內存,這種情況下,要把深度學習技術真正應用到行業中就需要克服很多不一樣的挑戰。 
舉一個例子,要監測哪兒有沒有著火,需要在某個位置架設一個攝像頭,把深度學習影像拍到。這是挺復雜的系統,深度學習的模型訓練只是其中一環,行業里的業務系統是比較復雜的,即使設計了一個系統,跟業務系統再對接也是非常復雜的工作。這個過程就需要后臺的訓練,從數據標注到模型訓練,通過攝像頭、相機、光源一系列的因素,包括無人機的配合,在邊緣端進行計算,和后臺形成聯動,最后形成預警系統。

整個系統搭建需要很復雜的設計,這個理念會涉及比較難的技術點,比如檢測有沒有著火,需要目標檢測技術。飛槳開源的目標檢測工具 PaddleDetection 里面有一些非常經典和實用的算法,結合真實的場景、少量的數據,效果基本上足夠你用。內存要求有限,ARM 算力有限,可以通過 PaddleSlim 把模型變小。
另外需要部署,要部署在 ARM 架構的芯片上面,快速運行,這其中的技術選型就非常關鍵。
我們通過技術使得很小的模型識別的精度也可以非常高。煙霧檢測一方面要有高準確率,再就是推理速度,比如著火這種應急場景下,對性能的要求非常高。
這是今年在淄博發生的一件真實的事情。高壓線底下著火,通過剛剛的技術方案,可以真正發現并解決問題。 

目標檢測在真實場景中應用非常多,是復雜的技術,里面涉及到的組件非常豐富,另外還需要把壓縮能力和部署能力打通,涉及到的工程化工作非常多。這些都是通過 PaddleDetection 開源的。我們提供了一系列的算法,開發者可以非常靈活地組合自己想要的算法。當然我們也提供了在什么場景下用什么最好的組合方案,直接給出了幾款應用最多、效果最好的算法。
算法豐富性、精度、速度以及一系列的驗證,這個套件已經在很多場景下做了很多工作,基本上可以放心用到工業、企業里。

訓練完這些模型以后,我們需要做一些壓縮工作。算力畢竟有限,部署的場景非常復雜,有可能是服務器,有可能是邊緣端、網頁端的程序,也有可能集成到軟件上或是做服務,部署的環節是非常復雜的流程,需要做非常多的工作。
我們把主流的壓縮方案都做了,跟檢測、分割算法庫結合可以直接實現模型的壓縮和使用。通過 Paddle Lite,可以實現的算法適用比較多,現在在飛騰、寒武紀、百度昆侖、RK、華為NPU、MTK APU 等多種芯片都可以實現端到端的使用。
飛槳在百度 AI 中是基礎底座,對于整個 AI 平臺而言是底層技術,這個基礎上會有一系列的定制化開發以及 AI 能力,比如語音、語言、視覺,再結合一些場景化的方案,最終會形成一整套具備 AI 能力的完整方案。
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。