华为昇思MindSpore详细教程

一、相关资料

MindSpore_white_paperV1.1.pdf

二、重要说明

  1. MindSpore的Ascend版本与ascend-toolkit以及driver版本存在绑定关系。昇腾平台上使用MindSpore依赖于CANN,即ascend-toolkit及driver等套件。
  2. MindSpore支持的后端包括Ascend、GPU、CPU。

三、相关概念

3.1 ME

Mind Expression,MindSpore前端,主要完成从用户源码到计算图的编译任务、训练中控制执行及上下文维护(非下沉模式配置下)、动态图(PyNative模式)等。

3.2 MindData

MindSpore数据框架,提供数据加载、增强、数据集管理以及可视化。

3.3 MindInsight

MindSpore可视化组件,可视化标量、图像、计算图以及模型超参等信息。

3.4 AIR

Ascend Intermediate Representation,类似ONNX,是华为定义的针对机器学习所设计的开放式的文件格式,能更好地适配Ascend AI处理器,一般用于Ascend 310上执行推理任务。

AIR格式仅MindSpore Ascend 910可导出,仅Ascend 310可推理,推理前需使用Ascend CANN中atc工具进行模型转换,推理时不依赖MindSpore,仅需Ascend CANN软件包。

Ascend 310是面向边缘场景的高能效高集成度AI处理器,支持对MindIR格式和AIR格式模型进行推理。

3.5 MindIR

MindIR全称MindSpore IR,一种基于图表示的函数式IR,定义了可扩展的图结构以及算子IR表示,存储了MindSpore基础数据结构。它消除了不同后端的模型差异,一般用于跨硬件平台执行推理任务。MindSpore通过统一IR定义了网络的逻辑结构和算子的属性,将MindIR格式的模型文件与硬件平台解耦,实现一次训练多次部署

MindIR格式可由MindSpore CPU、GPU、Ascend 910导出,可运行在GPU、Ascend 910、Ascend 310上,推理前不需要手动执行模型转换,推理时需要安装MindSpore,调用MindSpore C++ API进行推理。

特性

  1. MindIR作为MindSpore的统一模型文件,同时存储了网络结构和权重参数值。同时支持部署到云端Serving和端侧Lite平台执行推理任务。

  2. 同一个MindIR文件支持多种硬件形态的部署:

    • 云端Serving部署推理:MindSpore训练生成MindIR模型文件后,可直接发给MindSpore Serving加载,执行推理任务,而无需额外的模型转化,做到Ascend、GPU、CPU等多硬件的模型统一。
    • 端侧Lite推理部署:MindIR可直接供Lite部署使用。同时由于端侧轻量化需求,提供了模型小型化和转换功能,支持将原始MindIR模型文件由Protocol Buffers格式转化为FlatBuffers格式存储,以及网络结构轻量化,以更好的满足端侧性能、内存等要求。

使用场景

先使用网络定义和Checkpoint文件导出MindIR模型文件,再根据不同需求执行推理任务。

3.6 MindRecord

MindSpore定义的一种数据格式,是一个执行读取、写入、搜索和转换MindSpore格式数据集的模块。

3.7 MindSpore Lite

一个轻量级的深度神经网络推理引擎,提供了将MindSpore训练出的模型在端侧进行推理的功能。

3.8 MindSpore运行模式

小孢子的神奇之旅-如何阅读MindSpore报错信息(3)

MindSpore同时支持静态图与动态图模式,被分别叫做Graph模式和PyNative模式,在调试或者运行方面做了不同的优化。

Graph模式(静态图模式)

Graph模式也称静态图模式或者图模式,将神经网络模型编译成一整张图,然后下发执行,性能高。。静态图模式,先进行将网络 编译 成图,然后按照图结构完成 执行。该模式利用图优化等技术提高运行性能,同时有助于规模部署和跨平台运行。

Graph模式可以着眼全局,能在执行前进行深度优化这样而带来更好的执行性能,而为着眼全局的代价就是必须遵从一些规则要求(例如:静态图语法),且有较长的编译过程,这些代价也就带来的网络的编写与调试困难

# 切换为Graph模式
context.set_context(mode=context.GRAPH_MODE)

PyNative模式(动态图模式)

PyNative模式也称动态图模式,将神经网络中的各个算子逐一下发执行,方便用户编写和调试神经网络模型。动态图模式并不会先编译生成图结构,而是 按照代码顺序依次执行。PyNative模式,执行性能弱于Graph模式,但语法灵活更为 方便用户编写和调试网络。默认情况下,MindSpore处于PyNative模式。

# 切换为PyNative模式
context.set_context(mode=context.PYNATIVE_MODE)

