MindSpore兩日訓練營第六期總結
MindSpore兩日訓練營第六期內容
MindSpore第六期主要有以下內容組成
MindSpore AI科學計算
MOE異構并行
MindSpore Boost
可視化集群調優
MindSpore控制流
MindSpore Lite 1.5
六個內容都是圍繞MindSpore最新的1.5版本的新特性進行介紹,也是通過課程了解新功能的一個不錯的方法。在每個課程的最后都有兩個作業,一個簡單的和一個稍難一點的。
課程回放可以在MindSpore官方B站找到
地址:https://space.bilibili.com/526894060
課程作業環境
采用華為云ECS,新加坡區的GPU加速服務器進行實驗。因為課程內容需要涉及到GPU,MindSpore目前還不支持windows平臺的GPU,所以就只能使用ECS來完成實驗體驗了。另外考慮到有時候會使用GITHUB下載軟件包,所以就想到了采用香港區或者新加坡區的ECS,這樣下載GITHUB的時候速度就不是問題了。
整體環境如下截圖:
實驗過程中遇到的一些問題
MindSpore AI科學計算
安裝的話參考文檔中的安裝指南基本都能正常安裝。
MindScience文檔地址:https://www.mindspore.cn/mindscience/docs/zh-CN/r0.1/index.html
MindScience(MindElec and MindSPONGE) 的安裝文件可以在https://mindspore.cn/versions 這個頁面中部的位置找到whl包的-
數據驅動代碼:https://gitee.com/mindspore/mindscience/tree/master/MindElec/examples/data_driven/parameterization
數據驅動只要執行運行命令的時候加上兩個參數:
python train.py --device_target GPU --device_num 0
然后就會開啟訓練,難度還是不難的,訓練完成后會生產ckpt文件和圖文件
物理驅動的代碼地址:https://gitee.com/mindspore/mindscience/tree/master/MindElec/examples/physics_driven/time_domain_maxwell
在GPU上可能會遇到一些問題,提示算子不支持之類的,需要將config.yaml文件中 coord_min和coord_max從原來的整數修改成浮點數。然后再去執行train.py應該就沒什么問題了。
"coord_min" : [0.0, 0.0], "coord_max" : [1.0, 1.0],
第一課的兩個作業總體來說不是很難,按照文檔基本都能完成。
MindSpore 控制流
課程作業是使用while和遞歸函數實現0-1000的累加,這個的話,參考文檔:https://www.mindspore.cn/docs/programming_guide/zh-CN/r1.5/control_flow.html
把代碼邏輯加入到mindespore控制流的代碼框架即可
參考代碼(不一定對):
0-1000累加迭代:
import numpy as np from mindspore import context from mindspore import Tensor, nn from mindspore import dtype as ms class IfInForNet(nn.Cell): def construct(self, x): if x == 1: return x else: return x + construct(x-1) forward_net = IfInForNet() x = Tensor(np.array(1000), dtype=ms.int32) output = forward_net(x) print("result:",output)
0-1000累加(while循環實現):
import numpy as np from mindspore import context from mindspore import Tensor, nn from mindspore import dtype as ms class IfInWhileNet(nn.Cell): def construct(self, x,y,out): while x!=1000: x = x + y out = out +x return out forward_net = IfInWhileNet() x = Tensor(np.array(0), dtype=ms.int32) y = Tensor(np.array(1),dtype=ms.int32) out = Tensor(np.array(0),dtype=ms.int32) output = forward_net(x,y,out) print("result:",output)
MindSpore Lite
MindSpore Lite目前我只做了第二個作業,基本上也是跟著課程PPT就能完成操作了
準備工作
下載模型。在mindspore 的model_zoo中下載MobileNetV2.mindir模型。地址如下: https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/1.5/mobilenetv2.mindir
下載CPU的Ubuntu-x64版本包,用來模型轉換。-如下: https://www.mindspore.cn/lite/docs/zh-CN/r1.5/use/downloads.html
作業
使用Ubuntu-x64版本包內的轉換工具,使用固定比特量化以及混合比特量化的配置文件,分析不同量化參數下對模型大小的影響:
https://www.mindspore.cn/lite/docs/zh-CN/r1.5/use/post_training_quantization.html
固定比特權重量化:
./converter_lite --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2 --fmk=MINDIR --configFile=/mindspore/lite/tools/converter/quantizer/config/fixed_bit_weight_quant.cfg
混合比特權重量化:
./converter_lite --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2 --fmk=MINDIR --configFile=/mindspore/lite/tools/converter/quantizer/config/mixed_bit_weight_quant.cfg
將轉換后的模型使用Ubuntu-x64版本包內的benchmark工具進行推理
https://www.mindspore.cn/lite/docs/zh-CN/r1.5/use/benchmark_tool.html
整個作業有兩個提示:可以把下載下來的tools中converter_lite執行文件和benchmark的w執行文件路徑添加到PATH環境變量中這樣就可以直接執行converter_lite 或者benchmark。
另外就是需要把converter的lib目錄添加到LD_LIBRARY_PATH環境變量中,不然可能存在找不到so文件的報錯。
MindSpore并行使能大模型訓練
MOE這一塊的話可能稍微肥一點時間,主要還是編譯MindSpore比較耗時,這里如果使用新加坡或者香港的服務器的話可能會稍微輕松一點。
國內的服務器的話可能需要把文件一個一個wget下來然后拷貝到對應的目錄,然后再不斷重啟訓練。還有一個辦法就是查找hosts然后進行修改加速github的訪問。
總體流程
利用命令編譯:./build.sh -t on;通過pytest運行測試用例test_parallel_moe.py::test_transformer_model (路徑:mindspore/tests/ut/python/parallel/test_parallel_moe.py);
提示需要把 mindspore/tests/ut/python配置到環境變量PYTHONPATH里
需要生成圖ir文件,需要在test_parallel_moe.py代碼中添加
from mindspore import context context.set_context(save_graphs=True)
然后執行成功后會有一個rank_0的文件夾,在這里面就有需要的ir文件(xx_validate_.ir )
5.MindSpore Boost
Boost的作業可能resnet50cifar10對于GPU算子還有不支持的情況所以可能會遇到報錯。
修改思路:
model = Model(net,loss_fn=loss_fn,optimizer=opt,loss_scale_manager=loss_scale,amp_level="O3" ,boost_level="O1")
在Model中添加boost_level="",制定boost_level級別。可以是O1,O2
6.MindInsight可視化集群調優
操作步驟:
步驟:
conda create -n myenv python=3.7 conda activate myenv pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.5.0/MindInsight/any/mindinsight-1.5.0-py3-none-any.whl mkdir homework mv /path/to/211105prof.tar.gz homework/ cd homework tar -zxvf 211105prof.tar.gz mindinsight start
在瀏覽器中打開 http://127.0.0.1:8080,這里可能需要使用linux的瀏覽器打開。如果是使用ECS的話,建議安裝一個瀏覽器在遠程服務器里,然后使用對應的例如firefox之類的命令遠程啟動瀏覽器。
還有一個辦法就是修改mindinsight/conf/constants.py文件中
HOST = '127.0.0.1'
這一行的IP地址修改為0.0.0.0,然后就可以使用本地計算機的windows瀏覽器進行訪問了。
總結
通過兩天六個課程的學習,對于MindSpore的新特性有了理論上的了解,隨后通過課程結束的兩個作業對于新特性的實際操作也進行了一個了解。實現了通過實踐操作了解特性。課程作業的難度其實有簡單,但是基本上每個作業的第一題都可以參考對應的文檔就可以很順利的完成了。至于難一點的那題稍微思考一下其實應該也沒什么大問題。
MindSpore 機器學習
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。