經過社區(qū)開發(fā)者們兩個月來的不斷努力,昇思MindSpore1.8版本現(xiàn)已發(fā)布。在此版本中,發(fā)布的MindSpore Golden Stick,提供了豐富的模型壓縮算法;開源大模型訓練套件MindSpore Transformer、推薦網絡訓練套件MindSpore Recommender,幫助開發(fā)者實現(xiàn)高性能的模型并行訓練和推薦網絡大模型訓練;持續(xù)升級自定義算子能力,實現(xiàn)多平臺的統(tǒng)一算子開發(fā)表達;統(tǒng)一圖像處理類接口、提供model.fit高階API和早停功能,不斷提升API接口易用性;新增180多個算子的functional接口,并支持NPU、GPU、CPU平臺,方便開發(fā)者調用。下面就帶大家詳細了解下1.8版本的關鍵特性。
1 MindSpore Golden Stick,降低端側AI部署門檻
MindSpore Golden Stick是華為諾亞實驗室和昇思MindSpore團隊基于昇思研發(fā)的模型壓縮算法集,通過提供剪枝、量化等豐富的模型壓縮算法,達到縮減模型參數(shù)量等效果,降低模型在端側部署的門檻;此外,面向開發(fā)者還提供一套簡單易用的算法接口,可降低模型壓縮算法的應用成本。
MindSpore Golden Stick架構圖
1.1 統(tǒng)一的算法接口和改圖能力
模型壓縮算法種類繁多,不同算法的應用方式往往各不相同,這增加了應用算法的學習成本。MindSpore Golden Stick對算法應用流程做了梳理和抽象,提供了一套統(tǒng)一的算法應用接口,最大程度縮減算法應用的學習成本,同時這也方便了在各種算法的基礎上,對自動模型壓縮等高階技術的探索。
同時,MindSpore Golden Stick提供了通過接口修改前端網絡的能力,算法開發(fā)者可以基于此能力制定通用的改圖規(guī)則去實現(xiàn)算法邏輯,而不需要針對每個特定的網絡都實現(xiàn)一遍算法邏輯,提升算法開發(fā)效率。
1.2 剪枝算法:SCOP[1],縮減模型功耗50%
MindSpore Golden Stick當前提供的一個結構化剪枝算法SCOP(Scientific Control for Reliable Neural Network Pruning,基于科學控制法的神經網絡剪枝),在數(shù)據驅動下,設置了對照實驗,通過引入對照特征來減少各種無關因素對剪枝過程的干擾,提高剪枝結果的可靠性。
ResNet50模型應用SCOP剪枝,并使用CIFAR-10數(shù)據集評估,實驗結果如下表所示,在剪枝率45%的情況下,精度損失在0.5%以內,模型參數(shù)量下降超過50%,帶來50%以上的部署功耗縮減和2倍以上的推理性能收益。
表 SCOP剪枝算法用于ResNet50的CIFAR-10數(shù)據集結果
模型 | 剪枝率 | 參數(shù)量 | 準確率 |
ResNet50 | - | 24M | 93.2% |
SCOP剪枝ResNet50 | 45% | 11M | 92.7% |
1.3 量化算法:SLB[2],壓縮模型8-32倍
MindSpore Golden Stick當前提供的一個量化算法是華為諾亞實驗室自研的SLB(Searching for low-bit weights,基于權值搜索的低比特神經網絡量化)。針對低比特網絡量化,由于量化網絡權值的有效解數(shù)量比較少,因此對網絡的量化可以通過對權值搜索實現(xiàn),也就是將量化過程轉換成權值搜索的過程。與傳統(tǒng)的量化算法相比,規(guī)避了不準確的梯度更新過程,能獲得更好的準確率,在極低比特量化中更有優(yōu)勢。
對SLB算法做了簡單的實驗,結果如下圖所示,在當前任務中,與全精度模型相比,4bit權重量化后的模型大小縮減為原來的1/8,但top1精度沒有損失,1bit權重量化的精度損失在0.6%以內,此時可以獲得32倍的模型壓縮效果。
SLB權重量化算法用于量化ResNet18的CIFAR-10數(shù)據集結果,W32表示全精度模型,W4,W2,W1分別對應4bit、2bit和1bit權重量化模型
查看文檔:https://www.mindspore.cn/golden_stick/docs/zh-CN/r0.1/index.html
2 高性能的大模型訓練套件MindSpore Transformer
目前Transformer已經廣泛地應用在深度學習的各個領域,為了結合昇思豐富的并行能力和高性能優(yōu)化特性,讓開發(fā)者能夠輕松上手Transformer類網絡訓練,社區(qū)專門提供的MindSpore Transformer是一個開源的Transformer類網絡訓練和推理套件。套件提供了典型網絡,例如GPT、T5、VIT等基礎模型的訓練能力,并結合昇思MindSpore豐富的并行訓練能力,實現(xiàn)高性能的模型并行訓練。通過實驗得出,在相同的硬件條件下,昇思MindSpore比Megatron的性能要優(yōu)越18%以上。
2.1 多維度混合并行與圖算融合優(yōu)化
MindSpore Transformer主要應用了如下兩種技術:
1. 多維度混合并行,包含優(yōu)化器并行、多副本并行等技術。通過優(yōu)化數(shù)據并行維度上的冗余參數(shù)和通信計算并發(fā),可有效提升網絡的訓練性能。
2. 圖算融合優(yōu)化:昇思的圖算融合功能可以自動實現(xiàn)算子融合和編譯優(yōu)化,提升模型的內存效率和訓練速度。在MindSpore Transformer的所有模型和數(shù)據/模型并行模式下,圖算融合均已大范圍應用并取得了顯著效果。
2.2 性能對比
昇思研發(fā)團隊分別在8p、16p和32p A100集群上測試了百億規(guī)模GPT(hiddensize=5120, num_layers=35, num_heads=40)性能,模型并行路數(shù)設置為8,數(shù)據并行數(shù)分別為1、2、4,Global Batch為1024。Megatron配置Micro Batch Size=2(Megatron已達到上限),MindSpore配置Micro Batch Size=8(MindSpore已達到上限),相比Megatron,昇思MindSpore的內存利用率更高,可以訓練更大的Batch Size。
圖 吞吐率對比
如上圖所示,8P Megatron的最大吞吐率為7.4 k samples/s,MindSpore 最大吞吐率為9.3k samples/s,超過Megatron 25%;16P Megatron的最大吞吐率為13.6k samples/s,MindSpore最大吞吐率為16.9k samples/s,超過Megatron 24%;32P Megatron的最大吞吐率為20.1k samples/s,MindSpore最大吞吐率為23.8k samples/s,超過Megatron 18%。
開源鏈接:https://gitee.com/mindspore/transformer
3 高性能的推薦網絡訓練套件MindSpore Recommender
推薦系統(tǒng)中部署了多種點擊率(CTR)模型,為提高推薦點擊率,需要對深度CTR模型進行高效的訓練,推薦網絡的訓練性能是模型實時性的重要因素之一。昇思MindSpore 1.8版本提供了推薦網絡大模型訓練套件—MindSpore Recommender,結合昇思MindSpore自動并行、圖算融合以及分布式Embedding Cache等基礎能力,實現(xiàn)了推薦網絡大模型的高性能訓練。在套件中提供了主流推薦網絡模型(如Wide&Deep)端到端的訓練流程,包括數(shù)據集預處理、模型訓練、Benchmark等,為開發(fā)者提供了一站式的推薦大模型訓練能力。
3.1 推薦大模型訓練架構
技術架構圖
1. 自動并行:通過模型并行實現(xiàn)Sparse計算(Embedding)多卡自動切分,數(shù)據并行實現(xiàn)Dense計算與集合通信并發(fā)執(zhí)行,有效提升網絡的整體訓練性能。
2. 分布式Embedding Cache:采用多級Embedding Cache、多級計算流水等設計,實現(xiàn)了大規(guī)模特征向量的存儲與高性能訓練。
3. 分布式計算圖:通過分布式計算圖切分與執(zhí)行,實現(xiàn)了大規(guī)模特征向量的分布式存儲與高性能本地計算。
3.2 性能對比
基于GPU V100集群Wide&Deep模型訓練(batch_size=16000, vocab_size=5860000),如下圖所示,單機八卡上昇思MindSpore的吞吐率優(yōu)于HugeCTR 35%。
圖 Wide&Deep訓練吞吐率
開源鏈接:https://gitee.com/mindspore/recommender
4 自定義算子持續(xù)升級,統(tǒng)一表達支持高效添加算子
年初發(fā)布昇思MindSpore1.6版本提供了多平臺的統(tǒng)一算子開發(fā)接口Custom,能夠快捷地進行不同類型自定義算子的定義和使用。為了進一步提升自定義算子的體驗,昇思MindSpore1.8版本提供統(tǒng)一的MindSpore Hybrid DSL表達,支持包括Ascend,GPU和CPU在內多平臺的統(tǒng)一算子開發(fā)表達,可以在全平臺同時滿足快速驗證和實時編譯的需求。此外,1.8版本提供接入Julia算子的自定義算子新模式,成為業(yè)界首個支持Julia語言的AI框架。
4.1 跨平臺統(tǒng)一的MindSpore Hybrid DSL表達
MindSpore Hybrid DSL支持在不同平臺用統(tǒng)一的表達開發(fā)算子,一次開發(fā)便可以在所有后端使用。此外,開發(fā)的算子接入Custom接口時,既可以通過hybrid模式即時編譯運行,亦可通過pyfunc模式解釋運行方便快速驗證。
此外基于MindSpore Hybrid DSL提供新的調度原語,幫助hybrid類型自定義算子在Ascend后端使能多面體模型的專用處理器(DSA)調度器,實現(xiàn)手自一體的算子調度協(xié)助代碼生成,幫助開發(fā)者基于Ascend后端加速科學計算任務。
查看文檔:https://www.mindspore.cn/tutorials/experts/zh-CN/r1.8/operation/op_custom.html
4.2 業(yè)界首個支持Julia語言的AI框架
Julia是一種速度快且使用簡單的高級通用編程語言,最初設計是用于科學計算領域,而由于其高效而實用的特性,近些年來越來越受到青睞,逐步邁向主流編程語言。昇思MindSpore 1.8版本在算子開發(fā)接口Custom提供Julia模式,把基于Julia語言開發(fā)的算子和基于昇思開發(fā)的模型有機地結合在一起。開發(fā)者可以采用Julia算子加速運算,也可以使用Julia生態(tài)高效地開發(fā)算子。如此,開發(fā)者在模型移植、快速驗證以及模型加速等場景下使能Julia算子,在基于昇思MindSpore開發(fā)的模型中享受Julia語言對計算帶來的收益。
查看文檔:https://www.mindspore.cn/tutorials/experts/zh-CN/r1.8/operation/op_custom.html
5 MindSpore Data統(tǒng)一圖像處理類接口,提升接口API易用性
昇思MindSpore1.8版本中,MindSpore Data模塊對于圖像類數(shù)據預處理操作進行重新設計及改造,從原有的c_transforms和py_transforms兩種類型操作合并為transforms統(tǒng)一接口,同時對其中包含的各類數(shù)據處理算子進行歸一合并,減少開發(fā)者混用算子的轉換操作,并基于算子上下文實現(xiàn)自動的算子輸出格式轉換,極簡易用,同時對資深開發(fā)者仍然保留了手動選擇算子策略的能力。
5.1 實現(xiàn)方式
將c_transforms和py_transforms相同的功能合并為同一個接口,內部保留兩種底層實現(xiàn),執(zhí)行時優(yōu)先使用C層實現(xiàn),保證高效率;不同的功能分別保留C層和Python層底層實現(xiàn),執(zhí)行時只有唯一方式。
5.2 實現(xiàn)后總結
1. 包的導入方式統(tǒng)一,如下圖所示。
2. 數(shù)據處理接口統(tǒng)一,如下圖所示。
3. 運行方式舉例,如下圖所示。
詳情參考:https://www.mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore.dataset.vision.html
6 支持邊訓練邊推理和早停功能
6.1 提供model.fit高階API
之前的訓練及推理分別通過model.train和model.eval兩個接口執(zhí)行,如果在訓練過程中需要查看驗證集的評估指標來監(jiān)控模型效果,需手動實現(xiàn);而昇思MindSpore1.8提供model.fit高階API,對model.train及model.eval進行了封裝,保證原有功能的情況下簡化了開發(fā)流程,開發(fā)者只需傳入對應的參數(shù),即可一行代碼實現(xiàn)自動化訓練及推理。
詳情參考:https://mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore/mindspore.Model.html#mindspore.Model.fit
6.2 實現(xiàn)EarlyStopping和ReduceLROnPlateau功能
為及時掌握訓練過程中模型的狀態(tài)、實時觀察模型各參數(shù)的變化情況和實現(xiàn)訓練過程中自定義的一些操作,昇思提供了回調機制(Callback)來實現(xiàn)上述功能,對標業(yè)界框架,昇思MindSpore1.8版本新增EarlyStopping及ReduceLROnPlateau兩個Callback,可用于model.train和model.fit中,實現(xiàn)指定指標的Epoch級別的驗證:當指標值變差,超過可容忍閾值或等待時間超過可容忍Epoch數(shù)時,EarlyStopping將終止訓練過程實現(xiàn)早停,而ReduceLROnPlateau將按照開發(fā)者指定的學習率衰減規(guī)則,改變學習率。
詳情參考:https://mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore/mindspore.EarlyStopping.html
https://mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore/mindspore.ReduceLROnPlateau.html
7 支持網絡的常量輸入可變,提升編譯效率
當前圖編譯機制是除Tensor外所有頂層網絡的輸入都被當做常量值,如標量、tuple、list和dict。而常量值是不能求導的,而且在編譯優(yōu)化階段會被常量折疊掉。
另外,當網絡的輸入是tuple[Tensor],list[Tensor]或dict[Tensor]時,即使里面Tensor的shape和dtype沒有發(fā)生變化,在多次調用同一個網絡去得到結果時,由于輸入都被當做常量值去處理了,無法忽略掉里面Tensor的具體數(shù)值,所以導致網絡每次都會被重新編譯,降低訓練效率。
為解決以上的問題,昇思MindSpore1.8版本新增了mutable接口去設置網絡的常量輸入為“可變的”,也就是把這個輸入當做像Tensor一樣的變量,從而可以對其求梯度以及防止網絡被重復編譯。接口用法也比較簡單,在傳參時對網絡輸入用mutable接口進行包裹即可,如下圖所示。
圖 用例對tuple[Tensor]類型的輸入進行包裹
8 MindSpore Reinforcement,提供高性能分布式訓練和原生蒙特卡洛樹搜索算法
8.1 通過Dataflow Fragment實現(xiàn)靈活,高性能的分布式訓練
當前分布式強化學習框架主要以Python函數(shù)的方式實現(xiàn)強化學習算法,雖然具有直觀的編程API,但在多機并行和異構加速上卻很有挑戰(zhàn)。
MindSpore Reinforcement v0.5.0提供基于Dataflow Fragment的分布式策略(DP),支持將深度強化學習算法分割成多個數(shù)據流片段,并映射到異構設備上執(zhí)行。相同的算法可以根據不同的分布式策略而部署到單機多卡或多機多卡上。下圖中展示了基于Dataflow Fragment的分布式策略,以及對應的訓練加速效果,在多機多卡分布式訓練場景下可大幅縮短算法的訓練時間。
圖 分布式策略示意圖(左:分布式策略1; 右:分布式策略2)
圖 不同分布式策略下的訓練時間
詳情參考:https://gitee.com/mindspore/reinforcement/tree/master/example/ppo
8.2 蒙特卡洛樹搜索(MCTS)
蒙特卡洛樹搜索(MCTS)是一種決策搜索算法,以MCTS為基礎的強化學習算法(如AlphaGo)獲得成功之后,MCTS在強化學習算法中的應用越來越廣泛。
圖 MSTC算法偽代碼
MindSpore Reinforcement v0.5.0提供了通用可擴展的MCTS算法。 開發(fā)者可以使用Python在強化學習算法中直接調用框架內置的MCTS算法,也可以通過擴展來完成自定義邏輯,框架自動將算法編譯成計算圖,實現(xiàn)高效執(zhí)行。
詳情參考:https://gitee.com/mindspore/reinforcement/tree/master/example/mcts
9 參考文獻
[1] Tang, Yehui, et al. "Scop: Scientific control for reliable neural network pruning." NeurIPS 2020: 10936-10947.
[2] Yang Z, Wang Y, Han K, et al. Searching for low-bit weights in quantized neural networks. NIPS, 2020.
(免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現(xiàn)的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。 )