Browse Source

更新npu和gpu使用示例

liuzx-patch-1
liuzx 2 years ago
parent
commit
dafd906135
15 changed files with 248 additions and 267 deletions
  1. BIN
      gpu_mnist_example/Example_Picture/基础镜像.png
  2. +0
    -93
      gpu_mnist_example/Example_Picture/快速创建GPU训练任务.md
  3. BIN
      gpu_mnist_example/Example_Picture/结果下载.png
  4. BIN
      gpu_mnist_example/Example_Picture/适用A100的基础镜像.png
  5. +112
    -26
      gpu_mnist_example/README.md
  6. +0
    -109
      npu_mnist_example/Example_Picture/快速创建NPU训练任务.md
  7. BIN
      npu_mnist_example/Example_Picture/数据集上传位置.png
  8. BIN
      npu_mnist_example/Example_Picture/新建训练任务页面.png
  9. BIN
      npu_mnist_example/Example_Picture/查看日志页面.png
  10. BIN
      npu_mnist_example/Example_Picture/模型下载页面.png
  11. BIN
      npu_mnist_example/Example_Picture/运行参数界面.png
  12. +129
    -32
      npu_mnist_example/README.md
  13. +2
    -2
      npu_mnist_example/inference.py
  14. +2
    -2
      npu_mnist_example/train.py
  15. +3
    -3
      npu_mnist_example/train_multi_card.py

BIN
gpu_mnist_example/Example_Picture/基础镜像.png View File

Before After
Width: 2071  |  Height: 1265  |  Size: 118 kB

+ 0
- 93
gpu_mnist_example/Example_Picture/快速创建GPU训练任务.md View File

@@ -1,93 +0,0 @@
# 如何在启智平台上进行模型训练 - GPU版本

- 启智集群单数据集的训练,启智集群多数据集的训练,智算集群的单数据集训练,这3个的训练使用方式不同,请注意区分:

- 启智集群单数据集**加载模型**的训练示例请参考示例中[train_gpu.py](../train_gpu.py)的代码注释
- 启智集群中数据集使用方式:
多数据集时MNISTDataset_torch.zip的使用方式是:数据集位于/dataset/MNISTDataset_torch/下

## 1 概述

- 本项目以#LeNet5-MNIST-PyTorch为例,简要介绍如何在启智AI协同平台上使用Pytorch完成训练任务,包括单数据集的训练,多数据集的训练,智算网络的训练,旨在为AI开发者提供启智训练示例。
- 用户可以直接使用本项目提供的数据集和代码文件创建自己的训练任务。

## 2 准备工作

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

### 2.1 数据准备

#### 数据集获取