PyNative模式下,支持执行单算子、普通函数和网络,以及单独求梯度的操作。

注意

  1. 由于Graph模式存在Python语法限制,当前仅支持转换到PyNative模式,训练性能较Graph模式有所降低。;
  2. PyNative模式下为了提升性能,算子在device上使用了异步执行方式,因此在算子执行错误的时候,错误信息可能会在程序执行到最后才显示

3.9 MindArmour

MindSpore安全模块,通过差分隐私、对抗性攻防等技术手段,提升模型的保密性、完整性和可用性,阻止攻击者对模型进行恶意修改或是破解模型的内部构件,窃取模型的参数。

四、MindStuio

4.1 安装方案(Windows)

MindStudio可以单独安装在Windows上。在安装MindStudio前需要在Linux服务器上安装部署好 Ascend-cann-toolkit开发套件包,之后在Windows上安装MindStudio,安装完成后通过配置远程连接的方式建立MindStudio所在的Windows服务器与Ascend-cann-toolkit开发套件包所在的Linux服务器的连接,实现全流程开发功能。

将MindStudio安装在Windows服务器上时,Windows服务器为本地环境,Linux服务器为远端环境

4.2 安装方案(Linux)

MindStudio和Ascend-cann-toolkit可以使用Linux服务器上原生桌面自带的终端gnome-terminal进行安装,也可以在Windows服务器上通过SSH登录到Linux服务器进行安装。因为MindStudio是一款GUI程序,所以在Windows服务器上通过SSH登录到Linux服务器进行安装时,需要使用集成了X server的SSH终端(比如MobaXterm,该工具版本需要为v20.2及以上)。

4.3 安装MindStudio

详细的安装教程,请参见官网 安装指南

4.4 MindStudio配置SSH

SSH连接管理

五、关键教程

5.1 MindSpore版本

在这里插入图片描述

5.2 MindSpore环境变量

5.3 安装MindSpore

pip方式安装MindSpore Ascend 910版本

使用pip方式快速安装MindSpore包括两种安装方式:手动安装自动安装

手动安装

如果系统是Ubuntu 18.04/CentOS 7.6/OpenEuler 20.03/KylinV10 SP1,或者已经安装了部分依赖,如Python,GCC等,则推荐 手动安装小节的安装步骤手动安装。

自动安装

如果在一个已经配置好昇腾AI处理器配套软件包的EulerOS 2.8上通过pip安装MindSpore,可以使用 自动安装脚本 进行一键式安装,参见 自动安装 小节。自动安装脚本会安装MindSpore及其所需的依赖。

使用以下命令获取自动安装脚本并执行。自动安装脚本仅支持安装MindSpore>=1.6.0。

wget https://gitee.com/mindspore/mindspore/raw/r1.7/scripts/install/euleros-ascend-pip.sh
# 安装MindSpore 1.7.0和Python 3.7
# 默认LOCAL_ASCEND路径为/usr/local/Ascend
MINDSPORE_VERSION=1.7.0 bash -i ./euleros-ascend-pip.sh
# 如需指定Python和MindSpore版本,以Python 3.9和MindSpore 1.6.0为例
# 且指定LOCAL_ASCEND路径为/home/xxx/Ascend,使用以下方式
# LOCAL_ASCEND=/home/xxx/Ascend PYTHON_VERSION=3.9 MINDSPORE_VERSION=1.6.0 bash -i ./euleros-ascend-pip.sh

脚本会执行以下操作:

  • 安装MindSpore所需的依赖,如GCC,gmp。
  • 通过APT安装Python3和pip3,并设为默认。
  • 通过pip安装MindSpore Ascend版本。
  • 如果OPENMPI设置为on,则安装Open MPI。

在脚本执行完成后,需要重新打开终端窗口以使环境变量生效。

自动安装脚本会为MindSpore创建名为mindspore_pyXX的虚拟环境。其中XX为Python版本,如Python 3.7则虚拟环境名为mindspore_py37。执行以下命令查看所有虚拟环境。

# 查看虚拟环境
conda env list

# 重新打开终端,激活虚拟环境
conda activate mindspore_py37

pip方式安装

获取安装命令
在这里插入图片描述

# 创建一个conda虚拟环境并且激活
conda create -n mindsp python=3.7.5 -y
conda activate mindsp

# 安装MindSpore
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.7.0/MindSpore/cpu/x86_64/mindspore-1.7.0-cp37-cp37m-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

5.4 验证是否安装成功

