幾個實踐帶你兩天快速上手MindSpore(上)

      網(wǎng)友投稿 1042 2025-03-31

      MindSpore介紹

      MindSpore是一種適用于端邊云場景的新型開源深度學(xué)習(xí)訓(xùn)練/推理框架。 MindSpore提供了友好的設(shè)計和高效的執(zhí)行,旨在提升數(shù)據(jù)科學(xué)家和算法工程師的開發(fā)體驗,并為Ascend AI處理器提供原生支持,以及軟硬件協(xié)同優(yōu)化。

      同時,MindSpore作為全球AI開源社區(qū),致力于進一步開發(fā)和豐富AI軟硬件應(yīng)用生態(tài)。

      接下來我將帶大家通過幾個小實踐快速上手MindSpore:

      1.MindSpore端邊云統(tǒng)一格式— — MindIR

      2.華為智慧終端背后的黑科技— —超輕量AI引擎MindSpore Lite

      一、MindSpore端邊云統(tǒng)一格式

      — — MindIR

      MindIR ? 全稱MindSpore IR,是MindSpore的一種基于圖表示的函數(shù)式IR,定義了可擴展的圖 結(jié)構(gòu)以及算子的IR表示。它消除了不同后端的模型差異,一般用于跨硬件平臺執(zhí)行推理任務(wù)。

      (1)MindSpore通過統(tǒng)一IR定義了網(wǎng)絡(luò)的邏輯結(jié)構(gòu)和算子的屬性,將MindIR格式的模型文件 與硬件平臺解耦,實現(xiàn)一次訓(xùn)練多次部署。

      (2)MindIR作為MindSpore的統(tǒng)一模型文件,同時存儲了網(wǎng)絡(luò)結(jié)構(gòu)和權(quán)重參數(shù)值。同時支持 部署到云端Serving和端側(cè)Lite平臺執(zhí)行推理任務(wù)。

      (3)同一個MindIR文件支持多種硬件形態(tài)的部署:

      - Serving部署推理

      - 端側(cè)Lite推理部署

      1-1導(dǎo)出LeNet網(wǎng)絡(luò)的MindIR格式模型

      于是我參照著大佬的簡單的寫了一個py解決了這題

      1.定義網(wǎng)絡(luò)

      LeNet網(wǎng)絡(luò)不包括輸入層的情況下,共有7層:2個卷積層、2個下采樣層(池化層)、3個全連接層。每層都包含不同數(shù)量的訓(xùn)練參數(shù),如下圖所示:

      我們對全連接層以及卷積層采用Normal進行參數(shù)初始化。

      MindSpore支持TruncatedNormal、Normal、Uniform等多種參數(shù)初始化方法,默認采用Normal。具體可以參考MindSpore API的mindspore.common.initializer模塊說明。

      使用MindSpore定義神經(jīng)網(wǎng)絡(luò)需要繼承mindspore.nn.Cell。Cell是所有神經(jīng)網(wǎng)絡(luò)(Conv2d等)的基類。

      神經(jīng)網(wǎng)絡(luò)的各層需要預(yù)先在__init__方法中定義,然后通過定義construct方法來完成神經(jīng)網(wǎng)絡(luò)的前向構(gòu)造。按照LeNet的網(wǎng)絡(luò)結(jié)構(gòu),定義網(wǎng)絡(luò)各層如下:

      import mindspore.nn as nn from mindspore.common.initializer import Normal class LeNet5(nn.Cell): """ Lenet network structure """ #define the operator required def __init__(self, num_class=10, num_channel=1): super(LeNet5, self).__init__() self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid') self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid') self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02)) self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02)) self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02)) self.relu = nn.ReLU() self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2) self.flatten = nn.Flatten() #use the preceding operators to construct networks def construct(self, x): x = self.max_pool2d(self.relu(self.conv1(x))) x = self.max_pool2d(self.relu(self.conv2(x))) x = self.flatten(x) x = self.relu(self.fc1(x)) x = self.relu(self.fc2(x)) x = self.fc3(x) return x

      MindSpore官網(wǎng)為我們提供了LeNet的Checkpoint文件,提供了不同版本的:https://download.mindspore.cn/model_zoo/official/cv/lenet/

      *Checkpoint ? 采用了Protocol Buffers格式,存儲了網(wǎng)絡(luò)中所有的參數(shù)值。一般用于訓(xùn)練任務(wù)中斷后恢復(fù)訓(xùn)練,或訓(xùn)練后的微調(diào)(Fine Tune)任務(wù)。在這里我選擇了CPU,因為題目說可以不用訓(xùn)練,所以定義完網(wǎng)絡(luò)我就直接使用了

      2.模型轉(zhuǎn)換

      import time import mindspore.nn as nn from datetime import datetime from mindspore.common.initializer import Normal lenet = LeNet5() # 返回模型的參數(shù)字典 param_dict = load_checkpoint("./lenet.ckpt") # 加載參數(shù)到網(wǎng)絡(luò) load_param_into_net(lenet, param_dict) input = np.random.uniform(0.0, 1.0, size=[32, 1, 32, 32]).astype(np.float32) # 以指定的名稱和格式導(dǎo)出文件 export(lenet, Tensor(input), file_name='lenet.mindir', file_format='MINDIR',) t = datetime.now().strftime('%Y-%m-%d %H:%M:%S') print(" ") print("============== Model conversion succeeded ==============") print(t)

      1-2訓(xùn)練一個ResNet50網(wǎng)絡(luò)。使用訓(xùn)練好的checkpoint文件,導(dǎo)出MindIR格式模型

      訓(xùn)練ResNet50網(wǎng)絡(luò)生成checkpoint

      參照著官網(wǎng)的教程使用MindSpore訓(xùn)練了一個ResNet50網(wǎng)絡(luò)圖像分類模型,官網(wǎng)的教程里那個文檔適用于CPU、GPU和Ascend AI處理器環(huán)境。使用ResNet-50網(wǎng)絡(luò)實現(xiàn)圖像分類:https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/cv_resnet50.html

      (1)數(shù)據(jù)集的準(zhǔn)備,這里使用的是CIFAR-10數(shù)據(jù)集。

      (2)構(gòu)建一個卷積神經(jīng)網(wǎng)絡(luò),這里使用ResNet-50網(wǎng)絡(luò)。

      這里擔(dān)心自己電腦跑不起來,使用了ModelArts平臺提供的Notebook來跑 8vCPU+64G+1 x Tesla V100-PCIE-32G,不得不說性能很強這里對訓(xùn)練好的ResNet50網(wǎng)絡(luò)導(dǎo)出為MindIR 格式

      import numpy as np from resnet import resnet50 from mindspore.train.serialization import export, load_checkpoint, load_param_into_net from mindspore import Tensor resnet = resnet50(batch_size=32, num_classes=10) # return a parameter dict for model param_dict = load_checkpoint("./models/ckpt/mindspore_vision_application/train_resnet_cifar10-10_1562.ckpt") # load the parameter into net load_param_into_net(resnet, param_dict) input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32) export(resnet, Tensor(input), file_name='resnet_Jack20.mindir', file_format='MINDIR')

      為了保存數(shù)據(jù),我把它下載了下來,結(jié)果發(fā)現(xiàn)原訓(xùn)練好的Checkpoint文件文件過大超過了100MB不能直接下載,于是找到了另一種解決方法:

      在Notebook中,新建一個“ipynb”文件,使用MoXing先將大文件從Notebook上傳到OBS中,然后我再從我OBS桶了下載不就完了嘛

      import moxing as mox mox.file.copy('./train_resnet_cifar10-10_1562.ckpt', 'obs://bucket_name/train_resnet_cifar10-10_1562.ckpt')

      注:其中"./train_resnet_cifar10-10_1562.ckpt”為文件在Notebook中的存儲路徑,"train_resnet_cifar10-10_1562.ckpt”為該文件上傳到OBS的存儲路徑。

      二、華為智慧終端背后的黑科技

      — —超輕量AI引擎MindSpore Lite

      MindSpore Lite 1.1 在端側(cè)模型訓(xùn)練、算子性能優(yōu)化、模型小型化、加速庫自動裁剪工具、語音類模型支持、Java接口開放、模型可視化等方面進行了全面升級,升級后的版本更輕、更快、更易用

      大家可以到官網(wǎng)下載對應(yīng)的MindSpore Lite:?https://www.mindspore.cn/tutorial/lite/zh-CN/r1.1/use/downloads.html

      一、設(shè)計目標(biāo)

      1.端云一體化

      端云IR統(tǒng)一,云側(cè)訓(xùn)練模型可直接支持端側(cè)重訓(xùn)云側(cè)混合精度訓(xùn)練與端側(cè)推理協(xié)同提升推理性能

      2.極致性能/輕量化

      通過NPU/CPU/GPU異構(gòu)并行最大化發(fā)揮硬件算力,高效內(nèi)核算法+匯編指令優(yōu)化縮短推理時延不依賴任何第三方庫,底層算子庫使用C語言+匯編開發(fā)。

      3.快捷部署

      支持第三方模型TensorFlow Lite、Caffe、ONNX離線轉(zhuǎn)換,使用戶可快速切換后端;提供量化工具、圖片數(shù)據(jù)處理等功能方便用戶的部署和使用;

      4.全場景覆蓋

      覆蓋手機、IoT等各種智能設(shè)備;支持ARM CPU、GPU、NPU等多種硬件平臺、支持Android/iOS操作系統(tǒng);支持端側(cè)推理及訓(xùn)練;

      二、關(guān)鍵特性

      1.性能優(yōu)化

      (1)算子融合:支持多達20+常見的融合,減少內(nèi)存讀寫和計算量

      (2)算子替換:支持常見的算子替換,通過參數(shù)值替換減少計算量

      (3)算子前移:移動slice相關(guān)算動到計算圖前,減少冗余計算

      2.算子優(yōu)化

      對于CPU硬件,影響算子指令執(zhí)行速度的關(guān)鍵因素包括了L1/L2緩存的命中率以及指令的流水布,MindSpore端側(cè)CPU算子優(yōu)化手段包括:

      (1)數(shù)據(jù)的合理排布:MindSpore CPU算子采用NHWC的數(shù)據(jù)排布格式,相比NC4HW,channel方向不需要補齊至4,更省內(nèi)存;相比NCHW,卷積單元的點更加緊湊,對緩存更友好;此外,算子間也不再涉及l(fā)ayout轉(zhuǎn)換。

      (2)寄存器的合理分配:將寄存器按照用途,劃分為feature map寄存器、權(quán)重寄存器和輸出寄存器,寄存器的合理分配可以減少數(shù)據(jù)加載的次數(shù)。

      (3)數(shù)據(jù)的預(yù)存取,通過prefetch/preload等指令,可以提前將數(shù)據(jù)讀到cache中。

      (4)指令重排,盡量減少指令的pipeline stall。

      (5)向量化計算,使用SIMD指令,如ARM NEON指令,X86 SSE/AVX指令等

      3.訓(xùn)練后量化

      豐富的量化策略,精度接近無損

      MindSpore Lite訓(xùn)練后量化工具提供權(quán)重量化和全量化兩種方法,支持1~16bit量化,支持分類,檢測,NLP等多種模型

      4.Micro for IoT

      移動終端上的推理框架,通過模型解釋的方式來進行推理,這樣的方式可以支持多個模型以及跨硬件平臺,但是需要額外的運行時內(nèi)存(MCU中最昂貴的資源)來存儲元信息(例如模型結(jié)構(gòu)參數(shù))。MindSpore for Micro的CodeGen方式,將模型中的算子序列從運行時卸載到編譯時,并且僅生成將模型執(zhí)行的代碼。它不僅避免了運行時解釋的時間,而且還釋放了內(nèi)存使用量,以允許更大的模型運行。這樣生成的二進制大小很輕,因此具有很高的存儲效率。

      5.異構(gòu)自動并行

      6.端云統(tǒng)一

      MindSpore在框架的設(shè)計上進行了分層設(shè)計,將端云共用的數(shù)據(jù)結(jié)構(gòu)和模塊解耦出來,在滿足端側(cè)輕量化的同時,保持了端云架構(gòu)的一致性

      (1)統(tǒng)一IR:MindSpore core的統(tǒng)一lR,保證了端云模型/算子定義的一致性,使得云側(cè)訓(xùn)練的模型可以無縫的部署在端側(cè)。同時,對于端側(cè)訓(xùn)練,可以和云側(cè)使用一致的R進行模型的重訓(xùn)。

      幾個小實踐帶你兩天快速上手MindSpore(上)

      (2)公共pass:為了提升性能,訓(xùn)練好的模型在執(zhí)行推理前,需要提前做一些優(yōu)化手段,這些優(yōu)化包括了融合、常量折疊、數(shù)據(jù)排布的調(diào)整等等。對于端云共享的優(yōu)化,同樣也是包含在MindSporecore模塊中,只不過對于云側(cè)推理,這些優(yōu)化是在線推理時去執(zhí)行的,而對于移動終端這些優(yōu)化在執(zhí)行推理前離線完成。

      (3)統(tǒng)一接口:MindSpore設(shè)計了端云統(tǒng)一的C++接口。統(tǒng)一的C++接口的用法盡量與Python接口保持了一致,降低了學(xué)習(xí)成本。通過統(tǒng)一接口,用戶可以使用一套代碼在不同的硬件上進行推理。

      7.端側(cè)訓(xùn)練

      (1)支持30+反向算子,提供SGD、ADAM等常見優(yōu)化器及CrossEntropy/SparsCrossEntropy/MSE等損失函數(shù);既可從零訓(xùn)練模型,也可指定特定網(wǎng)絡(luò)層微調(diào),達到遷移學(xué)習(xí)目的;

      (2)已支持LeNet/AlexNet/ResNet/MobileNetV1/V2/V3和EffectiveNet等網(wǎng)絡(luò)訓(xùn)練,提供完整的模型加載,轉(zhuǎn)換和訓(xùn)練腳本,方便用戶使用和調(diào)測;

      (3)MindSpore云側(cè)訓(xùn)練和端側(cè)訓(xùn)練實現(xiàn)無縫對接,云側(cè)模型可直接加載到端側(cè)進行訓(xùn)練;

      (4)支持checkpoint機制,訓(xùn)練過程異常中斷后可快速恢復(fù)繼續(xù)訓(xùn)練;

      實踐一下:

      2-1在 MindSpore model_zoo下載模型mobilenetv2.mindir(?https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite), 使用MindSpore lite converter 轉(zhuǎn)成.ms 模型,請保留所使用的模型轉(zhuǎn)換命令和模型轉(zhuǎn)換截圖

      1.按要求打開鏈接找到指定的模型文件下載下來備用

      2.把文件放到MindSpore?lite converter文件夾下

      因為我這里是直接把文件夾放到了桌面,在CMD中進到這個文件環(huán)境目錄里

      cd c: \Users\Administrator\Desktop\MindSporePetClassification\converter

      3.將.mindir模型轉(zhuǎn)換為.ms?模型

      call converter_lite --fmk=MINDIR --modelFile=c:\Users\Administrator\Desktop\MindSporePetClassification\converter\mobilenetv2.mindir --outputFile=Jack20

      注意:其中c:\Users\Administrator\Desktop\MindSporePetClassification\converter\mobilenetv2.mindir代表生成的mindir文件,而--outputFile定義轉(zhuǎn)換后MS文件的名稱。

      成功后,會在converter文件夾中生成對應(yīng)的.ms文件。

      明天我將繼續(xù)為大家?guī)恚?/p>

      1.一鍵部署在線推理服務(wù)— —MindSpore Serving

      2.AI數(shù)據(jù)高速加載直通車— —單節(jié)點數(shù)據(jù)緩存

      3.快速定位模型精度問題— —MindSpore調(diào)試器

      參考

      [1]www.mindspore.cn

      [2]gitee.com/mindspore

      [3]github.com/mindspore-ai

      MindSpore 機器學(xué)習(xí) 深度學(xué)習(xí)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:excel表格a3如何變成a4(excel表格怎么把a4變成a3)
      下一篇:word2010怎么凍結(jié)表頭(word怎么凍結(jié)表格表頭)
      相關(guān)文章
      亚洲AV噜噜一区二区三区| 亚洲国产成人综合| 亚洲国产无线乱码在线观看 | 久久久亚洲裙底偷窥综合| 亚洲AV无码成人网站久久精品大 | wwwxxx亚洲| 亚洲精品二三区伊人久久| 性xxxx黑人与亚洲| 国产亚洲玖玖玖在线观看| 午夜在线a亚洲v天堂网2019| 亚洲综合一区国产精品| 亚洲日本一线产区和二线产区对比| 亚洲最大的成人网| 亚洲精品伦理熟女国产一区二区| 亚洲国产精品日韩专区AV| 亚洲色成人四虎在线观看| 亚洲中文字幕AV每天更新| 亚洲熟妇无码AV| 亚洲av成人一区二区三区在线播放| 亚洲人成自拍网站在线观看| 亚洲AV性色在线观看| 成a人片亚洲日本久久| 亚洲国产精品一区二区九九| 亚洲伊人成无码综合网| 亚洲精品无码99在线观看| 美腿丝袜亚洲综合| 国产亚洲人成网站在线观看不卡| 亚洲AV无码专区电影在线观看| 亚洲国产香蕉碰碰人人| 亚洲视频免费在线看| 亚洲毛片基地4455ww| 亚洲AV日韩AV一区二区三曲| 国产成人 亚洲欧洲| 久久影院亚洲一区| 久久91亚洲精品中文字幕| 亚洲日韩乱码中文无码蜜桃臀| 中文字幕乱码亚洲精品一区| 亚洲Av永久无码精品黑人| 亚洲人妻av伦理| 久久精品亚洲中文字幕无码网站 | 亚洲中文字幕第一页在线|