8 月底,在機器之心承辦的 WAIC 2019 世界人工智能大會上,商湯科技聯合創始人林達華教授首次對商湯自研的深度學習框架 SenseParrots 進行了系統性介紹,也暢談了對 AI 技術未來發展的看法。
自 2015 年底谷歌開源深度框架 TensorFlow 以來,越來越多的科技巨頭、創業公司注重框架的投入與研發。而商湯科技作為國內 AI 創業公司的代表,自創辦開始就走在自研深度學習框架的道路上。
過去幾年,我們能夠或多或少的聽到商湯深度學習框架 SenseParrots 的信息,但因為該框架并未開源而無法有系統性的了解。在不久之前的 WAIC 2019 開發者日深度學習框架分論壇上,商湯科技聯合創始人林達華教授首次對外系統性的介紹 SenseParrots,解讀了該自研框架的核心技術模塊。
以下是機器之心對林達華老師演講內容的梳理:
各位朋友,非常感謝機器之心今天舉辦這個論壇,讓對深度學習框架感興趣的朋友能夠匯聚在黃浦江邊一起共論深度學習未來發展。今天我也非常有幸在這里跟大家分享商湯科技這方面的工作。
今天,我想利用這個機會跟大家講一個故事,一個關于商湯原創的故事。
在這個故事里,我將向大家分享我們如何走上自己研發深度學習框架的道路,如何一步步地把這樣一個技術框架發展成為一個工業級的算法生產平臺,為商湯以 AI 技術賦能百業的愿景提供有力的支撐。
在過去的這幾年,人工智能技術突飛猛進地發展,給我們的社會、生活帶來了巨大的變化。但是人工智能的成功,在我看來不是單一要素的結果。在這個成功的背后,它是深度學習算法的改進、GPU 提供的高性能算力,以及大數據這三個重要的要素歷史性的匯聚在一起,所產生的爆發。
如果我們回顧深度學習在過去七八年波瀾壯闊的發展歷史,我們會看到這背后有一系列的標志性事件。
在 2012 年的時候,AlexNet 獲得了 ImageNet 比賽的冠軍,震驚了整個計算機視覺。在此之后,很多的研究小組投入到深度學習模型結構的研發,一系列更加先進的模型結構涌現出來,把圖像識別的準確率提高到一個歷史性的高度。到了 2017 年,深度學習在自然語言領域取得了新的突破性的進展。到了 2019 年,從頭開始訓練的 AlphaGo Zero 橫空出世。
如果我們從一個更長的時間尺度來看,我們會看到,這一系列成功故事的背后還蘊含著另外一層重要的趨勢,就是它們所需要的計算能力的指數式的增長。從 AlexNet 到 AlphaGo Zero,在短短的五六年時間里面,對算力需求增長了超過三十萬倍,可以說這幾年深度學習的成功,人工智能的爆發,在一定程度上就是把算力連接到有價值的產業應用所促成的結果。
而深度學習框架就是這種連接最核心的樞紐。
商湯也在這一個人工智能浪潮里面,取得了巨大的成功。在過去幾年走到今天,成為了人工智能領域領先的企業,而這背后最重要的核心,在我看來就是兩個字,原創。
在 2012 年的時候,當時 CVPR 總共只有兩篇是關于深度學習的,而這兩篇都來自于我們實驗室。到了 2013 年,ICCV 有八篇 paper 關于深度學習,其中六篇來自于我們實驗室。正因為我們實驗室把深度學習引入計算機視覺的先驅性,我們在 GTC 2016 年被評為全世界深度學習十大先驅的實驗室之一。我想這段小歷史,也能夠很好的詮釋了商湯人所說的原創精神。
原創之路風光無限,但是它的背后也蘊含了無限的艱辛,在我們一開始做深度學習的時候,那時候的環境和現在非常不一樣,沒有 TensorFlow、沒有 PyTorch、連 GPU 都沒有。在那個時候,我們是依靠著人工手寫的一行行 C++ 代碼,完成整個神經網絡的計算。每一個模型的訓練都需要一兩個月的時間。
正是在這樣一個艱辛的環境下面,我們打開了把深度學習應用于計算機視覺的道路。也正是在這樣一個艱辛的環境里面,我們深切的體會到一個好的框架對于 AI 基礎核心性的作用。于是 2014 年,從商湯科技創辦的第一天開始,我們就下定了決心要走自研深度學習框架的道路。
SenseParrots 發展歷程
我們把自己研發的深度學習框架,命名為 Parrots,這背后寄托了我們對它良好的祝愿,聰明、美麗而又能夠自由的飛翔。
從那時候開始,Parrots 跟商湯共同成長,經歷了五年的發展。2015 年的時候,幾乎與 TensorFlow 同時,我們發布了第一版的 SenseParrots。那時候它已經具備了多機多卡聯合訓練和多路徑執行的領先業界的特性。之后又經過了三年的發展,我們于去年內部發布了 SenseParrots 的第二代。在這一代它不但具有了一系列更加重要的特性,具備了更豐富的能力和更高的性能,而且也逐漸成為了商湯賦能 AI 產業的戰略支撐。
首先,簡單的回顧一下我們第一代(三年前)SenseParrots。SenseParrots 在 2015 年出來的時候,已經具備了超越當時開源框架的卓越性能,它在業界率先實現了在 64 個 GPU 上接近線性的拓展。而且它通過極致的內存優化,允許一個超大型的模型在單個 GPU 上進行訓練。
正是在這樣一個框架上面,我們訓練出了 1207 層的超大型卷積神經網絡,這個網絡就叫 PolyNet,取得了當時圖像識別性能的世界記錄,并且把這個記錄保持了一年時間。在這樣強有力的網絡支持下,我們在一系列的比賽,包括 ImageNet、ActivityNet,取得了一系列的冠軍。
雖然我們取得了一些成績,但是我們說,深度學習、人工智能這個領域是一個快速發展的領域,如果我們不能夠有效的把握這個領域發展的趨勢,有一天我們會落后于時代發展的潮流。從 2015 年開始,我們繼續觀察深度學習的發展,發現這個領域有一個根本性的重要的變化,就是深度學習技術已經走出了實驗室,走向了更廣泛的產業落地。
與此同時,在技術層面,也發生了很多深刻的變化。
首先,越來越多的研究員,越來越多的工程師,開始使用動態模型來表達復雜的計算邏輯,而不再依賴于靜態的網絡結構;
深度學習模型開始走出了實驗室的機房,落地到了越來越多樣化的設備里面,包括車載設備、手機攝像頭、機器人等;
我們對于算法的需求,從單一的追求大模型、高精度,變成了去追求更重要更有價值的事情,就是在真正的產品上落地,所以在這個時候我們會更加關注性能跟成本的平衡。這樣新的追求下面,一系列新的成果,包括專門為移動端設計的 MobileNet,包括量化壓縮等降低模型成本的技術,成為了熱門的技術。
最后,我們的深度學習研發是通過研究員進行的。因此,研究員的生產力制約了我們這個領域的發展。為了提高研究員的研發效率,越來越多的自動化方法應運而生,包括網絡結構搜索,包括自動設計損失函數。
所以歸納起來,在過去這幾年的發展,一個很重要的趨勢,就是我們從單一的性能追求變成了更加多元的價值追求。這樣多元的價值追求,它給深度學習框架的發展提供了一個巨大的空間。與此同時我們也看到,國際主流的開源的平臺,包括 TensorFlow、PyTorch,也逐漸成熟,形成了成熟的社區生態。而且它們的性能也能滿足大部分常規應用的需求。
可是為什么在這樣的情況下,我們依然要堅持自主研發深度學習框架的道路?這是因為我們在產業落地過程中發現,這些開源的框架主要是面向普及應用進行研發的。真正的 AI 工業化應用面前,它們依然有著巨大的差距。
在商湯內部的工業化的產業落地的業務里面,我們經常要表達邏輯非常復雜的模型,要把這個模型在數百張、上千張的 GPU 的大規模并行環境中進行訓練。這樣的環境里面,開源框架不能夠為我們提供足夠的性能。另外我們要把我們訓練出來的模型,放在很多樣化的設備里面,各種各樣的手機、IoT 設備、機器人。而現有的開源框架,對于多元化的設備的支持是非常有限的,嚴重不足的。而且它們訓練出來的模型,離投入具體的業務場景的部署依然有著非常長的路要走,中間要經歷非常復雜的環節,而這種復雜的環節,從根本上制約了我們研發的效率和迭代的速度。
我們商湯的愿景,是要以 AI 技術賦能百業,所以我們別無選擇,必然要面對這樣的挑戰。在這些問題對于我們來說是巨大的挑戰,但是對于自研深度學習框架來說也是一個重要的機遇。
商湯經過過去將近五年的發展,已經把業務拓展到了十幾個不同的業務線,我們給數以百計的大型的企業進行 AI 產業賦能,正是這樣廣泛而深度的落地實踐給深度學習框架的研發提供了非常豐沃的土壤。在這個土壤上面,我們能深切的認識到 AI 產業化第一線的需求和最大的痛點是什么。在這樣的土壤上面,我們走出了自己差異化發展的道路。所以產業落地的過程當中,我們為下一代深度學習框架,定義了新的發展目標。具體來說有三點。
第一,就是我們要支持商湯業務范疇里面的工業級的應用,其中包括很多具有非常復雜的動態邏輯的大規模模型的并行訓練。
第二,我們在我們眾多的多元化的落地場景里面,對我們的模型進行極致優化,構建我們在這些場景里面的核心競爭力,這不僅是算法精度,也包括模型運行的性能。
第三,就是剛剛說到的,我們也非常關注研究員的生產效率,所以在我們新一代的訓練框架研發里面,非常重要的一個目標就是關注生產力的提升。通過把數據采集、模型的訓練和部署,以及到最后在業務場景上面應用的全鏈條進行打通,聯合優化。這樣能夠非常有效地提高研究員的生產效率,加快我們產品迭代的速度。
這就是現在商湯的整個的平臺的技術架構。我們看到最底層是我們的基礎系統,它提供包括存儲、網絡、虛擬化、調度等基礎系統的能力。在這個系統基礎之上,我們建立了我們新一代的 SenseParrots,它包含了從表達、編譯與調度、計算、通信以及最終連接到模型部署的一系列的關鍵技術模塊。
再往上,我們構建了算法工具鏈,它沉淀了商湯在這過去五年所凝練出來的很多業界最先進的算法。最上層是我們的垂直應用平臺,通過對于這些算法進行組合、重構,我們構造出了適應各個行業落地的垂直平臺,真正的賦能百業。
關鍵技術模塊解讀
接下來我將對 SenseParrots 的一些關鍵技術模塊做一個簡要的講解。
動態編譯與調度
SenseParrots 的核心是一個動態的編譯與調度引擎,這也是 SenseParrots 最重要的技術特色。當一個計算過程進來的時候,我們通過這樣一個引擎,首先把它動態地實時編譯成為可以執行的中間代碼,然后通過一個可以高并發的執行引擎,在大規模的并行環境中執行。
我們知道現在主流的訓練框架有兩種,一種是對于靜態的網絡結構進行預編譯,讓它能夠真正大規模的并行;另外一種就以 PyTorch 為代表,對一個動態的計算過程進行解釋性的運行。
而 SenseParrots 在這一點上面,有所不同,它走的是動態實時編譯的道路。所有的代碼,都是在運行過程當中即時編譯,并且放到引擎上大規模地并行執行。這就讓它具備了像傳統的靜態深度網絡的伸縮性,同時也具備了當代的動態編程模型的靈活性。達到了這兩者最佳的組合。
從上圖我們可以看到,在很多的主流的模型上面,我們相比另外一個原生支持動態模型的框架 PyTorch,有了一個明顯的性能提高,尤其是在 64 卡大規模并行的環境下。
核心計算庫
對每一個算子的具體執行,有一個我們自己研發的核心計算庫 PPL(Parrots Primitive Library)。在這個計算庫里面,我們對于超過一百個算子在十多種不同的架構上進行了極致的優化,它們支持了很多商湯業務里面非常重要的算子。
我們可以在這里看到,在多個不同的架構上面,對多個不同的算子我們取得了比原廠提供的算子服務顯著的高性能。經過過去幾年的迭代,我們的計算庫達到了真正的工業級的可靠性,正在支持商湯全線產品的落地。
算子編譯工具鏈
剛才說到對這一百多個重點的算子,我們手工進行了極致的優化。但還有很多的算子我們沒有足夠的人力進行同樣深入的優化,所以我們同時建設了一套算子編譯工具鏈。通過這個鏈條,我們可以對于長尾的算子進行優化,這個鏈條集成了很多種不同的優化方式,保證了自動輸出的算子依然具備了具有競爭力的高性能,而且也大大的提高了算子優化的效率。
核心通信引擎
除了計算以外,對于并行訓練來說另一個重要的核心的組件,就是通信。
在商湯內部的訓練框架里面,我們并不依賴外部提供的通信庫。我們有自己的核心通信引擎,里面實現了一系列的領先的先進的性能,包括通過塊狀稀疏;還有通信的延時合并,能大大地節省通信量,提高了在大規模并行情況下的通信效率。
此外,我們通信庫還提供了很多與生產環境緊密關聯、非常有用的性能,包括我們對于兩萬個 GPU 的大型集群提供實時的性能檢測。在這時候我們看到哪個 GPU 變慢哪個 GPU 變快了,實時地調節訓練任務的部署;而且它允許動態的增刪設備。大家可以想象,在一個超大規模的集群里面,各種單獨的設備變慢或者故障,是時常發生的事情,我們不能讓這樣的故障讓大型的訓練任務被停下來,所以我們提供了動態設備調整的功能。
這樣的通信引擎支持下,我們實現了在 512 卡同步進行訓練的時候 86% 的并行效率。
部署工具鏈
在模型訓練出來之后,最后的一個環節就是把訓練出來的模型部署到業務場景。在這里面其實是有一系列工序的。如果在實驗室發 paper,我們不需要做這樣的事情,但是在一個工業生產環節,這里面每個環節都是必不可少、非常重要的。
所以 SenseParrots 還提供了一系列的工具,包括模型量化工具;部署模擬器,它能夠在訓練過程中模擬模型在各種設備上性能;還提供了專用的網絡結構搜索的工具,在特定計算約束條件搜索下一個最高性能的模型;還提供了包括模型剪枝壓縮、模型轉換等工具,讓訓練出來的模型能夠無縫的銜接到我們生產部署的環境中。
正是在這一系列的工具的支持下,我們建立起來了新一代的 Parrots。在這個上面,我們使用了 512 張 V100,獲得了迄今為止業界最快的訓練的速度,實現了 1.5 分鐘訓練達到 90 輪(epoch),在業界率先實現了每秒訓練一輪的訓練速度,這大大加快了我們內部大型模型的迭代速度,也提高了商湯的核心競爭力。
端上訓練
除了技術性能的提升之外,我們也在多個層面、多個領域,進行積極的創新,走自己不同于別人的道路。比如現在主流的 AI 研發主要是把模型應用在這些設備上面進行推理。但是我們也開始了在端上進行訓練的研發,在業界率先落地了我們第一個在端上進行訓練的框架,現在已經投入到實際產品當中使用。
AI 集成研發環境
最后一個,這是一個上層應用框架,但是它對于提供 AI 研發的生產效率至關重要。正如剛才提到的,在工業化的 AI 生產環境里面流程非常復雜,需求多樣。在這個時候,如果用傳統的方式去運行整個 AI 研發的流程是非常低效的。所以我們也研發了這個 AI 集成研發環境,它具有全生命周期的管理能力,集成了很多模型生產的工具和組件,能夠自動化地執行研發和業務流程。而且它為研究員提供了一個一站式的非常友好的研發環境,大大提高了他們的工作效率。
開源設想
正如我剛才所說,商湯內部的平臺研發主要專注于工業級的產業化賦能。但是我們在研發的過程當中,也從社區里面獲益。我們深信,跟開源社區的互動和緊密銜接,是商湯平臺未來持續具有生命力的活力的源泉。
所以從去年開始,我們在逐步設想了一個開源的路線,整個開源路線可以分為三步,是一個從外到內三步走的過程。我們會首先在算法層面進行開源,然后逐漸深入到一系列的外圍工具,最后我們在合適的時候,會把基礎框架的一些技術開源出來。
剛才提到了開源,我們已經有了實實在在的工作,以商湯的聯合實驗室 MMLab 開始我們逐漸把這幾年積累下來的很多業界學界領先的算法開源出來,包括我們開源了 MMCV、MMDetection 等一系列的開源庫,這些融會了商湯以及聯合實驗室過去幾年研究的精華。其中 MMDetection 目前已經有超過六千顆星,在學界已經形成了非常廣泛的影響。
AI 模型生產的未來趨勢
正如我剛才所說,技術的發展,最重要的就要把握未來的趨勢。我們自己判斷 AI 的發展,必然會經歷三個主要的發展階段,從實驗室走向大規模的工業賦能,然后從工業賦能走向全社會。我們憧憬,未來十年 AI 的發展一定會讓我們每一個行業每一個人都能從 AI 的技術賦能中獲益,把整個社會連接起來,成為整個社會的基礎設施,這就是我們所說的 AI 的普及。我們已經經歷了從實驗室到工業化的道路,我們面向未來就是從工業化到普及化邁進。
具體來說,我覺得有三個重要的趨勢想向大家分享。
首先是隨著隱私保護的加強與數據價值的彰顯,AI 模型的生產形態將會從集中訓練逐漸向多主體的形態演進,這里每個主體各自擁有自己的數據和模型,與其它主體進行交互,而聯邦學習正是這個長期趨勢的起點。
第二,現在商湯內部已經形成了企業內的 AI 生產鏈的分工,我們相信隨著這個技術的發展,AI 將成為一個社會性的大規模分工產業。就像幾十年前集成電路一樣,當時只是一個小的實驗室可以完成的一個流程,現在變成了非常大范圍的社會分工。而 AI 同樣將走這樣的道路,每個環節都將孕育出一大批富有競爭力的企業,這些企業之間,將通過標準化的協議進行溝通。
第三,隨著 AI 更加廣泛的產業落地,它將進入到更多的設備,更多的場景,連接更多的人,從而構成一個更加豐富多彩的 AI 世界。
最后我們憧憬十年之后,在我們的世界里面,AI 將會無處不在。在這樣的世界里面,AI 不會取代人類,但是它將在我們的生活,在我們的工作,在我們的世界的方方面面,成為我們最可信賴的助手。我們正在朝著這樣的愿景,朝著這樣的目標努力,也希望與在座的各位共勉,謝謝大家。
來源 | 機器之心
演講 | 林達華