python -c "import mindspore;mindspore.run_check()"
(mindsp-py37) D:\360Downloads\vision>python -c "import mindspore;mindspore.run_check()"
MindSpore version:  1.7.0
The result of multiplication calculation is correct, MindSpore has been installed successfully!
[ma-user@notebook-87136e07-6a9a-4138-beec-742972f7b62f mindspore-lenet-demo]$ python3 -c "import mindspore;mindspore.run_check()"
[WARNING] ME(1564:281472980111376,MainProcess):2022-07-04-16:35:16.111.95 [mindspore/run_check/_check_version.py:267] Using custom Ascend 910 AI software package path, package version checking is skipped, please make sure Ascend 910 AI software package version is supported, you can reference to the installation guidelines https://www.mindspore.cn/install
[WARNING] ME(1564:281472980111376,MainProcess):2022-07-04-16:35:16.179.332 [mindspore/run_check/_check_version.py:368] Can not find driver so(need by mindspore-ascend), please check if you have set env LD_LIBRARY_PATH, you can reference to the installation guidelines https://www.mindspore.cn/install
MindSpore version: 1.5.0
The result of multiplication calculation is correct, MindSpore has been installed successfully!

5.5 升级MindSpore版本

注意:升级到rc版本时,需要手动指定{version}为rc版本号,例如1.6.0rc1;如果升级到正式版本,=={version}字段可以缺省。

pip install --upgrade mindspore-ascend=={
    
    version}

5.6 安装MindSpore Vision

安装 MindSpore Vision

源码安装

# 创建一个conda虚拟环境并且激活
conda create -n mindvision python=3.7.5 -y
conda activate mindvision

# git克隆MindSpore Vision仓库
git clone https://gitee.com/mindspore/vision.git
cd vision

# 源码安装
python setup.py install

# 验证是否安装成功
python ./examples/classification/lenet/lenet_mnist_infer.py --data_url ./tests/st/classification/dataset/mnist/mnist.jpg --pretrained True --device_target CPU

验证成功

[WARNING] ME(25912:24800,MainProcess):2022-06-22-09:11:35.362.873 [mindspore\dataset\core\config.py:646] For Windows and MacOS we forbid shared mem function temporarily.
494592B [00:00, 1997626.51B/s]
{
    
    4: 'four'}

pip安装

pip install mindvision

5.7 快速入门:手写数字识别

按照官网的教程: 快速入门:手写数字识别,遇到问题请参考 FAQ

Mindspore:r1.7

MindSpore Vision:0.1.0

5.8 模型训练

按照官网的教程:模型训练,遇到问题请参考 FAQ

5.9 在ModelArts notebook中训练

