昇思MindSpore 1.8:豐富的算法集與套件,實現(xiàn)高性能訓(xùn)練,降低部署門檻

經(jīng)過社區(qū)開發(fā)者們兩個月來的不斷努力,昇思MindSpore1.8版本現(xiàn)已發(fā)布。在此版本中,發(fā)布的MindSpore Golden Stick,提供了豐富的模型壓縮算法;開源大模型訓(xùn)練套件MindSpore Transformer、推薦網(wǎng)絡(luò)訓(xùn)練套件MindSpore Recommender,幫助開發(fā)者實現(xiàn)高性能的模型并行訓(xùn)練和推薦網(wǎng)絡(luò)大模型訓(xùn)練;持續(xù)升級自定義算子能力,實現(xiàn)多平臺的統(tǒng)一算子開發(fā)表達(dá);統(tǒng)一圖像處理類接口、提供model.fit高階API和早停功能,不斷提升API接口易用性;新增180多個算子的functional接口,并支持NPU、GPU、CPU平臺,方便開發(fā)者調(diào)用。下面就帶大家詳細(xì)了解下1.8版本的關(guān)鍵特性。


1  MindSpore Golden Stick,降低端側(cè)AI部署門檻

MindSpore Golden Stick是華為諾亞實驗室和昇思MindSpore團(tuán)隊基于昇思研發(fā)的模型壓縮算法集,通過提供剪枝、量化等豐富的模型壓縮算法,達(dá)到縮減模型參數(shù)量等效果,降低模型在端側(cè)部署的門檻;此外,面向開發(fā)者還提供一套簡單易用的算法接口,可降低模型壓縮算法的應(yīng)用成本。

MindSpore Golden Stick架構(gòu)圖

1.1  統(tǒng)一的算法接口和改圖能力

模型壓縮算法種類繁多,不同算法的應(yīng)用方式往往各不相同,這增加了應(yīng)用算法的學(xué)習(xí)成本。MindSpore Golden Stick對算法應(yīng)用流程做了梳理和抽象,提供了一套統(tǒng)一的算法應(yīng)用接口,最大程度縮減算法應(yīng)用的學(xué)習(xí)成本,同時這也方便了在各種算法的基礎(chǔ)上,對自動模型壓縮等高階技術(shù)的探索。

同時,MindSpore Golden Stick提供了通過接口修改前端網(wǎng)絡(luò)的能力,算法開發(fā)者可以基于此能力制定通用的改圖規(guī)則去實現(xiàn)算法邏輯,而不需要針對每個特定的網(wǎng)絡(luò)都實現(xiàn)一遍算法邏輯,提升算法開發(fā)效率。

1.2  剪枝算法:SCOP[1],縮減模型功耗50%

MindSpore Golden Stick當(dāng)前提供的一個結(jié)構(gòu)化剪枝算法SCOP(Scientific Control for Reliable Neural Network Pruning,基于科學(xué)控制法的神經(jīng)網(wǎng)絡(luò)剪枝),在數(shù)據(jù)驅(qū)動下,設(shè)置了對照實驗,通過引入對照特征來減少各種無關(guān)因素對剪枝過程的干擾,提高剪枝結(jié)果的可靠性。

ResNet50模型應(yīng)用SCOP剪枝,并使用CIFAR-10數(shù)據(jù)集評估,實驗結(jié)果如下表所示,在剪枝率45%的情況下,精度損失在0.5%以內(nèi),模型參數(shù)量下降超過50%,帶來50%以上的部署功耗縮減和2倍以上的推理性能收益。

表 SCOP剪枝算法用于ResNet50的CIFAR-10數(shù)據(jù)集結(jié)果

模型

剪枝率

參數(shù)量

準(zhǔn)確率

ResNet50

-

24M

93.2%

SCOP剪枝ResNet50

45%

11M

92.7%


1.3  量化算法:SLB[2],壓縮模型8-32倍

