如何在启智平台上进行模型调试和训练—NPU_手写数字识别示例
一 ,数据集及预训练模型准备
1,数据集说明:
数据集可从本项目的数据集中引用,数据集引用
2,预训练模型说明:
Mindspore_MNIST_Example_Model模型可从本项目的模型目录中引用,预训练模型引用
二. 如何在云脑上获取代码路径,数据集路径,预训练模型路径,输出路径
1,准备数据
from c2net.context import prepare
c2net_context = prepare()
2,获取代码路径
code_path = c2net_context.code_path +"/" + "项目名".lower()
在本示例中代码路径为:
code_path = c2net_context.code_path + "/" + "Openl_Cloudbrain_Example".lower()
3,获取数据集路径
dataset_path = c2net_context.dataset_path +"/" +"数据集名称"
在本示例中代码路径为:
dataset_path = c2net_context.dataset_path + "/" + "MnistDataset_mindspore"
4,获取预训练模型路径
pretrain_model_path = c2net_context.pretrain_model_path +"/" +"模型名称"
在本示例中预训练模型路径为:
pretrain_model_path = c2net_context.pretrain_model_path + "/" + "Mindspore_MNIST_Example_Model"
5,获取输出路径
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()
三.NPU样例准备
1,npu示例代码:
2,创建NPU调试任务
表1创建训练作业界面参数说明
参数名称 |
说明 |
代码分支 |
选择仓库代码中要使用的代码分支,默认可选择master分支 |
镜像 |
镜像选择mindspore_1.10.1 |
启动文件 |
启动文件选择代码目录下的启动脚本,在本示例中选择npu_mnist_example/train.py |
数据集 |
数据集选择MnistDataset_mindspore.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 |
数据集 |
数据集选择MnistDataset_mindspore.zip |
运行参数 |
选择增加运行参数可以向脚本中其他参数传值,如epoch_size,需要在代码里定义增加的超参数 |
资源规格 |
规格选择[Ascend: 1 * Ascend 910 CPU:24 核 256GiB],表示单机单卡 |
模型 |
模型选择Mindspore_MNIST_Example_Model |
启动训练任务后,训练结束会在任务的结果下载页提供输出结果下载
四.NPU任务注意事项
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的代码注释
if local_rank%8==0:
这里省略下载数据的代码...
f = open("/cache/download_input.txt", 'w')
f.close()
try:
if os.path.exists("/cache/download_input.txt"):
print("download_input succeed")
except Exception as e:
print("download_input failed")
while not os.path.exists("/cache/download_input.txt"):
time.sleep(1)
3, 公共库c2net高级用法:
主要使用的方法有以下几个:
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。