- 如果你需要试运行本示例,则无需再次上传数据集,因为本示例中的数据集MnistDataset_torch.zip已经设置为公开数据集,可以直接引用,数据集也可从本项目的数据集目录中下载并查看数据结构,[MNISTDataset_torch.zip数据集下载](https://git.openi.org.cn/OpenIOSSG/MNIST_PytorchExample_GPU/datasets?type=0),[mnist_epoch1_0.73.pkl.zip数据集下载](https://git.openi.org.cn/OpenIOSSG/MNIST_PytorchExample_GPU/datasets?type=0)。
- 数据文件说明
- MNISTData数据集是由10类28∗28的灰度图片组成,训练数据集包含60000张图片,测试数据集包含10000张图片。
- 数据集压缩包的目录结构如下:

> MNISTDataset_torch.zip
> ├── test
> │ └── MNIST
> │ │── raw
> │ │ ├── t10k-images-idx3-ubyte
> │ │ └── t10k-labels-idx1-ubyte
> │ │ ├── train-images-idx3-ubyte
> │ │ └── train-labels-idx1-ubyte
> │ └── processed
> │ ├── test.pt
> │ └── training.pt
> └── train
> └── MNIST
> │── raw
> │ ├── t10k-images-idx3-ubyte
> │ └── t10k-labels-idx1-ubyte
> │ ├── train-images-idx3-ubyte
> │ └── train-labels-idx1-ubyte
> └── processed
> ├── test.pt
> └── training.pt
>

> mnist_epoch1_0.73.pkl.zip
> ├── mnist_epoch1_0.73.pkl
>

#### 数据集上传

使用GPU进行训练,需要在GPU芯片上运行,所以上传的数据集需要传到GPU界面。(此步骤在本示例中不需要,可直接选择公开数据集MNISTDataset_torch.zip)

### 2.2 执行脚本准备

#### 示例代码

- 示例代码可从本仓库中下载,[代码下载](https://git.openi.org.cn/OpenIOSSG/MNIST_PytorchExample_GPU)
- 代码文件说明
- [train_gpu.py](../train_gpu.py),用于单数据集训练的脚本文件。具体说明请参考[train_gpu.py](../train_gpu.py)
- [model.py](../model.py),使用的训练网络,在单数据集训练,多数据集训练,智算网络训练中使用到。

## 3 创建训练任务

准备好数据和执行脚本以后,需要创建训练任务将Pytorch脚本运行。首次使用的用户可参考本示例代码。

### 训练界面示例

由于A100的适配性问题,A100需要使用cuda11以上的cuda版本,目前平台已提供基于A100的cuda基础镜像,只需要选择对应的公共镜像:

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

| 参数名称 | 说明 |
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 计算资源 | 选择CPU/GPU |
| 代码分支 | 选择仓库代码中要使用的代码分支,默认可选择master分支 |
| 镜像 | 镜像选择已在调试环境中调试好的镜像,目前版本请选择基础镜像:平台提供基于A100的cuda基础镜像,如dockerhub.pcl.ac.cn:5000/user-images/openi:cuda111_python37_pytorch191 |
| 启动文件 | 启动文件选择代码目录下的启动脚本train.py |
| 数据集 | 数据集选择已上传到启智平台的公共数据集MnistDataset_torch.zip |
| 运行参数 | 增加运行参数可以向脚本中其他参数传值,如epoch_size |
| 资源规格 | 规格选择含有GPU个数的规格 |

## 4 查看运行结果

### 4.1 在训练作业界面可以查看运行日志

目前训练任务的日志只能在代码中print输出,参考示例train.py代码相关print

## 对于示例代码有任何问题,欢迎在本项目中提issue。

BIN
gpu_mnist_example/Example_Picture/结果下载.png View File

Before After
Width: 2336  |  Height: 1012  |  Size: 94 kB

BIN
gpu_mnist_example/Example_Picture/适用A100的基础镜像.png View File

Before After
Width: 1499  |  Height: 676  |  Size: 111 kB

+ 112
- 26
gpu_mnist_example/README.md View File

@@ -1,49 +1,135 @@
# 如何在启智平台上进行模型训练—GPU示例

## 1.启智集群和智算集群的GPU训练样
# 如何在启智平台上进行模型调试和训练—GPU_手写数字识别示

###### 启智集群的示例代码:
## 一 ,数据集及预训练模型准备

- 训练任务示例请参考示例中[train.py](./train.py)的代码注释
- 推理任务示例请参考示例中[inference.py](./inference.py)的代码注释
##### 1,数据集说明:

## 2. 在云脑上获取数据集,预训练模型,输出路径
数据集可从本项目的数据集中引用,[数据集引用](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/datasets?type=1)

使用c2net包
- MNISTData数据集是由10类28∗28的灰度图片组成,训练数据集包含60000张图片,测试数据集包含10000张图片。
- MNIST_Data.zip数据集压缩包的目录结构如下:

```
#导入包
from c2net.context import prepare,upload_output
> MNIST_Data.zip
> ├── test
> │ ├── t10k-images-idx3-ubyte
> │ └── t10k-labels-idx1-ubyte
> └── train
> ├── train-images-idx3-ubyte
> └── train-labels-idx1-ubyte
>

##### 2,预训练模型说明:

checkpoint_lenet-1_1875模型可从本项目的模型目录中引用,[预训练模型引用]()

* checkpoint_lenet-1_1875模型的目录结构如下:

#初始化导入数据集和预训练模型到容器内
> checkpoint_lenet-1_1875
> ├── checkpoint_lenet-1_1875.ckpt
>

## 二. 如何在云脑上获取代码路径,数据集路径,预训练模型路径,输出路径

##### 1,准备数据

```
from c2net.context import prepare
c2net_context = prepare()
```

#获取代码路径,数据集路径,预训练模型路径,输出路径
code_path = c2net_context.code_path
dataset_path = c2net_context.dataset_path
pretrain_model_path = c2net_context.pretrain_model_path
output_path = openi_context.output_path
##### 2,获取代码路径

#回传结果
upload_output()
```
code_path = c2net_context.code_path +"/" +"项目名"
在本示例中代码路径为:
code_path = c2net_context.code_path + "/" + "Openl_Cloudbrain_Example"
```

##### 3,获取数据集路径

```
dataset_path = c2net_context.dataset_path +"/" +"数据集名称"
在本示例中代码路径为:
dataset_path = c2net_context.dataset_path + "/" + "MNIST_Data"
```

## 3.[创建GPU训练示例任务界面教程](./Example_Picture/快速创建GPU训练任务.md)
##### 4,获取预训练模型路径

## 4.FAQ
```
pretrain_model_path = c2net_context.pretrain_model_path +"/" +"模型名称"
在本示例中预训练模型路径为:
pretrain_model_path = c2net_context.pretrain_model_path + "/" + "checkpoint_lenet-1_1875"
```

##### 5,获取输出路径

### 4.1 关于启智平台公共库[c2net](https://openi.pcl.ac.cn/OpenIOSSG/c2net-pypi):
```
output_path = c2net_context.output_path
在本示例中输出路径为:
output_path = c2net_context.output_path
```

主要使用的方法有以下几个:
##### 6,回传结果

```
prepare 准备数据集,模型,输出路径
upload_output 将训练镜像的输出结果拷贝回启智平台
from c2net.context import upload_output
upload_output()
在本示例中回传结果为(只有训练任务才能回传结果):
from c2net.context import prepare,upload_output
upload_output()
```

### 4.2 解决参数报错问题:
## 三.GPU样例准备

##### 1,gpu示例代码:

- 训练任务单卡示例请参考示例中[train.py](./train.py)的代码注释
- 推理任务示例请参考示例中[inference.py](./inference.py)的代码注释

##### 2,创建GPU调试任务

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

| 参数名称 | 说明 |
| -------- | ----------------------------------------------------------------------------------- |
| 代码分支 | 选择仓库代码中要使用的代码分支,默认可选择master分支 |
| 镜像 | 镜像选择含有python和torch的镜像 |
| 启动文件 | 启动文件选择代码目录下的启动脚本,在本示例中选择gpu_mnist_example/train.py |
| 数据集 | 数据集选择MNIST_Data.zip |
| 运行参数 | 选择增加运行参数可以向脚本中其他参数传值,如epoch_size,需要在代码里定义增加的超参数 |
| 资源规格 | 规格选择[GPU] |

启动调试任务后,先执行prepare()进行数据准备;

请在代码中加入 `args, unknown = parser.parse_known_args()`,可忽略掉 `--ckpt_url`,`--data_url`, `--multi_date_url`等参数报错问题
进入对应的代码目录后,可在终端执行python train.py;

##### 3,创建GPU训练任务

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

| 参数名称 | 说明 |
| -------- | ----------------------------------------------------------------------------------- |
| 代码分支 | 选择仓库代码中要使用的代码分支,默认可选择master分支 |
| 镜像 | 镜像选择含有python和torch的镜像 |
| 启动文件 | 启动文件选择代码目录下的启动脚本,在本示例中选择gpu_mnist_example/train.py |
| 数据集 | 数据集选择MNIST_Data.zip |
| 运行参数 | 选择增加运行参数可以向脚本中其他参数传值,如epoch_size,需要在代码里定义增加的超参数 |
| 资源规格 | 规格选择[GPU] |
| 模型 | 模型选择checkpoint_lenet-1_1875 |

启动训练任务后,训练结束会在任务的结果下载页提供输出结果下载

## 四.GPU任务注意事项

##### 1, 使用超参数的方法:

请在代码中加入

```
import parser
args, unknown = parser.parse_known_args()
#可忽略掉 `--ckpt_url`,`--data_url`, `--multi_date_url`等参数无定义导致的报错问题
```

## 对于示例代码有任何问题,欢迎在本项目中提issue。

+ 0
- 109
npu_mnist_example/Example_Picture/快速创建NPU训练任务.md View File

@@ -1,109 +0,0 @@
# 如何在启智平台上进行模型训练 - NPU版本

## 1 概述

- 本项目以LeNet-MNIST为例,简要介绍如何在启智AI协同平台上使用MindSpore完成训练任务,并提供单数据集的训练,多数据集的训练,智算网络的训练,单数据集推理等训练代码示例,旨在为AI开发者提供启智npu训练示例。对于示例代码有任何问题,欢迎在本项目中提issue。
- 用户可以直接使用本项目提供的数据集和代码文件创建自己的训练任务。
- 启智平台对接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.zip
> ├── test
> │ ├── t10k-images-idx3-ubyte
> │ └── t10k-labels-idx1-ubyte
> └── train
> ├── train-images-idx3-ubyte
> └── train-labels-idx1-ubyte
>

> checkpoint_lenet-1_1875.zip
> ├── checkpoint_lenet-1_1875.ckpt
>

#### 数据集上传

- 由于本示例使用的是Mindspore开发,需要在NPU芯片运行,所以上传的数据集需要传到NPU界面。【注意:如果你需要试运行本示例,则无需再次上传数据集,因为本示例中的数据集MNIST_Example已经设置为公开数据集,可以直接引用或点赞收藏后使用】
- 如下所示:
- ![avatar](数据集上传位置.png)

#### imagenet-1k

- 平台已经将imagenet-1k挂载到了训练镜像中,可在训练脚本中直接读取,具体用法请参考上述示例代码。
- imagenet-1k在训练镜像中的绝对路径:

```
.
└── cache/
├── ascend
├── outputs
├── user-job-dir
└── sfs/
└── data/
└── imagenet/
├── train/
│ └── n01440764/
│ └── n01440764_11063.JPEG
└── val/
└── n01440764/
└── ILSVRC2012_val_00011993.JPEG
```

### 2.2 执行脚本准备

#### 示例代码

- 示例代码可从本仓库中下载,[代码下载](https://git.openi.org.cn/OpenIOSSG/MNIST_Example)
- 代码文件说明
- [train_npu.py](../train_npu.py),启智集群单数据集训练的脚本文件,包括将数据集从obs拷贝到训练镜像中、指定迭代次数、把训练后的模型数据拷贝回obs等。具体说明请参考[train_npu.py](../train_npu.py)的代码注释
- [config.py](../config.py),网络配置信息,在单数据集训练,多数据集训练,智算网络训练等训练脚本中会使用到。
- [dataset.py](../dataset.py),对原始数据集进行预处理,产生可用于网络训练的数据集,在单数据集的训练,多数据集的训练,智算网络的训练等训练脚本中会使用到。
- [lenet.py](../lenet.py),使用的训练网络,在单数据集训练,多数据集训练,智算网络训练等训练脚本中会使用到。
- [dataset_distributes.py](../dataset_distributes.py),对原始数据集进行预处理,产生可用于单机多卡训练的数据集。

## 3 创建训练任务

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

### 使用MindSpore作为训练框架创建训练作业,界面截图如下图所示。

![avatar](新建训练任务页面.png)

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

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

<!-- 注:若要在启智平台上使用CPU,需要在启智平台训练界面上加上运行参数device_target=CPU,否则默认是Ascend,如下图所示
![avatar](Example_Picture/运行参数界面.png) -->

## 4 查看运行结果

### 4.1 在训练作业界面可以查看运行日志

![avatar](查看日志页面.png)

### 4.2 训练结束后可以下载模型文件

![avatar](模型下载页面.png)

## 对于示例代码有任何问题,欢迎在本项目中提issue。

BIN
npu_mnist_example/Example_Picture/数据集上传位置.png View File

Before After
Width: 2304  |  Height: 1098  |  Size: 189 kB

BIN
npu_mnist_example/Example_Picture/新建训练任务页面.png View File

Before After
Width: 1724  |  Height: 1444  |  Size: 73 kB

BIN
npu_mnist_example/Example_Picture/查看日志页面.png View File

Before After
Width: 1809  |  Height: 788  |  Size: 67 kB

BIN
npu_mnist_example/Example_Picture/模型下载页面.png View File

Before After
Width: 1819  |  Height: 776  |  Size: 73 kB

BIN
npu_mnist_example/Example_Picture/运行参数界面.png View File

Before After
Width: 2146  |  Height: 1294  |  Size: 108 kB

+ 129
- 32
npu_mnist_example/README.md View File

@@ -1,57 +1,142 @@
# 如何在启智平台上进行模型训练—NPU_手写数字识别示例
# 如何在启智平台上进行模型调试和训练—NPU_手写数字识别示例

## 1.启智集群和智算集群的NPU训练样例
## 一 ,数据集及预训练模型准备

###### 启智集群的示例代码
##### 1,数据集说明

- 训练任务单卡示例请参考示例中[train.py](./train.py)的代码注释
- 训练任务多卡示例请参考示例中[train_multi_card.py](./train_multi_card.py)的代码注释
- 训练任务示例请参考示例中[inference.py](./inference.py)的代码注释
- 启智集群训练任务已经将ImageNet-1k数据集挂载到训练镜像,具体使用方法请参考示例中[read_imagenet.py](./read_imagenet.py)的代码注释
数据集可从本项目的数据集中引用,[数据集引用](https://git.openi.org.cn/OpenIOSSG/MNIST_Example/datasets?type=1)

## 2. 在云脑上获取数据集,预训练模型,输出路径
- MNISTData数据集是由10类28∗28的灰度图片组成,训练数据集包含60000张图片,测试数据集包含10000张图片。
- MNISTData.zip数据集压缩包的目录结构如下:

使用c2net包
> MNISTData.zip
> ├── test
> │ ├── t10k-images-idx3-ubyte
> │ └── t10k-labels-idx1-ubyte
> └── train
> ├── train-images-idx3-ubyte
> └── train-labels-idx1-ubyte
>

```
#导入包
from c2net.context import prepare, upload_openi
##### 2,预训练模型说明:

Mindspore_MNIST_Example_Model模型可从本项目的模型目录中引用,[预训练模型引用]()

* Mindspore_MNIST_Example_Model模型的目录结构如下:

> Mindspore_MNIST_Example_Model
> ├── checkpoint_lenet-1_1875.ckpt
>

#初始化导入数据集和预训练模型到容器内
## 二. 如何在云脑上获取代码路径,数据集路径,预训练模型路径,输出路径

##### 1,准备数据

```
from c2net.context import prepare
c2net_context = prepare()
```

#获取代码路径,数据集路径,预训练模型路径,输出路径
code_path = c2net_context.code_path
dataset_path = c2net_context.dataset_path
pretrain_model_path = c2net_context.pretrain_model_path
output_path = c2net_context.output_path
##### 2,获取代码路径

#回传结果到openi
upload_output()
```
code_path = c2net_context.code_path +"/" +"项目名"
在本示例中代码路径为:
code_path = c2net_context.code_path + "/" + "Openl_Cloudbrain_Example"
```

## 3.[创建NPU训练示例任务界面教程](./Example_Picture/快速创建NPU训练任务.md)
##### 3,获取数据集路径

## 4.FAQ
```
dataset_path = c2net_context.dataset_path +"/" +"数据集名称"
在本示例中代码路径为:
dataset_path = c2net_context.dataset_path + "/" + "MNISTData"
```

### 4.1 关于公共库[c2net](https://openi.pcl.ac.cn/OpenIOSSG/c2net-pypi):
##### 4,获取预训练模型路径

主要使用的方法有以下几个:
```
pretrain_model_path = c2net_context.pretrain_model_path +"/" +"模型名称"
在本示例中预训练模型路径为:
pretrain_model_path = c2net_context.pretrain_model_path + "/" + "Mindspore_MNIST_Example_Model"
```

##### 5,获取输出路径

```
prepare 准备数据集,模型,输出路径
c2net.context.upload_output 将训练镜像的输出结果拷贝回启智平台
c2net.context.moxing_helper.obs_copy_file 通过mox拷贝文件
c2net.context.moxing_helper.obs_copy_folder 通过mox拷贝文件夹
output_path = c2net_context.output_path
在本示例中输出路径为:
output_path = c2net_context.output_path
```

##### 6,回传结果

```
from c2net.context import upload_output
upload_output()
在本示例中回传结果为(只有训练任务才能回传结果):
from c2net.context import prepare,upload_output
upload_output()
```

### 4.2 解决参数报错问题:
## 三.NPU样例准备

请在代码中加入 `args, unknown = parser.parse_known_args()`,可忽略掉 `--ckpt_url`,`--data_url`, `--multi_date_url`等参数报错问题
##### 1,npu示例代码:

### 4.3 多卡训练任务如何只让数据集只拷贝一次
- 训练任务单卡示例请参考示例中[train.py](./train.py)的代码注释
- 训练任务多卡示例请参考示例中[train_multi_card.py](./train_multi_card.py)的代码注释
- 推理任务示例请参考示例中[inference.py](./inference.py)的代码注释
- 启智集群训练任务已经将ImageNet-1k数据集挂载到训练镜像,具体使用方法请参考示例中[read_imagenet.py](./read_imagenet.py)的代码注释

##### 2,创建NPU调试任务

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

| 参数名称 | 说明 |
| -------- | ----------------------------------------------------------------------------------- |
| 代码分支 | 选择仓库代码中要使用的代码分支,默认可选择master分支 |
| 镜像 | 镜像选择mindspore_1.10.1 |
| 启动文件 | 启动文件选择代码目录下的启动脚本,在本示例中选择npu_mnist_example/train.py |
| 数据集 | 数据集选择MNISTData.zip |
| 运行参数 | 选择增加运行参数可以向脚本中其他参数传值,如epoch_size,需要在代码里定义增加的超参数 |
| 资源规格 | 规格选择[Ascend: 1 * Ascend 910 CPU:24 核 256GiB],表示单机单卡 |
| 模型 | 模型可选择Mindspore_MNIST_Example_Model |

启动调试任务后,先执行prepare()进行数据准备;

进入对应的代码目录后,可在终端执行python train.py;

##### 3,创建NPU训练任务

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

| 参数名称 | 说明 |
| -------- | ----------------------------------------------------------------------------------- |
| 代码分支 | 选择仓库代码中要使用的代码分支,默认可选择master分支 |
| 镜像 | 镜像选择mindspore_1.10.1 |
| 启动文件 | 启动文件选择代码目录下的启动脚本,在本示例中选择npu_mnist_example/train.py |
| 数据集 | 数据集选择MNISTData.zip |
| 运行参数 | 选择增加运行参数可以向脚本中其他参数传值,如epoch_size,需要在代码里定义增加的超参数 |
| 资源规格 | 规格选择[Ascend: 1 * Ascend 910 CPU:24 核 256GiB],表示单机单卡 |
| 模型 | 模型选择Mindspore_MNIST_Example_Model |

启动训练任务后,训练结束会在任务的结果下载页提供输出结果下载

## 四.NPU任务注意事项

使用缓存文件和local_rank%8作为判断,若第0卡拷贝完成,则其它卡不拷贝,并在第0卡拷贝数据完成后才执行之后的代码
##### 1, 使用超参数的方法:

请在代码中加入

```
import parser
args, unknown = parser.parse_known_args()
#可忽略掉 `--ckpt_url`,`--data_url`, `--multi_date_url`等参数无定义导致的报错问题
```

##### 2, 多卡训练任务如何只让数据集只拷贝一次

使用缓存文件和local_rank%8作为判断,若第0卡拷贝完成,则其它卡不拷贝,并在第0卡拷贝数据完成后才执行之后的代码,具体可参考示例中[train_multi_card.py](./train_multi_card.py)的代码注释

```
if local_rank%8==0:
@@ -67,4 +152,16 @@ while not os.path.exists("/cache/download_input.txt"):
time.sleep(1)
```

##### 3, 公共库[c2net](https://openi.pcl.ac.cn/OpenIOSSG/c2net-pypi)高级用法:

主要使用的方法有以下几个:

```
from c2net.context import prepare, upload_output, moxing_helper
prepare() 准备数据集,模型,输出路径
upload_output() 将训练镜像的输出结果拷贝回启智平台
moxing_helper.obs_copy_file(string,string) 通过mox拷贝文件
moxing_helper.obs_copy_folder(string,string) 通过mox拷贝文件夹
```

## 对于示例代码有任何问题,欢迎在本项目中提issue。

+ 2
- 2
npu_mnist_example/inference.py View File

@@ -54,7 +54,7 @@ if __name__ == "__main__":
#获取数据集路径
mnistdata_path = c2net_context.dataset_path+"/"+"MNISTData"
#获取预训练模型路径
mnist_example_test2_model_djts_path = c2net_context.pretrain_model_path+"/"+"MNIST_Example_test2_model_djts"
Mindspore_MNIST_Example_Model_path = c2net_context.pretrain_model_path+"/"+"Mindspore_MNIST_Example_Model"
#获取输出路径
save_path = c2net_context.output_path
@@ -68,7 +68,7 @@ if __name__ == "__main__":


print("============== Starting Testing ==============")
load_param_into_net(network, load_checkpoint(os.path.join(mnist_example_test2_model_djts_path, "checkpoint_lenet-1_1875.ckpt")))
load_param_into_net(network, load_checkpoint(os.path.join(Mindspore_MNIST_Example_Model_path, "checkpoint_lenet-1_1875.ckpt")))
ds_test = create_dataset(os.path.join(mnistdata_path, "test"), batch_size=1).create_dict_iterator()
data = next(ds_test)
images = data["image"].asnumpy()


+ 2
- 2
npu_mnist_example/train.py View File

@@ -54,7 +54,7 @@ if __name__ == "__main__":
#获取数据集路径
mnistdata_path = c2net_context.dataset_path+"/"+"MNISTData"
#获取预训练模型路径
mnist_example_test2_model_djts_path = c2net_context.pretrain_model_path+"/"+"MNIST_Example_test2_model_djts"
Mindspore_MNIST_Example_Model_path = c2net_context.pretrain_model_path+"/"+"Mindspore_MNIST_Example_Model"
#获取输出路径
output_path = c2net_context.output_path
@@ -65,7 +65,7 @@ if __name__ == "__main__":
net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")
net_opt = nn.Momentum(network.trainable_params(), cfg.lr, cfg.momentum)
time_cb = TimeMonitor(data_size=ds_train.get_dataset_size())
load_param_into_net(network, load_checkpoint(os.path.join(mnist_example_test2_model_djts_path, "checkpoint_lenet-1_1875.ckpt")))
load_param_into_net(network, load_checkpoint(os.path.join(Mindspore_MNIST_Example_Model_path, "checkpoint_lenet-1_1875.ckpt")))
if args.device_target != "Ascend":
model = Model(network,
net_loss,


+ 3
- 3
npu_mnist_example/train_multi_card.py View File

@@ -30,7 +30,7 @@ from mindspore.context import ParallelMode
from mindspore.communication.management import init, get_rank
import time
#导入openi包
from c2net.context import prepare
from c2net.context import prepare, upload_output


parser = argparse.ArgumentParser(description='MindSpore Lenet Example')
@@ -66,7 +66,7 @@ if __name__ == "__main__":
#获取数据集路径
mnistdata_path = c2net_context.dataset_path+"/"+"MNISTData"
#获取预训练模型路径
mnist_example_test2_model_djts_path = c2net_context.pretrain_model_path+"/"+"MNIST_Example_test2_model_djts"
Mindspore_MNIST_Example_Model_path = c2net_context.pretrain_model_path+"/"+"Mindspore_MNIST_Example_Model"
output_path = c2net_context.output_path
#Set a cache file to determine whether the data has been copied to obs.
#If this file exists during multi-card training, there is no need to copy the dataset multiple times.
@@ -85,7 +85,7 @@ if __name__ == "__main__":
net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")
net_opt = nn.Momentum(network.trainable_params(), cfg.lr, cfg.momentum)
time_cb = TimeMonitor(data_size=ds_train.get_dataset_size())
load_param_into_net(network, load_checkpoint(os.path.join(mnist_example_test2_model_djts_path, "checkpoint_lenet-1_1875.ckpt")))
load_param_into_net(network, load_checkpoint(os.path.join(Mindspore_MNIST_Example_Model_path, "checkpoint_lenet-1_1875.ckpt")))
if args.device_target != "Ascend":
model = Model(network,
net_loss,


Loading…
Cancel
Save