華為深度學習框架MindSpore正式開源:自動微分不止計算圖

2020-12-06 機器之心Pro

機器之心報導

機器之心編輯部

千呼萬喚始出來——3 月 28 日,華為的全棧全場景 AI 計算框架 MindSpore 終於正式開源了。

今年的華為開發者大會 HDC 2020 上,除了昇騰、鯤鵬等自研晶片硬體平臺之外,最令人期待的就是深度學習框架 MindSpore 的開源了。今天上午,華為 MindSpore 首席科學家陳雷在活動中宣布這款產品正式開源,我們終於可以在開放平臺上一睹它的真面目。作為一款「全場景 AI 框架」,MindSpore 是華為人工智慧解決方案的重要組成部分,與 TensorFlow、PyTorch、PaddlePaddle 等流行深度學習框架對標,旨在大幅度降低 AI 應用開發門檻,讓人工智慧無處不在。MindSpore 是一款支持端、邊、雲獨立/協同的統一訓練和推理框架。華為希望通過這款完整的軟體堆棧,實現一次性算子開發、一致的開發和調試體驗,以此幫助開發者實現一次開發,應用在所有設備上平滑遷移的能力。原生支持 AI 晶片,全場景一致的開發體驗——除了這些我們早已知曉的強大之處外,今天華為還著重展示了 MindSpore 的三大創新能力:新編程範式,執行模式和協作方式。

今天發布的 MindSpore 首個開源版本為 0.1.0-alpha 版,主要由自動微分、自動並行、數據處理等功能構成。華為表示,MindSpore 具備開發算法即代碼、運行高效、部署態靈活的特點,其核心分為三層:從下往上分別是後端運行時、計算圖引擎及前端表示層。MindSpore 開源社區:https://www.mindspore.cn/MindSpore 代碼:https://gitee.com/mindspore從整體上來說,MindSpore 搭建神經網絡會以「單元」為中心,其中單元是張量和運算操作的集合。從輸入張量開始,MindSpore 會提供各種算子以構造一個「單元」,最後模型封裝這個單元就可以用來訓練、推理了。

MindSpore 的整體結構,從後端的硬體支持到前端 API,中間會涉及多種優化與特性。例如不採用計算圖的自動微分、自動並行與優化計算過程等等。MindSpore 最大的特點在於,其採用了業界最新的 Source-to-Source 自動微分,它能利用編譯器及程式語言的底層技術,進一步優化以支持更好的微分表達。自動微分:不止計算圖自動微分是深度學習框架的靈魂,有了它我們寫模型就只需要關注前向傳播,將所有複雜的求導、反傳過程都留給框架。一般而言,自動微分指一種自動求某個函數其導數的方法。在機器學習中,這些導數可以更新權重。在更廣泛的自然科學中,這些導數也能用於各種後續計算。

人類擅長以解析式推導微分,計算機擅長數值微分。一般而言,自動微分都是需要建立計算圖的,有了計算圖才能追蹤各函數、變量的依賴情況,並進一步根據鏈式法則傳遞梯度。然而對於 MindSpore 來說,它並不依賴於計算圖,而是通過一種名為「基於源碼轉換」的自動微分方法,它支持 if、for 等複雜的控制流結構,以及靈活的函數式編程方式。自動微分本質上是解析變量間的依賴關係,並利用全微分法則與鏈式求導法則將梯度傳遞給不同的變量。

將 Python 代碼解析為計算圖。目前主流深度學習框架中主要有三種自動微分技術:

基於靜態計算圖的轉換:將網絡在編譯時轉換為靜態數據流圖,然後將鏈式法則應用於數據流圖,並實現自動微分。基於動態計算圖的轉換:以操作符重載的方式記錄網絡在前向執行時操作軌跡,然後將鏈式法則應用於動態生成的數據流圖,並實現自動微分。基於源碼轉換:該技術源以函數式編程框架為基礎,以即時編譯(JIT)的方式在中間表達(編譯過程中程序的表達形式)上做自動微分變換,支持複雜控制流場景、高階函數和閉包。其中 TF 早期採用的是靜態計算圖,PyTorch 採用的是動態計算圖,靜態圖能利用靜態編譯技術對網絡性能進行優化,然而搭建網絡或 Debug 非常複雜。動態圖的使用非常便捷,但性能上難以做到極致的優化。MindSpore 走的是另外一條路,即基於源碼轉換的自動微分。它又支持對自動控制流的自動微分,所以與 PyTorch 一樣構建模型非常方便。同時 MindSpore 能對神經網絡做靜態編譯優化,因此性能也非常優秀。基於源碼轉換的方法,是自動微分另一條康莊大道。

