diff --git a/docs/mindspore/source_zh_cn/orange_pi/debug.md b/docs/mindspore/source_zh_cn/orange_pi/debug.md deleted file mode 100644 index 865838b6c775c358b4db6f37c0473b70ebb8918a..0000000000000000000000000000000000000000 --- a/docs/mindspore/source_zh_cn/orange_pi/debug.md +++ /dev/null @@ -1,3 +0,0 @@ -# 功能调试 - -[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/orange_pi/debug.md) \ No newline at end of file diff --git a/docs/mindspore/source_zh_cn/orange_pi/environment_setup.md b/docs/mindspore/source_zh_cn/orange_pi/environment_setup.md new file mode 100644 index 0000000000000000000000000000000000000000..356231b6edd95cbee63967df20c7bed5eb5577d2 --- /dev/null +++ b/docs/mindspore/source_zh_cn/orange_pi/environment_setup.md @@ -0,0 +1,282 @@ +# 环境搭建指南 + +[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/orange_pi/environment_setup.md) + +本章节将介绍如何在OrangePi AIpro上烧录镜像,自定义安装CANN和MindSpore,并配置运行环境。 + +## 1. 镜像烧录(以Windows系统为例) + +镜像烧录可以在任何操作系统内执行,这里将以在Windows系统为例 ,演示使用相应版本的balenaEtcher工具,快速烧录镜像至您的Micro SD卡。 + +### 1.1 制卡前准备 + +步骤1 将Micro SD卡插入读卡器,并将读卡器插入PC + +![environment-setup-1-1](./images/environment_setup_1-1.jpg) + +### 1.2 下载Ubuntu镜像 + +步骤1 点击[此链接](http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html)进入镜像下载页面 + +> 注意:此处演示为8-12T算力开发板镜像下载地址,20T算力开发板镜像下载请点击[此链接](http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro(20T).html),请注意区分两种不同算力开发板的镜像。 + +步骤2 点击图片中箭头图标跳转百度网盘下载页面 + +![environment-setup-1-2](./images/environment_setup_1-2.png) + +步骤3 选择桌面版本下载,建议下载0318版本环境 + +![environment-setup-1-3](./images/environment_setup_1-3.png) + +步骤4 备选下载方式 + +如果百度网盘下载过慢,可以使用[此链接](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/OrangePi/20240318/opiaipro_ubuntu22.04_desktop_aarch64_20240318.img.xz )直接下载 + +### 1.3 下载制卡工具 + +有两种制卡工具balenaEtcher、rufus,可根据自己电脑情况任选一种工具进行烧录。 + +- balenaEtcher制卡工具: + +步骤1 下载balenaEtcher + +点击[此链接](https://etcher.balena.io/)可跳转到软件官网,点击绿色的下载按钮会跳到软件下载的地方。 + +![environment-setup-1-4](./images/environment_setup_1-4.png) + +步骤2 选择下载 Portable版本 + +Portable版本无需安装,双击打开即可使用。 + +![environment-setup-1-5](./images/environment_setup_1-5.png) + +步骤3 备选下载方式 + +如果官方网站下载过慢,可以使用以[此链接](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/OrangePi/balenaEtcher/balenaEtcher-Setup-1.18.4.exe )直接下载balenaEtcher-Setup-1.18.4软件 + +步骤4 打开balenaEtcher + +![environment-setup-1-6](./images/environment_setup_1-6.png) + +![environment-setup-1-7](./images/environment_setup_1-7.png) + +- Rufus制卡工具: + +步骤1 Rufus下载 + +点击[此链接](https://etcher.balena.io/),进行下载、安装。 + +### 1.4 选择和烧录镜像 + +这里介绍balenaEtcher、rufus两种制卡工具烧录镜像,您可按对应工具进行烧录。 + +- balenaEtcher烧录镜像: + +步骤1 选择镜像、TF卡,启动烧录 + +1.选择要烧录的镜像文件(1.2下载Ubuntu镜像的保存路径) + +2.选择TF卡的盘符 + +3.点击开始烧录,如下图: + +![environment-setup-1-8](./images/environment_setup_1-8.png) + +烧录和验证大概需要20分钟左右,请耐心等待: + +![environment-setup-1-9](./images/environment_setup_1-9.png) + +![environment-setup-1-10](./images/environment_setup_1-10.png) + +步骤2 烧录完成 + +烧录完成后,balenaEtcher的显示界面如下图所示,如果显示绿色的指示图标说明镜像烧录成功,此时就可以退出balenaEtcher,拔出TF卡,插入到开发板的TF卡槽中使用: + +![environment-setup-1-11](./images/environment_setup_1-11.png) + +- Rufus烧录镜像: + +步骤1 选择镜像、TF卡,烧录镜像 + +sd卡插入读卡器,读卡器插入电脑、选择镜像与sd卡,点击“开始” + +![environment-setup-1-12](./images/environment_setup_1-12.png) + +步骤2 烧录完成 + +等待结束后直接拔出读卡器 + +![environment-setup-1-13](./images/environment_setup_1-13.png) + +## 2. CANN升级 + +### 2.1 Toolkit升级 + +步骤1 打开终端,切换root用户 + +使用`CTRL+ALT+T`快捷键或点击页面下方带有`$_`的图标打开终端 + +![environment-setup-1-14](./images/environment_setup_1-14.png) + +切换root用户,root用户密码:Mind@123 + +```bash + +# 打开开发板的一个终端,运行如下命令 + +(base) HwHiAiUser@orangepiaipro:~$ su – root + Password: +(base) root@orangepiaipro: ~# + +``` +步骤2 删除镜像中已安装CANN包释放磁盘空间,防止安装新的CANN包时报错磁盘空间不足 + +```bash + +(base) root@orangepiaipro: ~# cd /usr/local/Ascend/ascend-toolkit +(base) root@orangepiaipro: /usr/local/Ascend/ascend-toolkit # rm -rf * + +``` +步骤3 打开昇腾CANN官网访问社区版资源[下载地址](https://www.hiascend.com/developer/download/community/result?module=cann),下载所需版本的toolkit包,该处以8.0.RC2.alpha003版本为例,如下图: + +![environment-setup-1-14](./images/environment_setup_1-15.png) + +> 注意:执行如下命令,根据环境实际输出信息选择aarch64或是x86_64对应的软件包 +> + ```bash + uname -a + ``` +步骤4 进入Toolkit包下载目录 + + ```bash +(base) root@orangepiaipro: /usr/local/Ascend/ascend-toolkit# cd /home/HwHiAiUser/Downloads + ``` +>注意:Orange Pi AI Pro浏览器文件默认下载目录:/home/HwHiAiUser/Downloads,用户在更换保存路径时请同步修改上述命令中的路径 + +步骤5 给CANN包添加执行权限 + + ```bash +(base) root@orangepiaipro: /home/HwHiAiUser/Downloads# chmod +x ./Ascend-cann-toolkit_8.0.RC2.alpha003_linux-aarch64.run + ``` +步骤6 执行以下命令升级软件 + + ```bash +(base) root@orangepiaipro: /home/HwHiAiUser/Downloads#./Ascend-cann-toolkit_8.0.RC2.alpha003_linux-aarch64.run --install + ``` +![environment-setup-1-15](./images/environment_setup_1-16.png) + +安装时弹出此提示后输入Y,然后按回车键继续安装。 + +![environment-setup-1-16](./images/environment_setup_1-17.png) + +步骤7 配置并加载环境变量 + + ```bash + +(base) root@orangepiaipro: /home/HwHiAiUser/Downloads # echo “source /usr/local/Ascend/ascend-toolkit/set_env.sh” >> ~/.bashrc +(base) root@orangepiaipro: /home/HwHiAiUser/Downloads # source ~/.bashrc + + ``` +### 2.2 Kernels升级 + +>二进制算子包Kernels依赖CANN软件包Toolkit,执行升级时,当前环境需已安装配套版本的Toolkit,并使用同一用户安装。 + +步骤1 打开终端,并切root用户 + +root用户密码:Mind@123 + +```bash + +# 打开开发板的一个终端,运行如下命令 + +(base) HwHiAiUser@orangepiaipro:~$ su – root + Password: +(base) root@orangepiaipro: ~# + +``` +步骤2 执行如下命令,获取开发板NPU型号 + +```bash +npu-smi info +``` +步骤3 打开昇腾CANN官网访问社区版资源[下载地址](https://www.hiascend.com/developer/download/community/result?module=cann),下载与CANN包版本一致,并且匹配NPU型号的kernel包,如下图: + +![environment-setup-1-17](./images/environment_setup_1-18.png) + +步骤4 进入Kernels包下载目录 + +```bash +(base) root@orangepiaipro: /usr/local/Ascend/ascend-toolkit# cd /home/HwHiAiUser/Downloads +``` +>注意:Orange Pi AI Pro浏览器文件默认下载目录:/home/HwHiAiUser/Downloads + +步骤5 给kernels包添加执行权限 + +```bash +(base) root@orangepiaipro: /home/HwHiAiUser/Downloads# chmod +x ./Ascend-cann-kernels-310b_8.0.RC2.alpha003_linux.run +``` +步骤6 执行以下命令升级软件 + +```bash +(base) root@orangepiaipro: /home/HwHiAiUser/Downloads#./Ascend-cann-kernels-310b_8.0.RC2.alpha003_linux.run --install +``` +升级完成后,若显示如下信息,则说明软件升级成功: + +```bash +xxx install success +``` +* xxx表示升级的实际软件包名。 + +* 安装升级后的路径(以root用户默认安装升级路径为例):“/usr/local/Ascend/ ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/kernel”。 + +## 3. MindSpore升级 + +### 3.1 安装官网正式版(以MindSpore2.3.1为例) + +方法一:以HwHiAiUser用户打开终端,在终端直接运行pip install命令 + +```bash +pip install mindspore==2.3.1 +``` +方法二:参考[昇思MindSpore官网安装教程](https://www.mindspore.cn/install) 安装 + +```bash + +pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.3.1/MindSpore/unified/aarch64/mindspore-2.3.1-cp39-cp39-linux_aarch64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple + +# 注意确认操作系统和编程语言,香橙派开发板默认环境下是linux-aarch64和python3.9 + +``` + +### 3.2 安装MindSpore daily包(以9月11日daily包为例) + +香橙派开发板支持自定义安装MindSpore daily包,可从[此链接](https://repo.mindspore.cn/mindspore/mindspore/version/)获取到对应日期的软件包。 + +* 目标 daily whl包具体查找过程如下: + +1. 进入以master为前缀的目录。若是出现多个目录前缀是master时,推荐进入日期更靠后的目录 + +2. 进入unified目录 + +3. 根据实际操作系统信息,进入对应目录。由于香橙派开发板默认操作系统为linux-aarch64,所以进入aarch64目录 + +4. 根据实际python版本信息,找到对应daily whl包。由于香橙派开发板默认为python3.9,所以目标daily包为mindspore-2.4.0-cp39-cp39-linux_aarch64.whl + + +![environment-setup-1-19](./images/environment_setup_1-19.png) + + +> 注意:本教程旨在让开发者体验到最新的版本特定,但由于daily包并不是正式发布版本,在运行中可能回出现一些问题,开发者可通过[社区](https://gitee.com/mindspore/mindspore)提交issue,或可自行修改并提交PR。 + + +* 下载whl包进行安装,终端运行如下命令 + +```bash + +# wget下载whl包 +wget https://repo.mindspore.cn/mindspore/mindspore/version/202409/20240911/master_20240911160029_917adc670d5f93049d35d6c3ab4ac6aa2339a74b_newest/unified/aarch64/mindspore-2.4.0-cp39-cp39-linux_aarch64.whl + +# 在终端进入到whl包所在路径,再运行pip install命令进行安装 +pip install mindspore-2.4.0-cp39-cp39-linux_aarch64.whl + +``` diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-1.jpg b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d5efe8afe7dc6bfe20d212bba660f300d714ae9 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-1.jpg differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-10.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-10.png new file mode 100644 index 0000000000000000000000000000000000000000..2400d997ea1bb3e7379fa0a8882d87ad96f2ff20 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-10.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-11.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-11.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec317458b94885b0225aa6cd37bc4d6524e69d6 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-11.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-12.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-12.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a4c6df5b2919b18bded5fea90c3bc48bb4c88c Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-12.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-13.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-13.png new file mode 100644 index 0000000000000000000000000000000000000000..ff685822d079f631316f93a41cd1c68f490f4d11 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-13.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-14.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-14.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0528e23a8e51b3e4ffdd2d323a56ff37090ae3 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-14.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-15.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-15.png new file mode 100644 index 0000000000000000000000000000000000000000..56df76ca6d0dfa17ce239c2868674697c0c1db34 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-15.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-16.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-16.png new file mode 100644 index 0000000000000000000000000000000000000000..78d63841f7cf1155562f4de808835e865ca72ac9 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-16.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-17.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-17.png new file mode 100644 index 0000000000000000000000000000000000000000..65f979d2a714c9438104c4c3fe80048cca1e76dd Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-17.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-18.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-18.png new file mode 100644 index 0000000000000000000000000000000000000000..eab172f197ab3e8955ec29d12226463a8cbeedb9 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-18.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-19.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-19.png new file mode 100644 index 0000000000000000000000000000000000000000..a56fa22e1ac8d5c13e562d3b784f5c070b61f0ae Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-19.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-2.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9a48e548b676b326fc3401e03e615728612fa55b Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-2.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-3.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-3.png new file mode 100644 index 0000000000000000000000000000000000000000..fca9035bf8fdf07ed8381d0ff48256679cb8b935 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-3.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-4.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-4.png new file mode 100644 index 0000000000000000000000000000000000000000..5095959c181e86fd3226c56cc9ab2f4c5f3b771a Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-4.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-5.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-5.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe22f89fd964088bc21bf5541a978e91c794988 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-5.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-6.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-6.png new file mode 100644 index 0000000000000000000000000000000000000000..5485096e3f05320d7a7622e2e15074c28a506984 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-6.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-7.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-7.png new file mode 100644 index 0000000000000000000000000000000000000000..5838dab205681e0b4f6d93dd702895d6370450de Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-7.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-8.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-8.png new file mode 100644 index 0000000000000000000000000000000000000000..3fefaae4c410d25bc714af2dad02737fa2322952 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-8.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-9.png b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-9.png new file mode 100644 index 0000000000000000000000000000000000000000..d676f3453dd7d97533d1668b2225349e8548100b Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/environment_setup_1-9.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/model_infer1.png b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer1.png new file mode 100644 index 0000000000000000000000000000000000000000..3df66c6cb68c8a6e19d96b1d26979d1ac387fe98 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer1.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/model_infer2.png b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer2.png new file mode 100644 index 0000000000000000000000000000000000000000..fb462c272f1ac3a512662a3f7f01ac186b072b72 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer2.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/model_infer3.png b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer3.png new file mode 100644 index 0000000000000000000000000000000000000000..8adc4262af136310cbb1e48a2f556fc9fa3a5f7d Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer3.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/model_infer4.png b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer4.png new file mode 100644 index 0000000000000000000000000000000000000000..d50949d62087994cfc98b04bfd1af1d35a340154 Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer4.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/model_infer5.png b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer5.png new file mode 100644 index 0000000000000000000000000000000000000000..81e85dd24aa9b04b8efa3bb06a80a22e1224e09a Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer5.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/images/model_infer6.png b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer6.png new file mode 100644 index 0000000000000000000000000000000000000000..90fe5d42f2cd754b5f0e275050d6814c268d8b8a Binary files /dev/null and b/docs/mindspore/source_zh_cn/orange_pi/images/model_infer6.png differ diff --git a/docs/mindspore/source_zh_cn/orange_pi/index.rst b/docs/mindspore/source_zh_cn/orange_pi/index.rst index 56f2629997f652271d72498764f59f486130e9f9..bffcc1d31fdc75c71e6bae507177c642cb946a82 100644 --- a/docs/mindspore/source_zh_cn/orange_pi/index.rst +++ b/docs/mindspore/source_zh_cn/orange_pi/index.rst @@ -6,6 +6,6 @@ :maxdepth: 1 overview - quick_start - debug + environment_setup model_infer + quick_start \ No newline at end of file diff --git a/docs/mindspore/source_zh_cn/orange_pi/model_infer.md b/docs/mindspore/source_zh_cn/orange_pi/model_infer.md index a61812a2d3d86e8df135e74d9d2786267cd74762..0aa8508be760e001ebfb1557697efc838552a46c 100644 --- a/docs/mindspore/source_zh_cn/orange_pi/model_infer.md +++ b/docs/mindspore/source_zh_cn/orange_pi/model_infer.md @@ -1,7 +1,71 @@ -# 模型推理 +# 模型在线推理 [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/orange_pi/model_infer.md) -## 在线推理 +本章节将介绍如何在OrangePi AIpro(下称:香橙派开发板)下载昇思MindSpore在线推理案例,并启动Jupyter Lab界面执行推理。 -## 离线推理 +## 1. 下载案例 + +步骤1 下载案例代码 + +```bash +# 打开开发板的一个终端,运行如下命令 +cd samples/notebooks/ +git clone https://github.com/mindspore-courses/orange-pi-mindspore.git +``` + +步骤2 进入案例目录 + +下载的代码包在香橙派开发板的如下目录中:/home/HwHiAiUser/samples/notebooks + +项目目录如下: + +```bash +/home/HwHiAiUser/samples/notebooks/orange-pi-mindspore/tutorial/ +01- quick start +02- ResNet50 +03- ViT +04- FCN +05- Shufflenet +06- SSD +07- RNN +08- LSTM+CRF +09- GAN +10- DCGAN +11- Pix2Pix +12- Diffusion +13- ResNet50_transfer +``` + +## 2. 推理执行 + +步骤1 启动Jupyter Lab界面 + +```bash +cd /home/HwHiAiUser/samples/notebooks/ +./start_notebook.sh +``` + +在执行该脚本后,终端会出现如下打印信息,在打印信息中会有登录Jupyter Lab的网址链接。 + +![model-infer1](./images/model_infer1.png) + +然后打开火狐浏览器 + +![model-infer2](./images/model_infer2.png) + +再在浏览器中输入上面看到的网址链接,就可以登录Jupyter Lab软件了。 + +![model-infer3](./images/model_infer3.png) + +步骤2 在Jupyter Lab界面双击下图所示的案例目录,此处以“04-FCN”为例,即可进入到该案例的目录中。 + +![model-infer4](./images/model_infer4.png) + +步骤3 在该目录下有运行该示例的所有资源,其中mindspore_fcn8s.ipynb是在Jupyter Lab中运行该样例的文件,双击打开mindspore_fcn8s.ipynb,在右侧窗口中会显示mindspore_fcn8s.ipynb文件中的内容,如下图所示: + +![model-infer5](./images/model_infer5.png) + +步骤4 单击⏩按钮运行样例,在弹出的对话框中单击“Restart”按钮,此时该样例开始运行。 + +![model-infer6](./images/model_infer6.png) \ No newline at end of file diff --git a/docs/mindspore/source_zh_cn/orange_pi/overview.md b/docs/mindspore/source_zh_cn/orange_pi/overview.md index ad19dbe45ff41db7217ad40dfa628b97b51437cb..f3933c9cbaf257b083cddc6e71849a6c3134396b 100644 --- a/docs/mindspore/source_zh_cn/orange_pi/overview.md +++ b/docs/mindspore/source_zh_cn/orange_pi/overview.md @@ -1,3 +1,11 @@ # 了解香橙派 [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/orange_pi/overview.md) + +OrangePi AIpro(香橙派 AIpro)采用昇腾AI技术路线,具体为4核64位处理器+AI处理器,集成图形处理器,目前支持8-12TOPS和20TOPS AI算力,其中8-12TOPS算力开发板拥有12GB/24GB LPDDR4X,20TOPS算力开发板拥8GB/16GB LPDDR4X。两种算力的开发板均可以外接32GB/64GB/256GB eMMC模块,支持双4K高清输出。 + +日前,昇思MindSpore开源社区与香橙派通过紧密合作攻关,实现OrangePi AIpro开发板的系统镜像预置昇思MindSpore AI框架,并在后续版本迭代中持续演进,当前已支持MindSpore官网教程涵盖的全部网络模型。OrangePi AIpro开发板向开发者提供的官方系统镜像有openEuler版本预ubuntu版本,两个镜像版本均已预置昇思MindSpore,便于用户体验软硬协同优化后带来的高效开发体验。同时,欢迎开发者自定义配置MindSpore和CANN运行环境。 + +接下来的教程将演示如何基于OrangePi AIpro进行自定义环境搭建,如何在OrangePi AIpro启动Jupyter Lab,并以手写数字识别为例,介绍OrangePi AIpro上基于MindSpore进行在线推理需要完成的操作。 + +> 注意:以下操作基于OrangePi AIpro 8-12TOPS 16G开发板,20TOPS开发板操作方式相同。 \ No newline at end of file diff --git a/docs/mindspore/source_zh_cn/orange_pi/quick_start.ipynb b/docs/mindspore/source_zh_cn/orange_pi/quick_start.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0d41e961b06acaa51fcfa3df14273a0702461757 --- /dev/null +++ b/docs/mindspore/source_zh_cn/orange_pi/quick_start.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 快速入门\n", + "\n", + "因开发者可能会在OrangePi AIpro(下称:香橙派开发板)进行自定义模型和案例开发,本章节通过基于MindSpore的手写数字识别案例,说明香橙派开发板中的开发注意事项。\n", + "\n", + "> 由于Mindspore2.3及之前的版本暂未支持内存动态按需申请,以及CANN缺少对应的动态算子,所以执行案例之前需要通过set_context设置运行环境。后续会随着版本不断更新解决以上问题,从而在不需要进行环境配置的前提下可直接执行案例。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [] + } + ], + "source": [ + "from mindspore import nn\n", + "from mindspore.dataset import vision, transforms\n", + "from mindspore.dataset import MnistDataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 设置运行环境\n", + "\n", + " max_device_memory=\"2GB\" : 设置设备可用的最大内存为2GB。\n", + "\n", + " mode=mindspore.GRAPH_MODE : 表示在GRAPH_MODE模式中运行。\n", + "\n", + " device_target=\"Ascend\" : 表示待运行的目标设备为Ascend。\n", + "\n", + " jit_config={\"jit_level\":\"O2\"} : 编译优化级别开启极致性能优化,使用下沉的执行方式。\n", + "\n", + " scend_config={\"precision_mode\":\"allow_mix_precision\"} : 自动混合精度,自动将部分算子的精度降低到float16或bfloat16。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import mindspore\n", + "mindspore.set_context(max_device_memory=\"2GB\", mode=mindspore.GRAPH_MODE, device_target=\"Ascend\", jit_config={\"jit_level\":\"O2\"}, ascend_config={\"precision_mode\":\"allow_mix_precision\"})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 处理数据集\n", + "\n", + "MindSpore提供基于Pipeline的[数据引擎](https://www.mindspore.cn/docs/zh-CN/r2.3.0/design/data_engine.html),通过[数据集(Dataset)](https://www.mindspore.cn/tutorials/zh-CN/r2.3.0/beginner/dataset.html)和[数据变换(Transforms)](https://www.mindspore.cn/tutorials/zh-CN/r2.3.0/beginner/transforms.html)实现高效的数据预处理。在本案例中,我们使用Mnist数据集,自动下载完成后,使用`mindspore.dataset`提供的数据变换进行预处理。\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/datasets/MNIST_Data.zip (10.3 MB)\n", + "\n", + "file_sizes: 100%|██████████████████████████| 10.8M/10.8M [00:01<00:00, 7.63MB/s]\n", + "Extracting zip file...\n", + "Successfully downloaded / unzipped to ./\n" + ] + } + ], + "source": [ + "# Download data from open datasets\n", + "from download import download\n", + "\n", + "url = \"https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/\" \\\n", + " \"notebook/datasets/MNIST_Data.zip\"\n", + "path = download(url, \"./\", kind=\"zip\", replace=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MNIST数据集目录结构如下:\n", + "\n", + "```text\n", + "MNIST_Data\n", + "└── train\n", + " ├── train-images-idx3-ubyte (60000个训练图片)\n", + " ├── train-labels-idx1-ubyte (60000个训练标签)\n", + "└── test\n", + " ├── t10k-images-idx3-ubyte (10000个测试图片)\n", + " ├── t10k-labels-idx1-ubyte (10000个测试标签)\n", + "\n", + "```\n", + "\n", + "数据下载完成后,获得数据集对象。" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "train_dataset = MnistDataset('MNIST_Data/train')\n", + "test_dataset = MnistDataset('MNIST_Data/test')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "打印数据集中包含的数据列名,用于dataset的预处理。" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['image', 'label']\n" + ] + } + ], + "source": [ + "print(train_dataset.get_col_names())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MindSpore的dataset使用数据处理流水线(Data Processing Pipeline),需指定map、batch、shuffle等操作。这里我们使用map对图像数据及标签进行变换处理,将输入的图像缩放为1/255,根据均值0.1307和标准差值0.3081进行归一化处理,然后将处理好的数据集打包为大小为64的batch。" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def datapipe(dataset, batch_size):\n", + " image_transforms = [\n", + " vision.Rescale(1.0 / 255.0, 0),\n", + " vision.Normalize(mean=(0.1307,), std=(0.3081,)),\n", + " vision.HWC2CHW()\n", + " ]\n", + " label_transform = transforms.TypeCast(mindspore.int32)\n", + "\n", + " dataset = dataset.map(image_transforms, 'image')\n", + " dataset = dataset.map(label_transform, 'label')\n", + " dataset = dataset.batch(batch_size)\n", + " return dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# Map vision transforms and batch dataset\n", + "train_dataset = datapipe(train_dataset, 64)\n", + "test_dataset = datapipe(test_dataset, 64)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可使用[create_tuple_iterator](https://www.mindspore.cn/docs/zh-CN/r2.3.0/api_python/dataset/dataset_method/iterator/mindspore.dataset.Dataset.create_tuple_iterator.html) 或[create_dict_iterator](https://www.mindspore.cn/docs/zh-CN/r2.3.0/api_python/dataset/dataset_method/iterator/mindspore.dataset.Dataset.create_dict_iterator.html)对数据集进行迭代访问,查看数据和标签的shape和datatype。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of image [N, C, H, W]: (64, 1, 28, 28) Float32\n", + "Shape of label: (64,) Int32\n" + ] + } + ], + "source": [ + "for image, label in test_dataset.create_tuple_iterator():\n", + " print(f\"Shape of image [N, C, H, W]: {image.shape} {image.dtype}\")\n", + " print(f\"Shape of label: {label.shape} {label.dtype}\")\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of image [N, C, H, W]: (64, 1, 28, 28) Float32\n", + "Shape of label: (64,) Int32\n" + ] + } + ], + "source": [ + "for data in test_dataset.create_dict_iterator():\n", + " print(f\"Shape of image [N, C, H, W]: {data['image'].shape} {data['image'].dtype}\")\n", + " print(f\"Shape of label: {data['label'].shape} {data['label'].dtype}\")\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Network<\n", + " (flatten): Flatten<>\n", + " (dense_relu_sequential): SequentialCell<\n", + " (0): Dense\n", + " (1): ReLU<>\n", + " (2): Dense\n", + " (3): ReLU<>\n", + " (4): Dense\n", + " >\n", + " >\n" + ] + } + ], + "source": [ + "# Define model\n", + "class Network(nn.Cell):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.flatten = nn.Flatten()\n", + " self.dense_relu_sequential = nn.SequentialCell(\n", + " nn.Dense(28*28, 512),\n", + " nn.ReLU(),\n", + " nn.Dense(512, 512),\n", + " nn.ReLU(),\n", + " nn.Dense(512, 10)\n", + " )\n", + "\n", + " def construct(self, x):\n", + " x = self.flatten(x)\n", + " logits = self.dense_relu_sequential(x)\n", + " return logits\n", + "\n", + "model = Network()\n", + "print(model)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 模型训练" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "在模型训练中,一个完整的训练过程(step)需要实现以下三步:\n", + "\n", + "1. **正向计算**:模型预测结果(logits),并与正确标签(label)求预测损失(loss)。\n", + "2. **反向传播**:利用自动微分机制,自动求模型参数(parameters)对于loss的梯度(gradients)。\n", + "3. **参数优化**:将梯度更新到参数上。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MindSpore使用函数式自动微分机制,因此针对上述步骤需要实现:\n", + "\n", + "1. 定义正向计算函数。\n", + "2. 使用[value_and_grad](https://www.mindspore.cn/docs/zh-CN/r2.3.0/api_python/mindspore/mindspore.value_and_grad.html)通过函数变换获得梯度计算函数。\n", + "3. 定义训练函数,使用[set_train](https://www.mindspore.cn/docs/zh-CN/r2.3.0/api_python/nn/mindspore.nn.Cell.html#mindspore.nn.Cell.set_train)设置为训练模式,执行正向计算、反向传播和参数优化。" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# Instantiate loss function and optimizer\n", + "loss_fn = nn.CrossEntropyLoss()\n", + "optimizer = nn.SGD(model.trainable_params(), 1e-2)\n", + "\n", + "# 1. Define forward function\n", + "def forward_fn(data, label):\n", + " logits = model(data)\n", + " loss = loss_fn(logits, label)\n", + " return loss, logits\n", + "\n", + "# 2. Get gradient function\n", + "grad_fn = mindspore.value_and_grad(forward_fn, None, optimizer.parameters, has_aux=True)\n", + "\n", + "# 3. Define function of one-step training\n", + "def train_step(data, label):\n", + " (loss, _), grads = grad_fn(data, label)\n", + " optimizer(grads)\n", + " return loss\n", + "\n", + "def train(model, dataset):\n", + " size = dataset.get_dataset_size()\n", + " model.set_train()\n", + " for batch, (data, label) in enumerate(dataset.create_tuple_iterator()):\n", + " loss = train_step(data, label)\n", + "\n", + " if batch % 100 == 0:\n", + " loss, current = loss.asnumpy(), batch\n", + " print(f\"loss: {loss:>7f} [{current:>3d}/{size:>3d}]\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "除训练外,我们定义测试函数,用来评估模型的性能。" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def test(model, dataset, loss_fn):\n", + " num_batches = dataset.get_dataset_size()\n", + " model.set_train(False)\n", + " total, test_loss, correct = 0, 0, 0\n", + " for data, label in dataset.create_tuple_iterator():\n", + " pred = model(data)\n", + " total += len(data)\n", + " test_loss += loss_fn(pred, label).asnumpy()\n", + " correct += (pred.argmax(1) == label).asnumpy().sum()\n", + " test_loss /= num_batches\n", + " correct /= total\n", + " print(f\"Test: \\n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "训练过程需多次迭代数据集,一次完整的迭代称为一轮(epoch)。在每一轮,遍历训练集进行训练,结束后使用测试集进行预测。打印每一轮的loss值和预测准确率(Accuracy),可以看到loss在不断下降,Accuracy在不断提高。" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1\n", + "-------------------------------\n", + "loss: 2.302898 [ 0/938]\n", + "loss: 1.729961 [100/938]\n", + "loss: 0.865714 [200/938]\n", + "loss: 0.782822 [300/938]\n", + "loss: 0.389282 [400/938]\n", + "loss: 0.293149 [500/938]\n", + "loss: 0.474819 [600/938]\n", + "loss: 0.242542 [700/938]\n", + "loss: 0.542277 [800/938]\n", + "loss: 0.342929 [900/938]\n", + "Test: \n", + " Accuracy: 90.7%, Avg loss: 0.321954 \n", + "\n", + "Epoch 2\n", + "-------------------------------\n", + "loss: 0.249492 [ 0/938]\n", + "loss: 0.347967 [100/938]\n", + "loss: 0.220382 [200/938]\n", + "loss: 0.308149 [300/938]\n", + "loss: 0.353044 [400/938]\n", + "loss: 0.392116 [500/938]\n", + "loss: 0.396438 [600/938]\n", + "loss: 0.231412 [700/938]\n", + "loss: 0.194819 [800/938]\n", + "loss: 0.228290 [900/938]\n", + "Test: \n", + " Accuracy: 93.0%, Avg loss: 0.249993 \n", + "\n", + "Epoch 3\n", + "-------------------------------\n", + "loss: 0.343888 [ 0/938]\n", + "loss: 0.307786 [100/938]\n", + "loss: 0.153425 [200/938]\n", + "loss: 0.254917 [300/938]\n", + "loss: 0.198072 [400/938]\n", + "loss: 0.108963 [500/938]\n", + "loss: 0.202033 [600/938]\n", + "loss: 0.340418 [700/938]\n", + "loss: 0.144911 [800/938]\n", + "loss: 0.175447 [900/938]\n", + "Test: \n", + " Accuracy: 93.7%, Avg loss: 0.212180 \n", + "\n", + "Done!\n" + ] + } + ], + "source": [ + "epochs = 3\n", + "for t in range(epochs):\n", + " print(f\"Epoch {t+1}\\n-------------------------------\")\n", + " train(model, train_dataset)\n", + " test(model, test_dataset, loss_fn)\n", + "print(\"Done!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 保存模型\n", + "\n", + "模型训练完成后,需要将其参数进行保存。" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved Model to model.ckpt\n" + ] + } + ], + "source": [ + "# Save checkpoint\n", + "mindspore.save_checkpoint(model, \"model.ckpt\")\n", + "print(\"Saved Model to model.ckpt\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 加载模型" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "加载保存的权重分为两步:\n", + "\n", + "1. 重新实例化模型对象,构造模型。\n", + "2. 加载模型参数,并将其加载至模型上。" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n" + ] + } + ], + "source": [ + "# Instantiate a random initialized model\n", + "model = Network()\n", + "# Load checkpoint and load parameter to model\n", + "param_dict = mindspore.load_checkpoint(\"model.ckpt\")\n", + "param_not_load, _ = mindspore.load_param_into_net(model, param_dict)\n", + "print(param_not_load)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> `param_not_load`是未被加载的参数列表,为空时代表所有参数均加载成功。" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "加载后的模型可以直接用于预测推理。" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Predicted: \"[1 2 0 4 6 4 9 0 2 2]\", Actual: \"[1 2 0 4 6 9 9 0 2 2]\"\n" + ] + } + ], + "source": [ + "model.set_train(False)\n", + "for data, label in test_dataset:\n", + " pred = model(data)\n", + " predicted = pred.argmax(1)\n", + " print(f'Predicted: \"{predicted[:10]}\", Actual: \"{label[:10]}\"')\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 更多基于昇思MindSpore的香橙派开发板案例详见:[GitHub链接](https://github.com/mindspore-courses/orange-pi-mindspore/tree/master/tutorial)\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "MindSpore", + "language": "python", + "name": "mindspore" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + }, + "vscode": { + "interpreter": { + "hash": "8c9da313289c39257cb28b126d2dadd33153d4da4d524f730c81a4aaccbd2ca7" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/mindspore/source_zh_cn/orange_pi/quick_start.md b/docs/mindspore/source_zh_cn/orange_pi/quick_start.md deleted file mode 100644 index a5a172d95a26a69e228960758f7cda68f3f9b32e..0000000000000000000000000000000000000000 --- a/docs/mindspore/source_zh_cn/orange_pi/quick_start.md +++ /dev/null @@ -1,9 +0,0 @@ -# 快速入门 - -[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/mindspore/source_zh_cn/orange_pi/quick_start.md) - -## 安装 - -## 启动 - -## 运行