昇腾AI创新大赛昇思赛道参赛总结

原文及复现链接

比赛终于结束了,最后几天大家真的太卷了。我们团队选择复现的是第二批赛题里面的赛题五:利用MindSpore实现MIMO-UNET图像修复网络,代码已开源

https://github.com/feijunxiong/MIMO-UNET

代码参考了原作者的代码和论文

原论文链接

https://arxiv.org/abs/2108.05054

原文代码链接

https://github.com/chosj95/MIMO-UNet

复现过程

原作者代码整体结构不是很复杂,对着Pytorch与Mindspore API引射表 进行相应的API替换就可以了,注意调整一下参数的位置和Pytorch中的对应上。

做完API替换之后呢,我们又参考了Mindspore官网提供的一个ModelZoo,这是官方提供的一个经典模型的代码库,里面有一些经典模型的代码,可以照着里面的代码把整个流程搭建出来。

我们把代码写好并成功跑通之后,遇到了一个最大的问题就是模型不收敛,训练过程中损失值一直降不下来。回头又仔细检查了一遍代码,确认了不是代码的问题。造成这个问题的原因是昇腾NPU的混合精度,官方提供的昇腾Ascend 910目前大部分算子只支持到了Float16,而原代码是Float32精度下训练的。外加上图像恢复任务使用的学习率比较小,一般是从初始学习率1e-4下降到1e-6。这时候再使用Float16的精度训练,在进行梯度更新的时候就会频繁出现数值下溢的问题,从而导致模型不收敛。

我们看一下Float16支持的数据范围

可以看到Float16的小数部分只到了小数点后8位,再加上后期较小的学习率,很容易发生数值下溢出的问题。解决数值下溢的办法是使用LossScale,就是损失缩放,我们使用了动态损失缩放。

Mindspore官方提供了一个介绍 损失缩放原理,大家可以直接去看官方介绍,上面的讲的很清楚

LossScale主要思想是在计算损失值loss的时候,将loss扩大一定的倍数。由于链式法则的存在,梯度也会相应扩大,然后在优化器更新权重时再缩小相应的倍数,从而避免了数据下溢的情况又不影响计算结果。

关于这个LossScale的讲解,我再B站上也搜到过一个视频,有详细介绍,不得不说官方提供的一些支持还是很赞的。有兴趣的可以去看一下

还有一个比较大的麻烦就是,原论文里面使用了FFT2d算子,Mindspore1.6目前还没有这个算子我自己也是打算手动实现一下这个算子,但是在看了一些官方文档之后就放弃了。原因是Ascend 910 底层目前好像是不支持复数运算的。但是我看了Mindspore1.6的源码里面GPU版本的FFT算子是已经加上去了,目前还没有对外开放API,应该只能官方内部使用。后面更新的版本应该会加上去吧。FFT2d这算子没实现出来,也算是参加这个比赛留下的一个遗憾吧。

总结

      昇腾AI创新大赛2022是我们团队参加的第一场比赛,很开心也很荣幸能够获得“利用MindSpore实现MIMO-UNET图像修复网络”赛题的银奖。在这次比赛中,我们第一次接触到MindSpore框架,从最开始对框架的学习,到对模型的搭建,再到最后对精度的不断优化,在这短短3个月中我们遇到了很多挫折,也在解决问题中越挫越勇。在对赛题的精度角逐中,我们也见识到了很多优秀的对手,比赛给我们带来的无论是能力的提升还是见识的开拓,对于我们今后的科研、工作都将受益匪浅。对于今年的比赛结果,我们在欣喜之余,也有诸多遗憾,如果明年还有机会参赛,希望我们能实现自我突破,在广度上能积极探索多个赛题,在深度上能赢得一项金奖。

       同时也很感谢主办方辛苦筹备了这次比赛,我想对于任何一个行业相关者,无论是学生还是从业者,都能从一场比赛中收获许多。在参赛期间,无论大家是对赛题有任何的疑问,还是在平台使用方面遇到了任何困难,工作人员都及时帮助我们解决问题,比赛结果每周验收、及时更新,给了大家良好的参赛体验。其次,很感谢也很感动华为一直在努力研发属于我们自己的国产芯片、计算框架,建立属于我们的生态社区,致力于通过昇思MindSpore开源框架加速AI与行业融合,助力科研成果落地,推动人工智能产业应用规模化发展,引领新一轮人工智能产业未来。通过这次比赛,我们惊异于国产框架的进步如此之快,希望未来有更多的伙伴能加入社区,一起用昇思框架为开源生态建设贡献力量,也祝愿昇腾能早日慧及万里,让智能无所不及。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值