源碼轉換的簡要工作方式。假設我們用 C 語言寫函數,那麼根據自動微分工具,函數的原始碼會自動轉換為另一種原始碼,這種新生成的原始碼包含了用於計算梯度的語句,它們可以直接編譯。這樣的源碼到源碼轉換對於編譯器非常友好,編譯器在計算過程中也能進行優化。MindSpore 自動微分的實現可以理解為對程序本身進行的符號微分,因為 MindSpore IR 是函數式的中間表達,它與基礎代數中的複合函數有直觀的對應關係,只要已知基礎函數的求導公式,就能推導出由任意基礎函數組成的複合函數的求導公式。MindSpore IR 中每個原語操作可以對應為基礎代數中的基礎函數,這些基礎函數可以構建更複雜的流程控制。自動並行訓練:一切計算都交給它如今的深度學習模型往往因為體量巨大而必須做並行化,MindSpore 能自動並行按照串行寫的代碼,自動實現分布式並行訓練,並且保持高性能。一般而言,並行訓練可以分為模型並行與數據並行,數據並行比較好理解,每一個樣本可以獨立地完成前向傳播,最後再匯總傳播結果。相比之下,模型並行就比較複雜了,需要我們以「並行思維」這樣的邏輯手動編寫所有需要並行的部分。MindSpore 自動並行的目標是構建一種融合了數據並行、模型並行和混合併行的訓練方式。它會自動選擇一種代價最小的模型切分方式,實現自動分布式並行訓練。目前 MindSpore 採用了切分算子細粒度的並行方式,即把圖中每個算子都切分到集群而完成並行運算。這期間切分方式可能非常複雜,但作為崇尚 Pythonic 的開發者,並不需要關心底層實現,只需要頂層 API 計算高效就行了。

除了自動微分與自動並行,MindSpore 還有很多優秀的特性與組件,完整的數據預處理模塊、高效的圖計算引擎都值得我們去探索。例如在數據預處理模塊中,MindSpore 需要考慮如何提升數據預處理的能力,從而使其跟得上昇騰晶片消耗數據的速度。當然可視化工具、模型評估工具等常用模塊也都配齊了,除了常見的計算圖、標量曲線等可視化,MindSpore 還能實現新穎的「模型溯源」,它會把學習率、損失值、模型大小等眾多超參配置都畫在一起,方便開發者調參。MindSpore 代碼什麼樣?用 MindSpore 寫模型,代碼風格還是挺有特色的。之前介紹過,MindSpore 主要概念就是張量、算子、單元和模型,它提供的同樣也是 Python 編程範式,因為採用 Source-to-Source 自動微分,Python 常用的元組、列表等數據結構還能用,匿名函數 Lambda 也沒問題。張量大家都了解了,MindSpore 中的算子可以是卷積,也可以是簡單的加法。它們與張量一起可以構成「單元」,單元是所有神經網絡單元的基本類。單元再封裝就成了模型了,MindSpore 可以直接調用模型來訓練與推理,也可以使用更底層的 API 構建複雜模型。如下所示,我們可以發現寫 MindSpore 有兩個比較突出的亮點。首先當然是計算圖的調整,動態圖與靜態圖可以一行代碼切換。在正常情況下,MindSpore 使用的是 PyNative 動態圖,然而在需要靜態圖的時候,設置個 context 上下文管理器就可以了。

import numpy as npimport mindspore.context as contextimport mindspore.nn as nnfrom mindspore import Tensor# Initialize the networknet = Net()x = Tensor(np.random.rand(1, 1, 4, 1024).astype(np.float32))# Predict the network in PyNative mode, by defaultout = net(x)# Change to Graph mode to predict the networkcontext.set_context(mode=context.GRAPH_MODE)out = net(x)

對於自動並行特性,我們寫的串行代碼,只需要多加一行就能完成自動並行,這背後的複雜並行邏輯完全不需要花費精力去理解。如下所示,只要設置運行環境為圖模式,並允許使用分布式接口 HCCL(華為集合通信庫),那麼在初始化後 MindSpore 就能自動優化我們寫的模型,以最好的並行策略加速整個訓練過程。

import osfrom mindspore import contextfrom mindspore.communication.management import initif __name__ == "__main__":context.set_context(mode=context.GRAPH_MODE, device_target="Ascend", enable_hccl=True, device_id=int(os.environ["DEVICE_ID"])) init() ...

華為表示,MindSpore 原生適應所有的 AI 應用場景,並能在按需協同的基礎上通過實現 AI 算法即代碼,顯著減少模型開發時間。以典型的 Transformer 為例,MindSpore 可降低核心代碼量 20%,開發門檻大大降低,效率整體提升 50% 以上。

