使用X2mindspore迁移tensorflow训练脚本_哔哩哔哩_bilibili
视频教程可以观看上面链接哦
1 任务介绍
X2MindSpore是一款脚本转换工具,使用X2MindSpore可以快速实现迁移TensorFlow框架的训练/测试脚本到MindSpore框架下。
脚本转换工具会根据适配规则,对用户脚本进行转换,大幅度提高了脚本迁移速度,降低了开发者的工作量。但是需要注意的是,除使用官网模型支持列表(https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/msug/msug_000109.html)的脚本转换成功后可直接运行外,其他脚本的转换结果仅供参考,仍需用户根据实际情况做少量适配。
目前,此脚本转换工具支持Pytorch框架和TensorFlow2.X框架的训练脚本转换。仅能支持所列模型中的工程转换后训练成功且收敛,对最终精度和性能暂不做保证。此脚本转换工具转换后的训练工程支持在MindSpore1.6及更新版本上运行。
2 环境搭建和配置
2.1 MindStudio简介及安装
MindStudio提供了AI开发所需的一站式开发环境,提供图形化开发界面,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。同时还支持网络移植、优化和分析等功能。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助用户在一个工具上就能高效便捷地完成AI应用开发。同时,MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。
MindStudio支持Windows和Linux两大主流平台。可以根据需要,进行选择下载安装包,具体安装流程,可以参考官网。本图文教程,将基于Windows系统进行X2MindSpore使用介绍。
MindStudio软件包下载地址:https://www.hiascend.com/software/mindstudio/download
Windows平台下载安装流程: https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg/instg_000018.html
Linux平台下载安装流程: https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg/instg_000007.html
2.2 CANN简介及安装
CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。
用户根据实际使用需要,下载对应的CANN软件包,具体安装流程可以参考官网的用户手册。
CANN软件包下载地址https://www.hiascend.com/software/cann/community
CANN安装流程:https://www.hiascend.com/document/detail/zh/canncommercial/51RC1/envdeployment/instg
2.3 本地Python安装和配置
安装Python3.x及以上版本,并检查环境,本图文教程以Python3.7.5为例。
依次安装两个包:
pip3 install pandas #pandas版本号需大于或等于1.2.4
pip3 install libcst #libcst版本号需小于或等于0.3.23
配置完上述环境,使用MindStudio进行脚本迁移的准备工作就已经完成了,下面将具体介绍如何进行脚本转换。
3 选择迁移脚本和创建工程
除使用官网模型支持列表(https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/msug/msug_000109.html)的脚本转换成功后可直接运行外,其他脚本的转换结果仅供参考,仍需用户根据实际情况做少量适配。
其他的一些使用限制:
本教程选择迁移Basic_CNNs_TensorFlow2脚本为例进行说明。下载原始工程训练代码(https://github.com/YunYang1994/TensorFlow2.0-Examples/tree/master/5-Image_Segmentation/FCN),用MindStudio打开。
项目结构如下所示,其中split_dataset.py是将数据划分成训练集、验证集和测试集的脚本,train.py是所需要迁移的训练和测试脚本。
配置CANN环境。首先,点击菜单栏的“File>Settings”按钮,如下图所示:
选择如下图所示的“Appearance & Behavior>System Settings>CANN”选项,点击“Change CANN”按钮。
出现如下界面:
首先配置远程连接,点击红框中“+”号按钮,出现如下界面:
点击上面界面红框中的“+”号按钮,出现以下界面:
下面,是一些参数说明:
参数 |
说明 |
Host |
远程服务器IP地址 |
Port |
远程服务器端口号 |
Username |
用户名 |
Authentication type |
验证类型 |
Password |
密码 |
Key pair |
密钥对 |
完成填写好,如下所示,分别是使用密码连接和密钥对连接:
点击“Test Connection”按钮,测试连通性,如果出现如下界面,点击“OK”按钮。
最后显示下图,表示远程连接可用:
一路点击“OK”按钮,完成远程连接配置,如下图所示,然后配置CANN开发工具路径,点击红框中的文件夹图标。
例如:我们这里的路径为“usr/local/Ascend/ascend-toolkit/5.1.RC1”。
最后点“Finish”按钮,等待同步完成,即可完成远程的CANN配置工作。
4脚本迁移
根据官网教程,迁移FCN系列脚本时,需要按照官网备注进行一定修改。同理,如果选择迁移其他支持列表里的脚本,可以查阅官网手册(https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/msug/msug_000109.html.
html),安装官网中的“备注”进行修改。
完成对应修改后,在最上面菜单栏中点击“Ascend”按钮,将项目变成Ascend项目。
出现参数设置框,并进行如下配置。
点击“OK”按钮,即可完成项目转换。
下面,介绍如何使用X2MindSpore,有三种方式:
第一种:
在工具栏选择“Ascend > Framework Trans > X2MindSpore”,如下图所示。
第二种:
右键单击工程目录中的文件夹,选择“X2MindSpore”,如下图所示:
第三种:
单击工具栏中
图标,如下所示:
通过三种方式,点击之后,会跳出配置界面,进行相关配置,如下所示。
下面,是一些参数说明:
参数 |
说明 |
Framework |
原脚本框架,支持Pytorch和TensorFlow |
Input Path |
原脚本所在目录 |
Output Path |
转换结果的保存目录,注意“Output Path”不能在“Input Path”内 |
Distributed |
可选,多卡运行 |
ModelArts |
可选,需要配置好映射路径 |
最后,点击“Transplant”按钮,即可开始脚本迁移。显示信息如下,表示成功完成脚本迁移。
完成后,Output Path输出目录下会生成转换后的Basic_CNNs_TensorFlow2-master_x2ms脚本文件、x2ms_adapter适配层文件、supported_api.csv支持算子列表文件和unsupported_api.csv不支持算子列表文件。目录如下:
├── Basic_CNNs_TensorFlow2-master_x2ms // 脚本转换结果输出目录。
│ ├── 转换后的脚本文件 // 与转换前的脚本文件目录结构一致
│ ├── x2ms_adapter // 适配层文件
│ ├── unsupported_api.csv // 不支持API列表文件。
│ ├── supported_api.csv // 支持API列表文件。
│ ├── x2mindspore.log // 转换日志,日志文件限制大小为1M,若超过限制将分多个文件进行存储,最多不会超过10个。
点击查看supported_api.csv支持算子列表文件和unsupported_api.csv不支持算子列表文件。
supported_api.csv支持算子列表文件如下所示:
unsupported_api.csv不支持的算子列表文件如下所示:
如果遇到其他算子不支持的情况,有以下几种方式可以帮助到你,了解MindSpore中的对应算子解决方案:
我们利用迁移的脚本进行训练,首先按照readme文档中设置数据,在original dataset放置数据如图左所示,并使用split_dataset.py脚本将数据集分成训练集、验证集和测试集,如图右所示。
参数设置如下所示,下图中的红框中表示我们所设置的数据集路径、batch_size为8,使用MobileNet_V1模型,当然,其他的可以根据具体需求进行修改。
点击下图绿色箭头,开始运行脚本:
出现报错,如下所示:
显示并没有train.tfrecord文件,根据readme文档提示,需要运行to_tfrecord.py创建,但是根据不支持算子列表,可以发现tensorflow.train.Feature等算子不支持迁移,所以针对这一点,我们使用其他方法加载数据。
查阅MindSpore文档进行学习,创建数据类,并使用MindSpore的GeneratorDataset方法创建数据集并使用create_dict_iterator创建data_loder。如如下所示:
这样加载数据,再次运行脚本,显示可以进行正常训练和推理评估,模型也被对应保存,如下所示:
其中,epoch-{}.ckpt保存的是每一个epoch的训练后的模型。
5可能会遇到的问题
问题1:
执行转换后的脚本时提示以下pillow和numpy版本不符合信息。
解决方法:旧版本的pillow和numpy存在安全漏洞,漏洞详情请参见https://mindspore.cn/security和https://nvd.nist.gov/vuln/detail/CVE-2021-41496。用户需升级pillow版本至8.2.0或以上,numpy升级至1.22.0或以上。
问题2:
当选择变成Ascend项目时,报获得帮助信息出错,如下图:
此时可以到用户根目录下的.mindstudio\huawei\adk\remote\5.1.T202\toolkit\tools\x2mindspore\x2ms\script\目录中,运行python x2mindspore.py –help查看具体报错。可能的原因是没有找到依赖包,如:
此时可以将python目录下的xxx\Library\添加到系统变量中,可以解决类似的问题。
问题3:
保存Checkpoint文件后,对该文件进行操作时,显示该文件不存在。
解决方案:MindSpore中load_checkpoint和save_checkpoint接口仅支“.ckpt”后缀的文件,当文件名为非“.ckpt”后缀时,会自动加上“.ckpt”的后缀,因此实际保存的文件名可能和传入的文件名不一致,此时需要用户将传入文件名末尾加上“.ckpt”。
问题4:
数据处理时出现如下错误。
解决方法:在MindSpore中,数据处理过程中需要保持中间处理结果为numpy array,且数据处理过程中不建议与MindSpore网络计算的算子混合使用。请检查数据处理中是否包含转换为Tensor和使用MindSpore网络算子的操作,若有,请使用numpy中的等效操作替换。
如果遇到其他问题,也可以在昇腾社区中的昇腾论坛(https://www.huaweicloud.com/s/JU1pbmRTdHVkaW_mkK3lu7ol/t_60_p_1)里进行查询或者提问,会有华为内部技术人员对其进行解答,帮助你更好使用MindStudio。