華為黃之鵬:MindSpore全場景AI計算框架 | CCF-GAIR AI源創專場
- 2020 年 8 月 25 日
- AI

C++ 中完成的。你不能用 Python 寫這個東西,因為要快。”],[20,”\n”,”24:\”rsOR\””],[20,”\n”,”24:\”dxB0\””],[20,”它通常與張量流或其他東西分開,廣泛地說,你不能真正編程。”],[20,”\n”,”24:\”qAle\””],[20,”\n”,”24:\”BpdO\””],[20,”現在,即使人們告訴你,我們在做輸入和語音識別,這通常是他們在生產中實際在做的。但對於論文,他們試圖掩蓋他們確實在做這件事的事實。”],[20,”\n”,”24:\”ewks\””],[20,”\n”,”24:\”n0Z1\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/j9eB541QWEblJ3kO.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”OK5c\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”Vn7T\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”還有另一種類型的解碼器方法。我告訴你是為了完整性,儘管我認為它不是很實用。”],[20,”\n”,”24:\”1SkB\””],[20,”\n”,”24:\”t26o\””],[20,”它是當有某種遞歸的網路輸出時,網路的輸出又回到神經網路中,但它是每個字,而不是每個幀。”],[20,”\n”,”24:\”pwEa\””],[20,”\n”,”24:\”OHrq\””],[20,”不是每個字都有幀,所以單詞沒有連接到框架。它們沒有連接到時間步驟。”],[20,”\n”,”24:\”Ta2X\””],[20,”\n”,”24:\”J9zB\””],[20,”現在,把這樣的工作放入生產系統,這是非常危險的,因為它會給你帶來瘋狂的結果,特別是有一個很長的輸入。”],[20,”\n”,”24:\”7iCC\””],[20,”\n”,”24:\”F3H1\””],[20,”有時它會給你奇怪的重複,或者它可以解碼一些完全不同於真正輸入的東西。”],[20,”\n”,”24:\”xsGI\””],[20,”\n”,”24:\”4WxH\””],[20,”所以我不推薦這種類型的系統,但是,人們會使用它們。所以我告訴你,它就在那裡。”],[20,”\n”,”24:\”2OQe\””],[20,”\n”,”24:\”VAuj\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/6LT2ULI92q5opH1v.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”osGX\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”QT9b\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”這些方法中的大多數,除了非常簡單的貪婪搜索,”],[20,”在訓練之間存在某種不匹配”,”1:\”%23f9eda6\””],[20,”。這很奇怪。”],[20,”\n”,”24:\”XWop\””],[20,”\n”,”24:\”HbIK\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/HNC5AlLv3BAdveHF.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”4Rd9\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”BMjX\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”因為你在訓練中沒有所有的 C++ 程式碼,它不會以那種方式與張量流交互,儘管它是通過訓練。”],[20,”\n”,”24:\”hYQQ\””],[20,”\n”,”24:\”b6YS\””],[20,”所以這不是理想的。有時人們會使用技巧來修復不匹配。比如如果你訓練一個 CTC 模型,然後你用語言模型來編碼。”],[20,”\n”,”24:\”mMuW\””],[20,”\n”,”24:\”89g5\””],[20,”你必須插入一個特殊的空白,以避免得到太多的單詞。”],[20,”\n”,”24:\”TILY\””],[20,”\n”,”24:\”jvru\””],[20,”現在這是我試圖用 K2 框架解決的問題。”],[20,”\n”,”24:\”adc5\””],[20,”\n”,”24:\”0mi1\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/GA4mC6Bz2UhYoJ6x.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”k0ns\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”YBQ2\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”還有另一個問題。我也試圖解決一個單獨的問題,這些遞歸方法中的一些,還記得我告訴過你們的第三種類型,關於符號回到網路中的地方,但它仍然是幀級的,而不是字級的。”],[20,”\n”,”24:\”Ss2p\””],[20,”\n”,”24:\”l8ff\””],[20,”所以這些方法,神經網路知道過去的字的序列是什麼,但它不能明確地比較。我喜歡這個還是這個?它不知道其他的單詞序列也會要考慮。”],[20,”\n”,”24:\”4gpz\””],[20,”\n”,”24:\”WpG2\””],[20,”如果能夠以某種方式,讓神經網路對可能的輸出,或可能的輸出的整個集合進行操作,那就太好了。這裡的部分目標是獲得良好的置信度。我們大多數的置信度都很差。就像它們校準得很差一樣。”],[20,”\n”,”24:\”XERr\””],[20,”\n”,”24:\”8f9c\””],[20,”我知道你們可能不是所有人都明白。無論如何,這就是 K2。這是這個項目的名字,也是一座山,它的一半在中國,另一半在巴基斯坦。”],[20,”\n”,”24:\”ge71\””],[20,”\n”,”24:\”rtEe\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/bfNFE9yJMRHvSKCd.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”Gl0Z\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”6SyV\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”這是 K2 項目的結構,我們現在主要在做這個。”],[20,”\n”,”24:\”QXvH\””],[20,”\n”,”24:\”tHKM\””],[20,”我們還沒有完成大部分的 Python 包,它基本上是一個 C++ 後端,我們有 pybind11 的程式碼,使它在 Python 中可見。”],[20,”\n”,”24:\”X2Tg\””],[20,”\n”,”24:\”06eG\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/otZ3zmrxQOpQ41GP.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”aeas\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”LJ0T\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”我們的目標是有一個單獨的前端,就像 PyTorch、TensorFlow 一樣。”],[20,”\n”,”24:\”h8uC\””],[20,”\n”,”24:\”5x5B\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/9bcNhuzdGDlBIp1a.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”413s\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”wGU2\”|7:0|linespacing:\”150\””],[20,”是的,所以總體願景是我們想要實現高性能的 ASR ,在那裡,你不會有 Python 和 C++ 之間的這種不匹配。”],[20,”\n”,”24:\”gNhe\””],[20,”\n”,”24:\”MR1r\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/MtfrR2plyuc1tthH.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”ngSV\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”Qwoh\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”所有這些複雜的圖形操作,都可以用一個漂亮、乾淨的 Python 介面,用一種非常通用的加權有限狀態自動機的框架來完成。”],[20,”\n”,”24:\”YBal\””],[20,”\n”,”24:\”IzSz\””],[20,”它的程式碼庫要小得多,比 Kaldi 靈活得多。我們希望人們能基於這個工具發明下一代的 ASR 演算法。”],[20,”\n”,”24:\”JyJq\””],[20,”\n”,”24:\”UiY0\””],[20,”這個工具包將使我們有可能,把所有與語音相關的部分,分離到一個不同的程式碼庫中,這個程式碼庫叫做 lhotse。”],[20,”\n”,”24:\”d2qn\””],[20,”\n”,”24:\”2cNl\””],[20,”我希望到 9 月我們能有一個簡單的演示,儘管它不會完全完成。”],[20,”\n”,”24:\”Af4u\””],[20,”\n”,”24:\”kbjO\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,{“gallery”:”//uploader.shimo.im/f/CgLStDeK5kX3fOpC.jpg!thumbnail”},”29:0|30:0|3:\”960\”|4:\”auto\”|crop:\”\”|frame:\”none\”|ori-height:\”540\”|ori-width:\”960\””],[20,”\n”,”24:\”sSg3\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”\n”,”24:\”qaJe\”|7:0|linespacing:\”150\”|text-indent:\”1\””],[20,”所以我們不只是擴展 Kaldi 的原因,是我覺得這個項目太大了。它有太多的 C++ 程式碼,如果再加上 Python,會變得太複雜。所以我決定做一個全新的。”],[20,”\n”,”24:\”HRmr\””],[20,”\n”,”24:\”Y2ci\””],[20,”好的,謝謝你們。”],[20,”\n”,”24:\”oivL\””]]”>AI研習社按:
8 月 7 日 – 9 日,由中國電腦學會(CCF)主辦,雷鋒網、香港中文大學(深圳)承辦,鵬城實驗室、深圳市人工智慧與機器人研究院協辦的第五屆 CCF-GAIR 2020 全球人工智慧與機器人峰會如期落地。8 日,峰會與 AI 研習社、OpenI 啟智社區聯合舉辦「AI 源創專場」,重點討論了新基建背景下,中國開源創新建設將催生的新勢能,以及其將引發和促進的新產業機會。
AI源創專場現場迎來了華為計算開源生態部副總監黃之鵬。一年前,華為發布了全場景 AI 計算框架 MindSpore,並同時公布了 2020 年的開源計劃。今年 3 月底,開發者們如期迎來了MindSpore全面開源。MindSpore 可以適應端、邊、雲多個場景,並且與華為昇騰 AI 處理器的協同優化能帶來效率提升,黃之鵬就此發表演講。
(華為計算開源生態部副總監,黃之鵬)
黃之鵬在演講中介紹了 MindSpore 的功能、特性以及在華為的業務落地情況。
MindSpore是提供面向端、邊、雲全場景的統一API,對開發者提供一些非常友好的特性。目前 MindSpore在華為的業務上已經有了落地,內部有很多的實驗室已經大規模的應用了 MindSpore 的框架。華為手機搭載的 HMS 4.0開始已經搭載 MindSpore 的端側推理能力,主要支撐的是 ML-kit使能的手機App。
除了自動微分、自動並行、二階優化、量化訓練、圖算融合等關鍵特性外,MindSpore 也提供了可視化工具,比如影像模式、直方圖、數據溯源等等,儘可能的直觀給工程師呈現AI實驗的過程和細節;以及模型攻擊評估工具,幫助開發者能夠評估其所開發的MindSpore模型的安全性和魯棒性。
黃之鵬表示 MindSpore 和中國其他已有的深度學習框架開源項目不太一樣,採用了比較開放的架構,其中技術治理委員會(TSC)是由14名來自中美歐的專家組成。採用社區治理架構正是因為華為希望 MindSpore 能成為一個面向全球的開源社區,而不僅局限在一個區域內。
以下為黃之鵬的現場演講內容,AI研習社進行了不改變原意的編輯及整理:
謝謝主持人,MindSpore是華為3月28日開源的框架,華為的解決方案是全棧式的解決方案,包括了我們公有雲提供的框架,我們的CANN使能層和自研的昇騰硬體。
下面我介紹一下MindSpore的特性,總體來說,MindSpore是提供面向端、邊、雲全場景的統一API,我們提供一些比較新的,對於開發者非常友好的特性。大家如果了解深度學習框架這些年的發展趨勢,其實框架現在主要集中在編譯優化和軟硬結合這兩塊,對於MindSpore來說,編譯層面大量的優化也是我們的特點之一。
和硬體的結合上,MindSpore代表軟硬結合的思路,具有面向系統進行設計特性。
MindSpore是比較年輕的社區,我們程式碼主要託管在碼雲,通過自己做的小機器人,同時同步到Github,方便中國、國外的開發者。我們也製作了很多版本宣傳影片和教學影片,希望通過各種渠道幫助開發者更快的了解我們的框架。
MindSpore在華為的業務上已經有了落地,我們內部有很多的實驗室已經大規模的應用了MindSpore的框架。華為手機搭載的HMS4.0開始已經搭載MindSpore的端側推理能力,主要支撐的是ML-kit所使能的手機App。在電信領域,華為支援了很多電信領域AI結合的嘗試,主要是我們的NAIE解決方案。
今天下午講了很多的框架,為什麼又出一個框架,為什麼又要學習一個框架?對於華為來說,我們做框架並不是單純為了解決軟體的問題,當然軟體是很大的問題,對於華為來說,主要是全棧的思考,從模型到數據到應用的部署,到跟演算法工程師流水線的使能,再到硬體,我們希望這一整套都可以提供一套思路,幫助或是和業界一起往前走,做出一些創新。
下面來介紹MindSpore的幾個主要特性:
MindSpore的自動微分
自動微分對於深度學習框架來說,並非是新事物。TensorFlow的自動微分主要是基於圖的,其缺點是,現在大多數的框架都是Python的原生編程,TF的自動微分,尤其對於很多的科研都需要二階、三階的計算,是非常複雜的。Pytorch主要是通過Python語言的自身特性,通過運算符重載來實現自動微分,但其缺點在於運行時開銷較大。MindSpore採用基於源程式碼的自動微分技術,在讓開發者可以用Python開發模型的同時,通過我們的編譯優化技術達到自動微分,生成對硬體優化友好的圖IR的源程式碼,整體的執行效率非常高。
所有做分散式、大集群都會遇到並行的問題,從傳統的數據並行,到後來出現模型並行,以及Pioeline並行等方法,都被用來解決此類問題。MindSpore的自動並行藉助昇騰硬體的優秀能力,可以為開發者提供自動並行的能力,不需要開發者手動去寫模型和數據切分及運行的策略。
剛才講的是我們稱之為前端的能力,再往下走是偏硬體或是利用硬體能力的能力,主要是六大功能:Shape推導、引擎劃分,整圖拆分、邊界標識,格式轉換,運算元融合,編譯、Stream分配、Task編譯,圖載入至硬體。帶來顯而易見的好處是,比如MindSpore可以讓開發者只通過一條語句,來實現動態圖到靜態圖非常便利的切換,方便大家在研究和生產等不同環境的調試和部署。
我們也提供一些比較好用的工具,MindSpore提供影像模式、直方圖、數據溯源,總而言之,儘可能的直觀給工程師呈現AI實驗的過程和細節。另外我們提供的工具,模型寫出來被惡意的人使用會達到完全不一樣的效果,模型會模仿各種各樣的攻擊,幫助開發者評估MindSpore開發的模型是否有足夠好的特性。
MindSpore的圖算融合,實際上可以理解為兩層,一個是圖層,後端有AKG做運算元的融合,小運算元組成大運算元,對性能的優化有比較好的提升,我們應用了多面體技術(Polyhedral)去做Auto schedule。
MindSpore的混合異構,比較便捷的實現混合資源高效的任務執行。還有一些特性沒有詳細介紹,比如說量化訓練、二階優化等,都是可以做到比同類開源項目更好的性能。還有一些我們在做的更前端、更前沿的嘗試。
MindSpore和WebAssembly的結合,主要場景目前是在瀏覽器里進行推理任務,為什麼要用瀏覽器?在醫生、金融等場景,不管是PC側還是手機側的瀏覽器,都可運行推理任務。
WebAssembly (WASM)是很多大型廠商關注的新方向,這個技術本身不新,WebAssembly是希望在瀏覽器有提供原生運行性能,很多的開源合作,很多大公司都在嘗試,看能不能從瀏覽器里推廣出來,不僅僅是跑在瀏覽器裡面,也可以跑到伺服器上,跑到PC上,邊緣的設備上。由於WebAssembly是一種堆棧式虛擬機,其安全性是非常好的,像金融、醫療這樣對安全性的要求非常高的場景,會有很多的需求。
我們團隊在做的一個嘗試,最近已經做了一個小型嘗試,加強TVM對WASM及Rust的支援,我們想把TVM很好的能力運用起來,希望能管理起來。
eBPF也是目前比較前沿的技術,提供了靈活的內核虛擬機。比如對網路調優的時候,通常需要走大量的內核函數調用,完成TCP/IP完整協議棧的每一層的檢查。而通過eBPF,則可以把包直接載入在其內核虛擬機分配的暫存器中,進行非常快速的檢查。我們將eBPF這樣的工具應用在AI領域,希望可以幫助我們更好的理解模型訓練、推理時到底發生了什麼,到底觸發了什麼,到底在做些什麼東西,eBPF只是一個工具,我們希望這個路徑打開更多的監測能力。
必須要提的是,除了剛才介紹的這些特性之外,MindSpore和中國其他已有的社區不太一樣的是,我們還是採用了比較開放的架構,MindSpore有兩層的治理架構組成,技術治理委員會(TSC)是由14名來自中美歐的專家組成。採用社區治理架構也是我們希望MindSpore不僅局限在某個區域內的開源項目,希望MindSpore能夠成為面向全球的開源社區。
我們非常歡迎開發者加入到我們社區的開發,可以選擇你感興趣的SIG組,他們每個月基本都會開例會,例會錄屏都會上傳到B站。歡迎大家到社區成立針對某一個特性的SIG組或WG組。我們現在為了方便開發者開發MindSpore,主要是通過華為的ModelArts的服務,目前還有公測,歡迎大家申請。
碼云:gitee.com/mindspore
GitHub:github.com/mindspore-ai