隨著框架的開源,MindSpore 相關文檔和教程均已在官網上線,並歡迎開發者提供反饋意見。 至於未來的發展方向,華為表示在開源後大部分工作都將交由社區自主完成:MindSpore 社區會按照社區章程進行運作,未來新版本計劃會由各個特別興趣組 (Special Interest Group, 簡稱 SIG) 輸出,並交技術治理委員會 (Technical Steering Committee,簡稱 TSC) 決策並公示。目前,MindSpore 技術治理委員會由來自依瞳科技、Conic AI、哈爾濱工業大學、華為、工商銀行、帝國理工、中科院計算所、北京大學、清華大學、中國科技大學、愛丁堡大學、University Paris-Saclay、Universitt Münster、西安電子科技大學等 14 名不同機構的代表組成。為吸引開發者,華為還將啟動一系列的開發者體驗活動。隨著深度學習框架等工具的全面開源,「最強 AI 處理晶片」昇騰的落地,華為的 AI 布局已經逐漸清晰起來,MindSpore 將為各行業帶來哪些新變化,讓我們拭目以待。

相關焦點

  • 華為開源自研AI框架MindSpore!自動微分、並行加持,一次訓練,可多...
    乾明 發自 凹非寺  量子位 報導 | 公眾號 QbitAI  華為的開源AI框架,來了!  剛剛,華為宣布正式開源自研深度學習框架MindSpore,代碼已經上線。  首先說自動微分,它是指計算機藉助程序自動求出一個函數導數的通用方法。在深度學習中,通常指對網絡模型的自動求導,通過梯度指導對網絡權重的優化。
  • 清華自研深度學習框架「計圖」開源!多項任務性能超過PyTorch
    原創 關注前沿科技 量子位乾明 發自 凹非寺量子位 報導 | 公眾號 QbitAIAI框架,又來重磅中國玩家。剛剛,清華自研的深度學習框架,正式對外開源。值得一提的是,這也是首個來自中國高校科研機構的開源深度學習框架,之前,業內來自「高校」的還有加拿大蒙特婁大學的Theano,UC伯克利的Caffe。與主流的深度學習框架TensorFlow、Pytorch不同,Jittor是一個完全基於動態編譯(Just-in-time)、使用元算子和統一計算圖的深度學習框架。
  • 深度學習框架比較,我該選擇哪一個?
    隨著更多優秀的深度學習開源框架陸續湧現,Theano 逐漸淡出了人們的視野。2013 年,Theano 創始者之一 Ian Goodfellow 加入 Google 開發 TensorFlow,標誌著 Theano 正式退出歷史舞臺。目前僅有部分研究領域的學者會使用 Theano 進行一些學術研究。
  • MindSpore可視化工具使用指南
    5 月12 日,機器之心聯合華為昇騰學院開設的線上公開課《輕鬆上手開源框架MindSpore》第 6 課完成,王越講師為大家帶來了主題分享《MindSpore可視化工具使用指南
  • 深度學習框架太抽象?其實不外乎這五大核心組件
    為了更好地認識深度學習框架,也為了給一些想要自己親手搭建深度學習框架的朋友提供一些基礎性的指導,日前來自蘇黎世聯邦理工學院計算機科學系的碩士研究生Gokula Krishnan Santhanam在博客上撰文,概括了大部分深度學習框架都會包含的五大核心組件,為我們詳細剖析了深度學習框架一般性的內部組織結構。以下由雷鋒網編譯。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。
  • 計算機圖形也能自動可微:MIT學神的微分太極框架開源
    機器之心機器之心報導參與:一鳴、杜偉去年5月,機器之心報導了 MIT 華人學神胡淵鳴等開源的計算機圖形庫——太極。近日,這位作者聯合其他研究者推出了自動微分版本的太極——微分太極。
  • 谷歌剛發布的深度學習動態計算圖工具TensorFlow Fold是什麼?
    TensorFlow Fold,該庫針對 TensorFlow 1.0 框架量身打造,可以幫助深度學習開發者根據不同結構的輸入數據建立動態的計算圖(Dynamic Computation Graphs),簡化了模型訓練階段對輸入數據的預處理過程,提升了系統的運行效率。
  • 基於動態編譯(Just-in-Time)的全新深度學習框架
    基於動態編譯(Just-in-Time)的全新深度學習框架 風君子 發表於 2020-11-25 11:08:37 據官方消息,清華大學計算機系圖形實驗室宣布開源一個全新的深度學習框架
  • 計算機圖形自動可微:MIT學神微分太極框架開源,論文被ICLR接收
    機器之心報導參與:一鳴、杜偉去年5月,機器之心報導了 MIT 華人學神胡淵鳴等開源的計算機圖形庫——太極。近日,這位作者聯合其他研究者推出了自動微分版本的太極——微分太極。這一框架可以基於太極實現自動微分,在物理模擬優化方面有很高的性能和靈活性。這意味著太極從計算機圖形學進入了機器學習的領域。
  • 陳天奇等人提出TVM:深度學習自動優化代碼生成器
    TVM 是由華盛頓大學在讀博士陳天奇等人提出的深度學習自動代碼生成方法,去年 8 月機器之心曾對其進行過簡要介紹。該技術能自動為大多數計算硬體生成可部署優化代碼,其性能可與當前最優的供應商提供的優化計算庫相比,且可以適應新型專用加速器後端。
  • 迎來PyTorch,告別 Theano,2017 深度學習框架發展大盤點
    深度學習是機器學習中一種基於對數據進行表徵學習的方法,作為當下最熱門的話題,谷歌、Facebook、微軟等巨頭紛紛圍繞深度學習做了一系列研究,一直在支持開源深度學習框架的建設。過去一年間,在這些巨頭的加持下,深度學習框架格局發生了極大改變:新框架橫空出世,舊的框架也逐漸退出歷史舞臺,而框架與框架之間的聯繫也更加緊密,生態更為開放。
  • 35 萬行代碼,曠視重磅開源天元深度學習框架 ,四大特性實現簡單開發
    發布會上,曠視研究院高級技術總監田忠博詳細介紹了這款剛剛正式對外開源的深度學習框架。  全球AI開發框架又添一員,曠視開源「天元」  曠視天元開源之時,正值深度學習框架百花齊放的時代。  自2007年Theano誕生以來,經過十餘年發展,深度學習技術與應用突飛猛進,深度學習框架也處在不斷迭代與進化的過程;另一方面,開源的概念在全球範圍內越來越深入人心,這使得人工智慧開發依賴的環境安裝、部署、測試,以及不斷迭代改進準確性和性能調優的工作變得更加簡單,在人工智慧領域,開源深度學習框架已經成為開發者離不開的平臺和工具。
  • 自動生成硬體優化內核:陳天奇等人發布深度學習編譯器TVM
    TVM 是一個全新的框架,它可以:優化 CPU、GPU 和其他專業化硬體的常規深度學習的計算量自動轉換計算圖以最小化內存利用率,優化數據布局,融合計算模式提供從現有的前端框架到裸機硬體的端到端編譯,一直到瀏覽器可執行的 Javascript有了 TVM 的幫助,只需少量額外工作我們即可輕易地在手機端、嵌入式設備甚至瀏覽器上運行深度學習任務。
  • 用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
    在現代機器學習應用中,對實驗到生產的流程進行簡化是最難實現的任務之一。在已經市場化深度學習框架中,Facebook的PyTorch因其高度靈活性成為數據科學界的最愛,PyTorch能夠實現快速建模和實驗。但是,深度學習應用中的許多實驗面臨的挑戰已經超出了特定框架的能力範圍。
  • TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比
    自 TensorFlow 於 2015 年底正式開源,距今已有一年多,這期間 TensorFlow 不斷給人以驚喜。在這一年多時間,TensorFlow 已從初入深度學習框架大戰的新星,成為了幾近壟斷的行業事實標準。
  • 2020年成國內深度學習框架開源元年 曠視科技開源天元加速AI落地與...
    人工智慧時代,開源作為算法創新與迭代的重要驅動力,在深度學習領域發揮著至關重要的作用。全球諮詢機構IDC《中國深度學習平臺市場份額調研》指出,在AI技術使用方面,接受調研的企業和開發者中,86.2%選擇使用開源的深度學習框架。
  • Yann LeCun:深度學習已死,可微分編程萬歲!
    【新智元導讀】LeCun又發表驚人言論,繼昨天參與深度學習論戰、噴機器人Sophia後,今天他在Facebook主頁發文,稱「深度學習已死,可微分編程萬歲!」深度學習真的死了?而可微分編程又是什麼呢?LeCun又語出驚人了,這次直指深度學習——好,深度學習作為一個流行詞,現在時效已過。
  • 從概念到實踐,我們該如何構建自動微分庫
    像 PyTorch 或 TensorFlow 這樣通用的自動微分框架是非常有用和高效的,而且在大多數情況下,幾乎不需要再寫一些更專門化的東西。然而本文作者構建了一個自動微分庫,以高效地計算小批量數據上的訓練。此外,作者還詳細描述了在構建自動微分庫中的過程與思考,是理解自動微分理念的優秀博文。
  • 使用Python從頭開始實現深度學習庫
    理解深度學習平臺基本構建基礎的初學者指南。深度學習已在短時間內從簡單的神經網絡演變為非常複雜的架構。為了支持這種快速擴展,在此過程中開發了許多不同的深度學習平臺和庫。這些庫的主要目標之一是提供用於構建和訓練深度學習模型的易於使用的界面,使用戶可以將更多的精力放在手頭的任務上。