訂閱
糾錯(cuò)
加入自媒體

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

2022-08-16 11:29
來源: 粵訊

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

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

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

MindSpore Golden Stick架構(gòu)圖

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.2 性能對(duì)比

昇思研發(fā)團(tuán)隊(duì)分別在8p、16p和32p A100集群上測(cè)試了百億規(guī)模GPT(hiddensize=5120, num_layers=35, num_h(yuǎn)eads=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。

圖 吞吐率對(duì)比

如上圖所示,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%。

3 高性能的推薦網(wǎng)絡(luò)訓(xùn)練套件MindSpore Recommender

推薦系統(tǒng)中部署了多種點(diǎn)擊率(CTR)模型,為提高推薦點(diǎn)擊率,需要對(duì)深度CTR模型進(jìn)行高效的訓(xùn)練,推薦網(wǎng)絡(luò)的訓(xùn)練性能是模型實(shí)時(shí)性的重要因素之一。昇思MindSpore 1.8版本提供了推薦網(wǎng)絡(luò)大模型訓(xùn)練套件—MindSpore Recommender,結(jié)合昇思MindSpore自動(dòng)并行、圖算融合以及分布式Embedding Cache等基礎(chǔ)能力,實(shí)現(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.自動(dòng)并行:通過模型并行實(shí)現(xiàn)Sparse計(jì)算(Embedding)多卡自動(dòng)切分,數(shù)據(jù)并行實(shí)現(xiàn)Dense計(jì)算與集合通信并發(fā)執(zhí)行,有效提升網(wǎng)絡(luò)的整體訓(xùn)練性能。

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

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

3.2 性能對(duì)比

基于GPU V100集群Wide&Deep模型訓(xùn)練(batch_size=16000, vocab_size=5860000)

,如下圖所示,單機(jī)八卡上昇思MindSpore的吞吐率優(yōu)于HugeCTR 35%。

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

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

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

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

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

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

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

Julia是一種速度快且使用簡(jiǎn)單的高級(jí)通用編程語(yǔ)言,最初設(shè)計(jì)是用于科學(xué)計(jì)算領(lǐng)域,而由于其高效而實(shí)用的特性,近些年來越來越受到青睞,逐步邁向主流編程語(yǔ)言。昇思MindSpore 1.8版本在算子開發(fā)接口Custom提供Julia模式,把基于Julia語(yǔ)言開發(fā)的算子和基于昇思開發(fā)的模型有機(jī)地結(jié)合在一起。開發(fā)者可以采用Julia算子加速運(yùn)算,也可以使用Julia生態(tài)高效地開發(fā)算子。如此,開發(fā)者在模型移植、快速驗(yàn)證以及模型加速等場(chǎng)景下使能Julia算子,在基于昇思MindSpore開發(fā)的模型中享受Julia語(yǔ)言對(duì)計(jì)算帶來的收益。

5 MindSpore Data統(tǒng)一圖像處理類接口,提升接口API易用性

昇思MindSpore1.8版本中,MindSpore Data模塊對(duì)于圖像類數(shù)據(jù)預(yù)處理操作進(jìn)行重新設(shè)計(jì)及改造,從原有的c_transforms和py_transforms兩種類型操作合并為transforms統(tǒng)一接口,同時(shí)對(duì)其中包含的各類數(shù)據(jù)處理算子進(jìn)行歸一合并,減少開發(fā)者混用算子的轉(zhuǎn)換操作,并基于算子上下文實(shí)現(xiàn)自動(dòng)的算子輸出格式轉(zhuǎn)換,極簡(jiǎn)易用,同時(shí)對(duì)資深開發(fā)者仍然保留了手動(dòng)選擇算子策略的能力。

5.1 實(shí)現(xiàn)方式

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

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

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

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

      3.運(yùn)行方式舉例,如下圖所示。

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

6.1 提供model.fit高階API

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

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

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

7 支持網(wǎng)絡(luò)的常量輸入可變,提升編譯效率

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

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

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

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

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

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

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

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

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

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

8.2 蒙特卡洛樹搜索(MCTS)

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

圖 MSTC算法偽代碼

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

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.

聲明: 本文系OFweek根據(jù)授權(quán)轉(zhuǎn)載自其它媒體或授權(quán)刊載,目的在于信息傳遞,并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),如有新聞稿件和圖片作品的內(nèi)容、版權(quán)以及其它問題的,請(qǐng)聯(lián)系我們。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號(hào)
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)