
# 如何在启智平台上进行模型训练 - NPU版本

## 1 概述
- 本项目以LeNet-MNIST为例，简要介绍如何在启智AI协同平台上使用MindSpore完成训练任务，旨在为AI初学者提供云脑训练示例。
- 大家可以直接使用本项目提供的数据集和代码文件创建自己的训练任务。
- 启智平台对接ModelArts和OBS，将数据集，代码，训练资源池等整合在启智AI协同平台上供开发者使用。
	- ModelArts是华为云提供的面向开发者的一站式AI开发平台，集成了昇腾AI处理器资源池，用户可以在ModelArts下体验MindSpore。
	- OBS是华为云提供的存储方式。

## 2 准备工作
- 启智平台使用准备，本项目需要用户创建启智平台账户，克隆代码到自己的账户，上传数据集，具体操作方法可以通过访问[OpenI_Learning](https://git.openi.org.cn/zeizei/OpenI_Learning)项目学习小白训练营系列课程进行学习。

### 2.1 数据准备
#### 数据集下载
- 数据集可从本项目的数据集目录中下载，[数据集下载](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/datasets?type=1)
- 数据文件说明
	- MNISTData数据集是由10类28∗28的灰度图片组成，训练数据集包含60000张图片，测试数据集包含10000张图片。
	- 数据集文件的目录结构如下：
>		MNIST_Data
>		├── test
>		│   ├── t10k-images-idx3-ubyte
>		│   └── t10k-labels-idx1-ubyte
>		└── train
>  		├── train-images-idx3-ubyte
>    		└── train-labels-idx1-ubyte

#### 数据集上传
- 由于本示例使用的是Mindspore开发，需要在NPU芯片运行，所以上传的数据集需要传到NPU界面。\
【注意：如果你需要试运行本示例，则无需再次上传数据集，因为本示例中的数据集MNIST_Example已经设置为公开数据集，可以直接引用】
- 如下所示：
- ![avatar](Example_Picture/数据集上传位置.png)
### 2.2 执行脚本准备
#### 示例代码
- 示例代码可从本仓库中下载，[代码下载](https://git.openi.org.cn/OpenIOSSG/MNIST_Example)
- 代码文件说明
	- [train.py](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/src/branch/master/train.py)，用于训练的脚本文件，包括将数据集从obs拷贝到训练镜像中、指定迭代次数、把训练后的模型数据拷贝回obs等。具体说明请参考[train.py](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/src/branch/master/train.py)的代码注释

	- [inference.py](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/src/branch/master/inference.py)，用于推理的脚本文件。

	- [config.py](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/src/branch/master/config.py)，网络配置信息，在train.py中会使用到。

	- [dataset.py](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/src/branch/master/dataset.py)，对原始数据集进行预处理，产生可用于网络训练的数据集。
  
	- [lenet.py](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/src/branch/master/lenet.py)，使用的训练网络,在train.py中会使用到。

## 3 创建训练任务
- 准备好数据和执行脚本以后，需要创建训练任务将MindSpore脚本真正运行起来。首次使用的用户可参考本示例代码。

### 使用MindSpore作为训练框架创建训练作业，界面截图如下图所示。
![avatar](Example_Picture/新建训练任务页面.png)


表1 创建训练作业界面参数说明

| 参数名称             | 说明        |
| ----------------- | ----------- |
| 代码分支              |  选择仓库代码中要使用的代码分支，默认可选择master分支。 |
| AI引擎                 |  AI引擎选择[Ascend-Powered-Engine]和所需的MindSpore版本(本示例图片为 [Mindspore-1.3.0-python3.7-aarch64]，请注意使用与所选版本对应的脚本)。  |
| 启动文件              |  启动文件选择代码目录下的启动脚本。  |
| 数据集                 |  数据集选择已上传到启智平台的数据集。 |
| 运行参数              |  数据存储位置和训练输出位置分别对应运行参数data_url和train_url，选择增加运行参数可以向脚本中其他参数传值，如epoch_size。在这里只需填入其他参数传值，data_url和train_url已默认加入运行参数，用户无需重复指定，只需在代码中指定。  |
| 资源池                 |  规格选择[Ascend: 1 * Ascend 910 CPU：24 核 256GiB]，表示单机单卡 |

注：若要在启智平台上使用NPU，需要在启智平台训练界面上加上运行参数device_target=Ascend，否则默认是CPU，如下图所示
![avatar](Example_Picture/运行参数界面.png)
## 4 查看运行结果
### 4.1 在训练作业界面可以查看运行日志
![avatar](Example_Picture/查看日志页面.png)
### 4.2 训练结束后可以下载模型文件
![avatar](Example_Picture/模型下载页面.png)