百度技術平台部高級總監馬艷軍:開源深度學習框架,生態構建是核心,產業賦能是試金石 | CCF-GAIR AI源創專場
- 2020 年 8 月 20 日
- AI

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

然後,在這個循環過程中持續打磨開源項目。開源以後,我們社區里的開發者非常多,他們的要求非常苛刻。社區里開源的工程師把程式碼亮出來以後,大家都能知道你是如何設計的,以及你的程式碼、文檔有沒有問題。這就對整個編程的易用性、API 的完備性提出了新的要求,這些要求以前在公司內不做開源時就不會考慮太多。
這兩個循環同時進行,就形成了一個產品。

現在的飛槳框架部分已經滿 70 萬行程式碼,是工程量非常大的工作。如果再加上圍繞核心框架的周邊一系列的模型、工具,現在飛槳有 200 萬行程式碼。這樣規模的工程量,要想真正讓它打磨得比較順暢,需要慢慢做,確實沒辦法一下子放出一個跑起來不出問題的大型的工程系統。
飛槳經過這麼長時間,已經形成完整的體系,現在有一些能力可以直接在平台上使用。

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

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

飛槳一直和中國外的晶片企業都有非常緊密的合作,做軟硬體的適配,社區也有快速的成長。到現在,整個飛槳在 Github 共有 45000 的 Star。
做項目的過程中,第三方的生態貢獻增長非常重要。第三方生態貢獻增長是指什麼?比如飛槳這個項目,很多的開發不是百度工程師做的,還有一些其他人在基於這個做出新的項目和更多的貢獻,這就是第三方的貢獻。我們很高興地看到,今年上半年,由於疫情原因,大家的時間變多了,貢獻也非常踴躍,Star 數增長速度非常快,整個生態也在快速成長。這說明中國的開發者也在積極主動做這樣的事情。
飛槳核心技術
我們常常說飛槳有幾個特點:
一是框架層,我們是動態圖和靜態圖統一設計的框架,希望可以從動態圖編程轉成靜態圖部署,並做到極致。

另外是訓練。百度做大規模的數據處理,天然需要有大規模訓練能力。這個大規模訓練也有很大的挑戰,包括真正做了大規模、分散式,飛槳的大規模分散式訓練已經經過了實踐驗證,比如速度提上來了,收斂性怎麼樣,精度是否有保證,這些都需要在實踐檢驗中持續打磨。
再就是部署,對多種硬體的支援。飛槳目前已經支援非常多的硬體,尤其對國產晶片也進行了深入的適配融合。
最後是模型演算法。飛槳開放了很多的演算法,這上面的演算法有 146 個,工業界使用比較廣泛的基本都涵蓋了。
動態圖的編程是飛槳主推的,程式碼的行數、編程靈活性都提升很多,語義理解的演算法現在都是動態圖實現。
大規模分散式訓練在 CPU 和 GPU 上都有做,並且支援異構硬體的訓練,我們也做了大規模的稀疏參數訓練,這些在公司內用得很多,多種大規模的分散式訓練模式都能支援。

大家可以看到,部署是多種平台、多種作業系統都支援。這就是部署麻煩的地方,要適配的環境很多、很複雜,需要很多的工程化工作才能把部署做上去。
現在飛槳的模型庫演算法很多,涵蓋的任務也很多,這些演算法我們都做了比較多的調優工作,把演算法的速度、訓練的速度、參數本身設計到最優。

飛槳助力產業智慧化:案例剖析
互聯網行業對深度學習的擁抱是非常明顯的,但要進一步擴展到更多的行業,還有非常大的空間。今天的案例不是互聯網行業,而是實體經濟——無人巡檢的場景。
我們是製造業大國,製造在我們國家占的 GDP 比重非常大。在真實的生活中,很多事情需要檢測,比如設備是否可以正常運轉;工廠里也常常有很多檢查,比如聽到設備發生異響,這些都是真實場景里遇到的。
深度學習在真實場景中的應用面臨的挑戰非常多,比如它有可能算力非常低,不像很多互聯網公司有大型的伺服器。在很多真實的行業場景,不僅很多算力很低,也沒那麼多的記憶體,這種情況下,要把深度學習技術真正應用到行業中就需要克服很多不一樣的挑戰。

舉一個例子,要監測哪兒有沒有著火,需要在某個位置架設一個攝影機,把深度學習影像拍到。這是挺複雜的系統,深度學習的模型訓練只是其中一環,行業里的業務系統是比較複雜的,即使設計了一個系統,跟業務系統再對接也是非常複雜的工作。這個過程就需要後台的訓練,從數據標註到模型訓練,通過攝影機、相機、光源一系列的因素,包括無人機的配合,在邊緣端進行計算,和後台形成聯動,最後形成預警系統。

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


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

訓練完這些模型以後,我們需要做一些壓縮工作。算力畢竟有限,部署的場景非常複雜,有可能是伺服器,有可能是邊緣端、網頁端的程式,也有可能集成到軟體上或是做服務,部署的環節是非常複雜的流程,需要做非常多的工作。
我們把主流的壓縮方案都做了,跟檢測、分割演算法庫結合可以直接實現模型的壓縮和使用。通過 Paddle Lite,可以實現的演算法適用比較多,現在在飛騰、寒武紀、百度崑崙、RK、華為NPU、MTK APU 等多種晶片都可以實現端到端的使用。

飛槳在百度 AI 中是基礎底座,對於整個 AI 平台而言是底層技術,這個基礎上會有一系列的訂製化開發以及 AI 能力,比如語音、語言、視覺,再結合一些場景化的方案,最終會形成一整套具備 AI 能力的完整方案。
GitHub://github.com/paddlepaddle
Gitee://gitee.com/paddlepaddle