MindSpore Golden Stick當(dāng)前提供的一個量化算法是華為諾亞實驗室自研的SLB(Searching for low-bit weights,基于權(quán)值搜索的低比特神經(jīng)網(wǎng)絡(luò)量化)。針對低比特網(wǎng)絡(luò)量化,由于量化網(wǎng)絡(luò)權(quán)值的有效解數(shù)量比較少,因此對網(wǎng)絡(luò)的量化可以通過對權(quán)值搜索實現(xiàn),也就是將量化過程轉(zhuǎn)換成權(quán)值搜索的過程。與傳統(tǒng)的量化算法相比,規(guī)避了不準(zhǔn)確的梯度更新過程,能獲得更好的準(zhǔn)確率,在極低比特量化中更有優(yōu)勢。

對SLB算法做了簡單的實驗,結(jié)果如下圖所示,在當(dāng)前任務(wù)中,與全精度模型相比,4bit權(quán)重量化后的模型大小縮減為原來的1/8,但top1精度沒有損失,1bit權(quán)重量化的精度損失在0.6%以內(nèi),此時可以獲得32倍的模型壓縮效果。

SLB權(quán)重量化算法用于量化ResNet18的CIFAR-10數(shù)據(jù)集結(jié)果,W32表示全精度模型,W4,W2,W1分別對應(yīng)4bit、2bit和1bit權(quán)重量化模型

查看文檔:https://www.mindspore.cn/golden_stick/docs/zh-CN/r0.1/index.html 


2  高性能的大模型訓(xùn)練套件MindSpore Transformer

目前Transformer已經(jīng)廣泛地應(yīng)用在深度學(xué)習(xí)的各個領(lǐng)域,為了結(jié)合昇思豐富的并行能力和高性能優(yōu)化特性,讓開發(fā)者能夠輕松上手Transformer類網(wǎng)絡(luò)訓(xùn)練,社區(qū)專門提供的MindSpore Transformer是一個開源的Transformer類網(wǎng)絡(luò)訓(xùn)練和推理套件。套件提供了典型網(wǎng)絡(luò),例如GPT、T5、VIT等基礎(chǔ)模型的訓(xùn)練能力,并結(jié)合昇思MindSpore豐富的并行訓(xùn)練能力,實現(xiàn)高性能的模型并行訓(xùn)練。通過實驗得出,在相同的硬件條件下,昇思MindSpore比Megatron的性能要優(yōu)越18%以上。

2.1  多維度混合并行與圖算融合優(yōu)化

MindSpore Transformer主要應(yīng)用了如下兩種技術(shù):

1. 多維度混合并行,包含優(yōu)化器并行、多副本并行等技術(shù)。通過優(yōu)化數(shù)據(jù)并行維度上的冗余參數(shù)和通信計算并發(fā),可有效提升網(wǎng)絡(luò)的訓(xùn)練性能。

2. 圖算融合優(yōu)化:昇思的圖算融合功能可以自動實現(xiàn)算子融合和編譯優(yōu)化,提升模型的內(nèi)存效率和訓(xùn)練速度。在MindSpore Transformer的所有模型和數(shù)據(jù)/模型并行模式下,圖算融合均已大范圍應(yīng)用并取得了顯著效果。

2.2  性能對比

昇思研發(fā)團(tuán)隊分別在8p、16p和32p A100集群上測試了百億規(guī)模GPT(hiddensize=5120, num_layers=35, num_heads=40)性能,模型并行路數(shù)設(shè)置為8,數(shù)據(jù)并行數(shù)分別為1、2、4,Global Batch為1024。Megatron配置Micro Batch Size=2(Megatron已達(dá)到上限),MindSpore配置Micro Batch Size=8(MindSpore已達(dá)到上限),相比Megatron,昇思MindSpore的內(nèi)存利用率更高,可以訓(xùn)練更大的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  高性能的推薦網(wǎng)絡(luò)訓(xùn)練套件MindSpore Recommender

