一、实验环境:

Pytorch:1.8.1

Python:3.7

NPU:AICore

二、实验过程:

1.上传数据集“dogs-vs-cats-redux-kernels-edition”,解压得到train和test文件夹。实验过程如下:

加载数据集时遇到的问题,不能传输超出100M的数据集,但是猫狗数据集总共387M,因此采用远程Kaggle链接下载,结果如图所示:

image.png

image.png

解压后得到train和test文件夹:

image.png

2.训练之前下载Restnet50的预训练模型:

image.png

将Resnet的最后一个全连接层更换为2,代码如下:

image.png

模型结构:

image.png

在训练中导入NPU和AMP模块:

image.png

重新书写Dataset类,初始化时加载文件路径,完成数据增强操作,在__getitem__方法中实现根据索引index读取对应的数据和标签label,并规定dog是1,cat是0。

image.png

训练中将传统的计算模型output和loss语句放入AMP模块下,以自动完成数据的计算并在loss回传和参数更新中使用Ascend自带的scalar模块进行更新:

image.png

3.开始在训练中使用NPU:

image.png

4.训练结果

cke_28458.png

cke_24892.png

实验总结:

        总体实验较为简单,数据集处理较为繁琐,在书写Dataset和DataLoader时需要不断考虑NPU是否可以适配,后经过torch_npu的自动迁移,发现无需将cuda相关的函数以及字符修改,自动迁移可以进行自动更换,方便我们使用。其次需要将模型迁移到不同数据集时更换预训练的网络层,以避免输出与label不匹配。

        Ascend使用整体情况,发现模型在npu’和cpu之间转换时耗时太长,同样的实验环境,在gpu中可能需要更少时间,后续计划着重研究如何调用Ascend来优化模型训练时间。

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