当前位置: 首页 > news >正文

如何从PyTorch迁移到MindSpore

前言

相信做AI开发的小伙伴,有一大半用的都是PyTorch.我之前也是一直用PyTorch做开发。
上个月参加了华为昇思25天打卡营,官方提供了充足的算力支持,几乎是不限时间不限量的那种,也让我体验了一把算力自由,好好感受了一番昇思框架。
昇思真的是很好用的国产AI框架,但是因为之前的开发都是基于PyTorch的,所以打卡营结束后花时间研究了一下如何从PyTorch迁移到昇思,整理成文章,既是帮自己做个归纳整理,也希望能帮到有类似需求的小伙伴。

关于昇思框架的介绍,就不多提了。如果是萌新小伙伴,可以戳链接了解
昇思MindSpore基本介绍

正文

迁移前的思考

为什么要从PyTorch迁移到MindSpore?

程序能跑,就不要动,相信这是多数程序员的心理。那为什么还要做迁移?我估计大概是出于两个原因:

  1. 学习新框架,更深的了解技术原理
  2. 用到了昇腾Ascend加速卡,MindSpore是天然支持Ascend的。

不管是什么原因,希望阅读此文能让您有所收获。

迁移工作量有多大?

MindSpore和PyTorch同为AI计算框架,很多设计是类似的,具体到API层面,也不会有太大差异。所以我认为,迁移工作量不算大。但是如果是复杂模型,考虑的问题比较多,可能工作量就大了。

我们回顾一下模型开发的大致过程:

  1. 准备数据集,数据预处理
  2. 模型组网
  3. 训练和调试
  4. 模型评估

在这个过程中的每一步,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…”,如下图
安装toolkit

安装完成后即可使用。
打开需要扫描的程序文件,任意位置处右键,打开菜单,选择“扫描本地文件”。如下图
右键点击
扫描后,就可以看到扫描结果,如下图
扫描结果

从上图可以看到,基本上扫描出了PyTorch和MindSpore一一对应的API.然后根据扫描结果,一个一个进行手动改写。
MindSpore Dev Toolkit不仅支持文件级扫描,还支持项目级扫描,更多使用详情可以参考MindSpore Dev Toolkit官方文档

对于小的项目,实现了API迁移,基本就完成了PyTorch到MindSpore的转换。如果是复杂项目,可能会遇到更多问题,比如有些PyTorch API在MindSpore中没有实现,有些参数类型不一致等等。这些问题就更加深入了,受限于篇幅,本文不做深入讨论了。后续作者将会推出更多文章,探讨更深层面的项目迁移,欢迎大家持续关注。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 求值(河南萌新2024)
  • (面试必看!)锁策略
  • python爬虫入门(五)之Re解析
  • Kafka 消费者启动后与服务器的交互流程
  • python实现提取视频帧的图片
  • vue3 主页面 跳转到子页面后 ,再次切换到主页面后 主页面及其它的所有页面 竟然不显示了的解决。
  • 企业做数据治理的意义是什么
  • 计算机网络必会面经
  • springboot业务层service开发全过程(以mybatis-plus为例)
  • EF访问PostgreSql,如何判断jsonb类型的数组是否包含某个数值
  • k8s学习--k8s集群部署kubesphere的详细过程
  • 2024.8.1(前端服务器的配置以及tomcat环境的配置)
  • 对象转化成base64-再转回对象
  • 人数管控系统助力图书馆实现精准客流统计分析
  • uniapp微信小程序按钮分享定制动态传参
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • Android Studio:GIT提交项目到远程仓库
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CAP 一致性协议及应用解析
  • ES10 特性的完整指南
  • Javascript编码规范
  • leetcode-27. Remove Element
  • Material Design
  • Shell编程
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 浮动相关
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 构建工具 - 收藏集 - 掘金
  • 诡异!React stopPropagation失灵
  • 检测对象或数组
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 正则学习笔记
  • AI算硅基生命吗,为什么?
  • UI设计初学者应该如何入门?
  • 关于Android全面屏虚拟导航栏的适配总结
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • (3)STL算法之搜索
  • (二)windows配置JDK环境
  • (过滤器)Filter和(监听器)listener
  • (六)c52学习之旅-独立按键
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (四)进入MySQL 【事务】
  • (算法)Travel Information Center
  • (未解决)macOS matplotlib 中文是方框
  • (循环依赖问题)学习spring的第九天
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)EOS中账户、钱包和密钥的关系
  • (转)memcache、redis缓存
  • (转)大道至简,职场上做人做事做管理
  • (转)重识new
  • ***详解账号泄露:全球约1亿用户已泄露
  • .a文件和.so文件