推薦系統(tǒng)中部署了多種點擊率(CTR)模型,為提高推薦點擊率,需要對深度CTR模型進(jìn)行高效的訓(xùn)練,推薦網(wǎng)絡(luò)的訓(xùn)練性能是模型實時性的重要因素之一。昇思MindSpore 1.8版本提供了推薦網(wǎng)絡(luò)大模型訓(xùn)練套件—MindSpore Recommender,結(jié)合昇思MindSpore自動并行、圖算融合以及分布式Embedding Cache等基礎(chǔ)能力,實現(xiàn)了推薦網(wǎng)絡(luò)大模型的高性能訓(xùn)練。在套件中提供了主流推薦網(wǎng)絡(luò)模型(如Wide&Deep)端到端的訓(xùn)練流程,包括數(shù)據(jù)集預(yù)處理、模型訓(xùn)練、Benchmark等,為開發(fā)者提供了一站式的推薦大模型訓(xùn)練能力。

3.1  推薦大模型訓(xùn)練架構(gòu)

技術(shù)架構(gòu)圖

1. 自動并行:通過模型并行實現(xiàn)Sparse計算(Embedding)多卡自動切分,數(shù)據(jù)并行實現(xiàn)Dense計算與集合通信并發(fā)執(zhí)行,有效提升網(wǎng)絡(luò)的整體訓(xùn)練性能。

2. 分布式Embedding Cache:采用多級Embedding Cache、多級計算流水等設(shè)計,實現(xiàn)了大規(guī)模特征向量的存儲與高性能訓(xùn)練。

3. 分布式計算圖:通過分布式計算圖切分與執(zhí)行,實現(xiàn)了大規(guī)模特征向量的分布式存儲與高性能本地計算。

3.2  性能對比

基于GPU V100集群Wide&Deep模型訓(xùn)練(batch_size=16000, vocab_size=5860000),如下圖所示,單機八卡上昇思MindSpore的吞吐率優(yōu)于HugeCTR 35%。

圖 Wide&Deep訓(xùn)練吞吐率

開源鏈接:https://gitee.com/mindspore/recommender 


4  自定義算子持續(xù)升級,統(tǒng)一表達(dá)支持高效添加算子

年初發(fā)布昇思MindSpore1.6版本提供了多平臺的統(tǒng)一算子開發(fā)接口Custom,能夠快捷地進(jìn)行不同類型自定義算子的定義和使用。為了進(jìn)一步提升自定義算子的體驗,昇思MindSpore1.8版本提供統(tǒng)一的MindSpore Hybrid DSL表達(dá),支持包括Ascend,GPU和CPU在內(nèi)多平臺的統(tǒng)一算子開發(fā)表達(dá),可以在全平臺同時滿足快速驗證和實時編譯的需求。此外,1.8版本提供接入Julia算子的自定義算子新模式,成為業(yè)界首個支持Julia語言的AI框架。

4.1  跨平臺統(tǒng)一的MindSpore Hybrid DSL表達(dá)

MindSpore Hybrid DSL支持在不同平臺用統(tǒng)一的表達(dá)開發(fā)算子,一次開發(fā)便可以在所有后端使用。此外,開發(fā)的算子接入Custom接口時,既可以通過hybrid模式即時編譯運行,亦可通過pyfunc模式解釋運行方便快速驗證。

此外基于MindSpore Hybrid DSL提供新的調(diào)度原語,幫助hybrid類型自定義算子在Ascend后端使能多面體模型的專用處理器(DSA)調(diào)度器,實現(xiàn)手自一體的算子調(diào)度協(xié)助代碼生成,幫助開發(fā)者基于Ascend后端加速科學(xué)計算任務(wù)。

查看文檔:https://www.mindspore.cn/tutorials/experts/zh-CN/r1.8/operation/op_custom.html

4.2  業(yè)界首個支持Julia語言的AI框架