[ma-user@notebook-87136e07-6a9a-4138-beec-742972f7b62f mindspore-lenet-demo]$ python3 lenet_demo.py
[WARNING] ME(842:281473601032208,MainProcess):2022-07-04-16:27:03.476.263 [mindspore/run_check/_check_version.py:267] Using custom Ascend 910 AI software package path, package version checking is skipped, please make sure Ascend 910 AI software package version is supported, you can reference to the installation guidelines https://www.mindspore.cn/install
[WARNING] ME(842:281473601032208,MainProcess):2022-07-04-16:27:03.980.652 [mindspore/run_check/_check_version.py:368] Can not find driver so(need by mindspore-ascend), please check if you have set env LD_LIBRARY_PATH, you can reference to the installation guidelines https://www.mindspore.cn/install
[WARNING] ME(842:281473601032208,MainProcess):2022-07-04-16:27:11.532.279 [mindspore/dataset/core/config.py:464] The shared memory is on, multiprocessing performance will be improved. Note: the required shared memory can't exceeds 80% of the available shared memory. You can reduce max_rowsize or reduce num_parallel_workers to reduce shared memory usage.
[WARNING] ME(842:281473601032208,MainProcess):2022-07-04-16:27:16.404.060 [mindspore/dataset/core/config.py:464] The shared memory is on, multiprocessing performance will be improved. Note: the required shared memory can't exceeds 80% of the available shared memory. You can reduce max_rowsize or reduce num_parallel_workers to reduce shared memory usage.
[WARNING] SESSION(842,fffe827fc1e0,python3):2022-07-04-16:27:28.599.092 [mindspore/ccsrc/backend/session/ascend_session.cc:1806] SelectKernel] There are 9 node/nodes used reduce precision to selected the kernel!
Epoch:[  0/ 10], step:[ 1875/ 1875], loss:[0.138/0.138], time:27793.110 ms, lr:0.01000
Epoch time: 32266.532 ms, per step time: 17.209 ms, avg loss: 0.138
Epoch:[  1/ 10], step:[ 1875/ 1875], loss:[0.001/0.001], time:3550.877 ms, lr:0.01000
Epoch time: 3552.153 ms, per step time: 1.894 ms, avg loss: 0.001
Epoch:[  2/ 10], step:[ 1875/ 1875], loss:[0.017/0.017], time:3824.274 ms, lr:0.01000
Epoch time: 3825.681 ms, per step time: 2.040 ms, avg loss: 0.017
Epoch:[  3/ 10], step:[ 1875/ 1875], loss:[0.003/0.003], time:3692.203 ms, lr:0.01000
Epoch time: 3693.945 ms, per step time: 1.970 ms, avg loss: 0.003
Epoch:[  4/ 10], step:[ 1875/ 1875], loss:[0.025/0.025], time:3885.926 ms, lr:0.01000
Epoch time: 3887.030 ms, per step time: 2.073 ms, avg loss: 0.025
Epoch:[  5/ 10], step:[ 1875/ 1875], loss:[0.000/0.000], time:3726.956 ms, lr:0.01000
Epoch time: 3727.775 ms, per step time: 1.988 ms, avg loss: 0.000
Epoch:[  6/ 10], step:[ 1875/ 1875], loss:[0.042/0.042], time:3601.407 ms, lr:0.01000
Epoch time: 3602.245 ms, per step time: 1.921 ms, avg loss: 0.042
Epoch:[  7/ 10], step:[ 1875/ 1875], loss:[0.001/0.001], time:4478.034 ms, lr:0.01000
Epoch time: 4478.895 ms, per step time: 2.389 ms, avg loss: 0.001
Epoch:[  8/ 10], step:[ 1875/ 1875], loss:[0.006/0.006], time:4465.447 ms, lr:0.01000
Epoch time: 4466.262 ms, per step time: 2.382 ms, avg loss: 0.006
Epoch:[  9/ 10], step:[ 1875/ 1875], loss:[0.004/0.004], time:4313.395 ms, lr:0.01000
Epoch time: 4314.218 ms, per step time: 2.301 ms, avg loss: 0.004
[WARNING] SESSION(842,fffe827fc1e0,python3):2022-07-04-16:28:25.698.502 [mindspore/ccsrc/backend/session/ascend_session.cc:1806] SelectKernel] There are 4 node/nodes used reduce precision to selected the kernel!
{
    
    'accuracy': 0.9895833333333334}
[WARNING] ME(842:281473601032208,MainProcess):2022-07-04-16:28:33.318.388 [mindspore/dataset/core/config.py:464] The shared memory is on, multiprocessing performance will be improved. Note: the required shared memory can't exceeds 80% of the available shared memory. You can reduce max_rowsize or reduce num_parallel_workers to reduce shared memory usage.
[WARNING] SESSION(842,fffe827fc1e0,python3):2022-07-04-16:29:17.098.612 [mindspore/ccsrc/backend/session/ascend_session.cc:1806] SelectKernel] There are 4 node/nodes used reduce precision to selected the kernel!
Predicted: "[1 1 8 2 1 0]", Actual: "[1 1 8 2 1 0]"

5.10 MindSpore1.5详细教程

项目 链接
概述 https://www.mindspore.cn/mindspore?version=/r1.5/
编程指南 https://www.mindspore.cn/docs/programming_guide/zh-CN/r1.5/index.html
迁移指南 https://www.mindspore.cn/docs/migration_guide/zh-CN/r1.5/index.html
规格和说明 https://www.mindspore.cn/docs/note/zh-CN/r1.5/index.html
API https://www.mindspore.cn/docs/api/zh-CN/r1.5/index.html
FAQ https://www.mindspore.cn/docs/faq/zh-CN/r1.5/index.html
API映射 https://www.mindspore.cn/docs/migration_guide/zh-CN/r1.5/api_mapping.html
开发者分享精华 https://bbs.huaweicloud.com/forum/forumdisplay-fid-1076-orderby-lastpost-filter-typeid-typeid-1255sub.html

六、FAQ

Q:ImportError: cannot import name ‘Mnist’ from ‘mindvision.dataset’

Traceback (most recent call last):
  File "D:/MyDocuments/PyProjects/pydemo/lenet_demo.py", line 8, in <module>
    from mindvision.dataset import Mnist
ImportError: cannot import name 'Mnist' from 'mindvision.dataset' (D:\360Downloads\anaconda3\envs\mindsp-py37\lib\site-packages\mindvision-0.1.0-py3.7.egg\mindvision\dataset\__init__.py)
错误原因:
导包错误

from mindvision.dataset import Mnist
改为
from mindvision.classification.dataset import Mnist

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37605642/article/details/125691987
今日推荐