前言
相信做AI开发的小伙伴,有一大半用的都是PyTorch.我之前也是一直用PyTorch做开发。
上个月参加了华为昇思25天打卡营,官方提供了充足的算力支持,几乎是不限时间不限量的那种,也让我体验了一把算力自由,好好感受了一番昇思框架。
昇思真的是很好用的国产AI框架,但是因为之前的开发都是基于PyTorch的,所以打卡营结束后花时间研究了一下如何从PyTorch迁移到昇思,整理成文章,既是帮自己做个归纳整理,也希望能帮到有类似需求的小伙伴。
关于昇思框架的介绍,就不多提了。如果是萌新小伙伴,可以戳链接了解
昇思MindSpore基本介绍
正文
迁移前的思考
为什么要从PyTorch迁移到MindSpore?
程序能跑,就不要动,相信这是多数程序员的心理。那为什么还要做迁移?我估计大概是出于两个原因:
学习新框架,更深的了解技术原理用到了昇腾Ascend加速卡,MindSpore是天然支持Ascend的。不管是什么原因,希望阅读此文能让您有所收获。
迁移工作量有多大?
MindSpore和PyTorch同为AI计算框架,很多设计是类似的,具体到API层面,也不会有太大差异。所以我认为,迁移工作量不算大。但是如果是复杂模型,考虑的问题比较多,可能工作量就大了。
我们回顾一下模型开发的大致过程:
准备数据集,数据预处理模型组网训练和调试模型评估在这个过程中的每一步,Pytorch和MindSpore都会有一些差异性的API.只要找到这些差异性的API,全部改写成MindSpore中的API,基本就实现了初步迁移。
我们可以手动实现API迁移,也可以通过MindSpore提供的API扫描工具,识别差异性API,这样更加高效。
API扫描
MindSpore提供的API扫描工具叫MindSpore Dev Toolkit,是一个IDE插件,可用在PyCharm和VS CODE上。
这里以VS CODE为例。MindSpore Dev Toolkit没有上架到插件市场,需要自己下载安装包安装。
MindSpore Dev Toolkit安装包下载链接
下载后,点击VS CODE左侧第五个按钮“Extensions”,点击右上角三个点,再点击“Install from VSIX…”,如下图
安装完成后即可使用。
打开需要扫描的程序文件,任意位置处右键,打开菜单,选择“扫描本地文件”。如下图
扫描后,就可以看到扫描结果,如下图
从上图可以看到,基本上扫描出了PyTorch和MindSpore一一对应的API.然后根据扫描结果,一个一个进行手动改写。
MindSpore Dev Toolkit不仅支持文件级扫描,还支持项目级扫描,更多使用详情可以参考MindSpore Dev Toolkit官方文档
对于小的项目,实现了API迁移,基本就完成了PyTorch到MindSpore的转换。如果是复杂项目,可能会遇到更多问题,比如有些PyTorch API在MindSpore中没有实现,有些参数类型不一致等等。这些问题就更加深入了,受限于篇幅,本文不做深入讨论了。后续作者将会推出更多文章,探讨更深层面的项目迁移,欢迎大家持续关注。