Julia是一種速度快且使用簡單的高級通用編程語言,最初設(shè)計是用于科學(xué)計算領(lǐng)域,而由于其高效而實用的特性,近些年來越來越受到青睞,逐步邁向主流編程語言。昇思MindSpore 1.8版本在算子開發(fā)接口Custom提供Julia模式,把基于Julia語言開發(fā)的算子和基于昇思開發(fā)的模型有機地結(jié)合在一起。開發(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ù)據(jù)預(yù)處理操作進(jìn)行重新設(shè)計及改造,從原有的c_transforms和py_transforms兩種類型操作合并為transforms統(tǒng)一接口,同時對其中包含的各類數(shù)據(jù)處理算子進(jìn)行歸一合并,減少開發(fā)者混用算子的轉(zhuǎn)換操作,并基于算子上下文實現(xiàn)自動的算子輸出格式轉(zhuǎn)換,極簡易用,同時對資深開發(fā)者仍然保留了手動選擇算子策略的能力。

5.1  實現(xiàn)方式

將c_transforms和py_transforms相同的功能合并為同一個接口,內(nèi)部保留兩種底層實現(xiàn),執(zhí)行時優(yōu)先使用C層實現(xiàn),保證高效率;不同的功能分別保留C層和Python層底層實現(xiàn),執(zhí)行時只有唯一方式。

5.2  實現(xiàn)后總結(jié)

1. 包的導(dǎo)入方式統(tǒng)一,如下圖所示。

2. 數(shù)據(jù)處理接口統(tǒng)一,如下圖所示。

3. 運行方式舉例,如下圖所示。

詳情參考:https://www.mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore.dataset.vision.html 


6       支持邊訓(xùn)練邊推理和早停功能

6.1  提供model.fit高階API

之前的訓(xùn)練及推理分別通過model.train和model.eval兩個接口執(zhí)行,如果在訓(xùn)練過程中需要查看驗證集的評估指標(biāo)來監(jiān)控模型效果,需手動實現(xiàn);而昇思MindSpore1.8提供model.fit高階API,對model.train及model.eval進(jìn)行了封裝,保證原有功能的情況下簡化了開發(fā)流程,開發(fā)者只需傳入對應(yīng)的參數(shù),即可一行代碼實現(xiàn)自動化訓(xùn)練及推理。

詳情參考:https://mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore/mindspore.Model.html#mindspore.Model.fit 

6.2  實現(xiàn)EarlyStopping和ReduceLROnPlateau功能

為及時掌握訓(xùn)練過程中模型的狀態(tài)、實時觀察模型各參數(shù)的變化情況和實現(xiàn)訓(xùn)練過程中自定義的一些操作,昇思提供了回調(diào)機制(Callback)來實現(xiàn)上述功能,對標(biāo)業(yè)界框架,昇思MindSpore1.8版本新增EarlyStopping及ReduceLROnPlateau兩個Callback,可用于model.train和model.fit中,實現(xiàn)指定指標(biāo)的Epoch級別的驗證:當(dāng)指標(biāo)值變差,超過可容忍閾值或等待時間超過可容忍Epoch數(shù)時,EarlyStopping將終止訓(xùn)練過程實現(xiàn)早停,而ReduceLROnPlateau將按照開發(fā)者指定的學(xué)習(xí)率衰減規(guī)則,改變學(xué)習(xí)率。

詳情參考: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  支持網(wǎng)絡(luò)的常量輸入可變,提升編譯效率

當(dāng)前圖編譯機制是除Tensor外所有頂層網(wǎng)絡(luò)的輸入都被當(dāng)做常量值,如標(biāo)量、tuple、list和dict。而常量值是不能求導(dǎo)的,而且在編譯優(yōu)化階段會被常量折疊掉。

另外,當(dāng)網(wǎng)絡(luò)的輸入是tuple[Tensor],list[Tensor]或dict[Tensor]時,即使里面Tensor的shape和dtype沒有發(fā)生變化,在多次調(diào)用同一個網(wǎng)絡(luò)去得到結(jié)果時,由于輸入都被當(dāng)做常量值去處理了,無法忽略掉里面Tensor的具體數(shù)值,所以導(dǎo)致網(wǎng)絡(luò)每次都會被重新編譯,降低訓(xùn)練效率。

為解決以上的問題,昇思MindSpore1.8版本新增了mutable接口去設(shè)置網(wǎng)絡(luò)的常量輸入為“可變的”,也就是把這個輸入當(dāng)做像Tensor一樣的變量,從而可以對其求梯度以及防止網(wǎng)絡(luò)被重復(fù)編譯。接口用法也比較簡單,在傳參時對網(wǎng)絡(luò)輸入用mutable接口進(jìn)行包裹即可,如下圖所示。

圖 用例對tuple[Tensor]類型的輸入進(jìn)行包裹

詳情參考:https://www.mindspore.cn/docs/zh-CN/r1.8/api_python/mindspore/mindspore.mutable.html#mindspore.mutable 


8  MindSpore Reinforcement,提供高性能分布式訓(xùn)練和原生蒙特卡洛樹搜索算法

8.1  通過Dataflow Fragment實現(xiàn)靈活,高性能的分布式訓(xùn)練

當(dāng)前分布式強化學(xué)習(xí)框架主要以Python函數(shù)的方式實現(xiàn)強化學(xué)習(xí)算法,雖然具有直觀的編程API,但在多機并行和異構(gòu)加速上卻很有挑戰(zhàn)。

MindSpore Reinforcement v0.5.0提供基于Dataflow Fragment的分布式策略(DP),支持將深度強化學(xué)習(xí)算法分割成多個數(shù)據(jù)流片段,并映射到異構(gòu)設(shè)備上執(zhí)行。相同的算法可以根據(jù)不同的分布式策略而部署到單機多卡或多機多卡上。下圖中展示了基于Dataflow Fragment的分布式策略,以及對應(yīng)的訓(xùn)練加速效果,在多機多卡分布式訓(xùn)練場景下可大幅縮短算法的訓(xùn)練時間。

圖 分布式策略示意圖(左:分布式策略1; 右:分布式策略2)

圖 不同分布式策略下的訓(xùn)練時間

詳情參考:https://gitee.com/mindspore/reinforcement/tree/master/example/ppo 

8.2  蒙特卡洛樹搜索(MCTS)

蒙特卡洛樹搜索(MCTS)是一種決策搜索算法,以MCTS為基礎(chǔ)的強化學(xué)習(xí)算法(如AlphaGo)獲得成功之后,MCTS在強化學(xué)習(xí)算法中的應(yīng)用越來越廣泛。

圖 MSTC算法偽代碼

MindSpore Reinforcement v0.5.0提供了通用可擴展的MCTS算法。 開發(fā)者可以使用Python在強化學(xué)習(xí)算法中直接調(diào)用框架內(nèi)置的MCTS算法,也可以通過擴展來完成自定義邏輯,框架自動將算法編譯成計算圖,實現(xiàn)高效執(zhí)行。

詳情參考:https://gitee.com/mindspore/reinforcement/tree/master/example/mcts 


9  參考文獻(xiàn)

[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.


(免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。
任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。 )

贊助商
2022-08-15
昇思MindSpore 1.8:豐富的算法集與套件,實現(xiàn)高性能訓(xùn)練,降低部署門檻
經(jīng)過社區(qū)開發(fā)者們兩個月來的不斷努力,昇思MindSpore1.8版本現(xiàn)已發(fā)布。在此版本中,發(fā)布的MindSpore Golden Stick,提供了豐富的模型壓縮算法;開源大模型訓(xùn)練套件MindSpore Transformer、推薦網(wǎng)絡(luò)訓(xùn)練套件MindSpore Recommender,幫助開發(fā)者實現(xiàn)高性能的模型并行訓(xùn)練和推薦網(wǎng)絡(luò)...

長按掃碼 閱讀全文