mindspore脚本迁移经历

  • 使用mindspore进行脚本迁移经历
    • 00、题记
    • 01、开干
      • 前期
      • 中期
      • 后期
    • 02、总结

使用mindspore进行脚本迁移经历

00、题记

   自2021年开年启动,我们老师便说明要跟华为那边合作一起做模型迁移工作。项目主要负责人刘威师兄当时选定啦大概10个有开源代码的模型,然后几经辗转反侧最终敲定4个模型(分别是PSPnet、ESRGAN、DBPN、DAM)。就这样,我们实验室就开始了与华为mindspore的邂逅之旅。

01、开干

前期

  2021年03月,哈尔滨工程大学开学,我们终于回到了学习。项目首先是由研二(当时研二、现在研三)的师兄们负责(刘威主导一挑三、何志豪负责DBPN),4月份之前也就刘威师兄一个人找找开源代码,改写了几个模型部分内容。

  时间进入4月,深圳华为那边组织开发者前去开发。很遗憾,我们研一当时没有人去,主要是研二派了三名同学(刘威、何志豪、唐宏伟)过去,为期大概一个月。等到他们回来,四个模型的主要开发工作已经完成,但是还是达不到要交付的效果,所以考虑他们毕业,老师讲这活就派给了我们研一的同学顶上去。我们研一接手过来的时候,项目完成情况:第一、PSPnet的代码开发完成,威哥自己这个代码写了很多算子,可是效果差很远。第二、ESRGAN、威哥在鹏程实验室也开发了部分,但是没有完工。第三、DAM模型,具体好像没做,后来交给我们这一届的廖神和子怡负责。第四、志豪师兄(下面就以hzh代替)完成了DBPN工作。这个我最清楚,hzh交给我的是完全按照作者开源出来的pytorch改写的。在华为鹏程实验室时,一致遇到的问题是:训练几个epoch就loss就出现溢出,然后就这样天天在华为鹏程实验室找bug,回来了也一直找。

  5月中旬,按照项目开发进度,老师信心满满,承诺华为会交付PSPnet这个项目,其他几个可能有些问题,需要调试。这时候华为co.也派出工程师来帮助我们解决问题,还是原来负责人(神奇的海螺劢哥、思佳老师)。劢哥驻扎我们535实验室,思佳老师则分配到张可佳老师的实验室。为期一个周,劢哥和思佳老师一直帮助我们两个实验室找问题。囿于我们对mindspore不太了解,因此我们的项目未能推进,老师答应交付的PSPnet也耽搁下了没能交付。

  5月23后,我们研一的同学完成的《计算理论》考试,和研二师兄们交接完项目开发工作。这几个模型就彻底到我们手上了。我(严治政)负责DBPN、琳哥(谭琳)负责PSPnet、玉林(丁玉林)和辉哥(张家辉)负责ESRGAN、王子怡和廖神负责DAM模型,吭哧吭哧的这几个模型就这样上路了。

中期

  6月份,我们这时候已经熟悉了代码和框架内容,然后每天就是盲目的找问题,有时候就是看那个位置的代码不爽就测一测结果。华为工程师给的建议,就是固定把pytorch和mindspore的输入,然后讲pytorch的参数导出来,加载到mindspore框架中,看看结果。这时候,我们的情况就是“拿着锤子,看啥都像是钉子”,一筹莫展,推进不下去了。

  7月份中旬了,哈工程放假了。老师吩咐我们说项目不能停,得继续推进,安排我们采取轮休制:某批人休息前半个月,某批人休息后半个月。此时,谭琳、张家辉、万太英、王子怡四个人解放回家了,有的回家搞模型,有的回家搞什么我就不知道了。我和玉林还有廖神留在学校。我每天还是接着搞模型,某天得知消息,看到SRGAN此时在github上开源出来了,想着既然按照师兄传下来的代码搞不下去了,直接推翻,自己参(抄)考(袭)来一份呗,就这样开始了我自己重新开发的过程,整了两天,脚本开发过程完毕。上机测试(再次之前,自己本机装个cpu版本的mindspore)保证语法没问题,然后用鹏程提供的AScend910卡跑。可想而知,我改写后的代码还是有写问题的,诸如有些代码写法(如列表产生式)mindspore不支持,我在那测试半天总是觉得写得没毛病,可总是报错,所以搞得懵逼。后来,请教刘威师兄,才指明我的问题(发现我对mindspore无知了吧! 其实这文档我早就看过,可是用的时候却没发现问题,mindspore动态图和静态图说明参考这个链接https://www.mindspore.cn/tutorials/zh-CN/master/intermediate/pynative_mode_and_graph_mode.html)。等到我用pdb一个个把bug调试完成,train一下网络,得不到想要的效果,我心伤悲!!!

  8月份,每天还是怼着几个脚本看着,每天看看有啥问题。tmd,人都要疯了,自己想着这么一个简单的网络,怎么总是出不来效果。期间,受到三个启发:第一、徐义宝见我调试无果,建议我把计算的每一步骤打印出来,对比两个代码(pytorch和midnspore)的结果看看是否一样。无奈之举,我只好采用土办法了,一步步测试,同样的输入图片喂给网络(从数据处理到网络的输入)检查一遍,发现输入一致(好,ok,数据读取和处理的没问题),这一步要注意把程序中的随机化去掉。一轮检查下来后,数据处理部分的问题排除,剩下就是网络的问题了。进一步缩小检查范围 ,再也不是“拿着锤子看哪都像钉子”。第二个是看到重庆大学吕昱峰讲的mindspore迁移指南(https://www.bilibili.com/video/BV1nQ4y12789?from=search&seid=12537077244129943485&spm_id_from=333.337.0.0),B站UP主老哥的投放视频如何阅读nlp论文,我曾经还看过(嘿嘿,真巧合)。看完峰哥讲的指南,我才正了八经的溯源分析问题,把整个模型的计算图画下来(白纸黑字、清清爽爽、对模型进一步理解)。第三是保研进入我们实验室的王同礼同学(积极性十分充足,提前主动要求暑假进实验室干活,一座一整天,午饭也不吃。被我安排着威哥的左手边,笑称他和琳哥是威哥的左膀右臂)。这个月,安排他跑pytorch的DBPNS代码结果,看看究竟能不能达到论文效果。我们在跑的过程,还真发现不少问题,有些情况过去被我们忽视了,比如他代码中的有些参数设置的是True,其实应该设置成False的。而这些都只能在github上的issue才能找到(感谢王总发现了这个问题,不然我都忽视了这个)。

后期

  已是9月份了,开学了。在外的也都回学校了,琳哥pspnet被誉为“最有希望的交付的网络”一拖再拖,送走了两位负责我们这边的老师(陈劢和思佳老师,哈哈哈,两位老师被我们熬走了)。这次,带我们的老师是周莉莉老师。莉莉老师接手我们,先弄了一个在线文档调查我们进展情况,遇到的问题,完成度。填完表格,神奇的发现,就谭琳pspnet写了个完成度60%,其他的都是20%(大家谦虚的一批,谎报军情)。这期间我向老师(老板)抱怨搞不了,其实我们早就不想干了(在5月-7月份之间,每次威哥计划摊牌,结果每次都落空,被老师劝导再干干,再看看,就这样威哥妥协了、妥协了!!!)。

  紧接着,莉莉老师安排的每周会议,开始的几次线上会议是周三的晚上开,后来因张可佳老师那边有人要上课,会议时间改在周二的晚上7:30。在数次的开会过程中,某次我最后一个上去汇报目前工作及困难,最后我说对待这个真的是“一筹莫展”。嘿嘿,这次会议我留下来了,老师帮我查看代码(有赵婷老师和周莉莉老师)一起根据我的代码看看问题(不得不说哈,会哭的孩子有奶吃),这次检查代码过程中,赵婷老师提了两个建议第一、在优化器中加上loss_scale;第二、保存图片的时候加上梯度裁剪。散会后,抓紧时间改了一下啊,train了200个epoch,效果出来了,比之前生成的图片要好很多、很多。紧接着,第2-3天,又发现一个问题,优化器中传入的有个参数不对,在计算milestone过程,应该按照每个step来算,我当前代码按照epoch来算的,这个还是张可佳老师手下的明哥(张锡明)给我指出来的。几个bug修改完成,开始训练,ok,能够正常训练,得到图片正常。这时候最大的问题就是psnr一直对不上原始论文,国庆期间调试GAN网络(自己实验室机器太废物2080ti+11G的显存跑不动),向周莉莉老师借来了8卡的3090 24G的(华为真有阔绰啊)。终于有机器了,我和琳哥指着莉莉老师的机器跑出结果,尼玛,用这个机器真tm饭,要经过两个跳板机才能用,开始我传个zip文章3.9G的传导jump上,传了一天,到了98%竟然给我停住了,报error(人都要崩溃了,无数了fuck)。后来,不得不联系莉莉老师,让她帮忙看看原因,莉莉老师说空间不够,删了些数据,让我再次传上次,终于成功了,太不容易了。 10月5号,华为的机器上电了,能够正常跑模型了,三下五除二赶紧跑模型呗,让已有的代码train起来。期间,又发现些问题,为什么pytorch的代码和我的脚本的psnr都不对劲,后来看看作者初始的caffe代码,神奇的发现,他的caffe代码把图片格式转成rgb,然后再取其中Y通道计算psnr。而在他开源出来的pytorch代码竟然是直接计算psnr(fuck)。了解后,赶紧做个实验,用两张同样的图片喂给python程序和matlab程序,算出来的竟然有些差异,并不一样,最后我改正这个计算psnr的bug,硬train一发,得到psnr是31.9+,比论文32.4差了一些。

  10月底的工作,就剩下调通GAN网络了,自己写的几个脚本一直卡在先做预训练、再加载模型参数、然后用GAN网络方式训练最终训练几个epoch的loss出现固定情况。期间,华为深圳工程师马宁老师在welink也联系我,问我出现了什么,我按实说明,并把代码和出现情况上传众智平台,然后他说有时间就帮我看看。在这过程中,我试过了对判别器加梯度裁剪、参考cyclegan等几种方法改写了训练方式都没有奏效。无奈,只能搁置,然后某天上午在图书馆看mindspore官网,发现有个dcgan的例子,赶紧看了看,立马去gitee上的modelzoo找了一下都没找到具体项目,只能参考这个例子了。下午,去实验室,就开始弄代码,抄着dcgan的训练方式,直接改写几个类,一切弄完开始训练。总共跑了两个程序(第一个是按照开源的参数来跑;第二个按照论文给出的region2的最好效果来跑),这一版生成的图片有改进,比直接训练DBPN网络生成的图片要清楚一些,但是图片效果不好。11月2日晚,莉莉老师联系了几个华为老师一起检查代码,没发现代码的bug,有位老师提出给优化器加个weight_decay,开完会后我变里改正,改完就放在那训练了。

02、总结

  华为的模型迁移项目搞了几个月了,我深刻的被这玩意折磨。私下,兄弟们吐槽这玩意不好用(就是),后来啊,还是老老实实的看看文档,找问题做demo测试。

  在迁移的过程中,最大的好处就是modelzoo里面有很多模型可以抄袭。我抄了pix2pix的处理数据代码,抄了srgan 的整个训练过程、抄了bert的梯度裁剪、抄了官网提供的dcgan代码案例。有这么好的资源,为啥不用呢?良心mindspore(虽暂时现在没有被广泛使用)。嘿嘿,我推荐给下一届让他们看看mindspore,感觉我像是坑他们一样,不学不看letyougo,反正大家出去都是抓娃娃(目前实验室抓的好的,李阳师兄去shopee能给40w+15的股票,我的天啊!望尘莫及…)、西啪啪,祝大家安好。

  马上啊,丁玉林和辉哥的ESRGAN也快出来了、琳哥的PSPnet在交付中(据说他正在写交付文档)、DAM模型情况未知,这一过程快要结束了…………

【mindspore】mindspore脚本迁移经历相关推荐

  1. 使用MindStudio进行MindSpore训练脚本开发

    配套视频链接:https://b23.tv/BV1jT4y167th 一.MindSpore环境搭建和配置介绍 1.MindSpore简介 MindSpore是一个全场景深度学习框架,旨在实现易开发. ...

  2. 技术干货|昇思MindSpore NLP模型迁移之Bert模型—文本匹配任务(二):训练和评估

    前言: 我将会介绍如何使用MindSpore的Bert模型来做下游任务:lcqmc的文本匹配任务. 主机环境: 系统:ubuntu18 GPU:3090 MindSpore版本:1.3 数据集:lcq ...

  3. 技术干货|昇思MindSpore NLP模型迁移之Roberta ——情感分析任务

    熟悉 BERT 模型的小伙伴对于 Roberta 模型肯定不陌生了.Roberta 模型在 BERT 模型的基础上进行了一定的改进,主要改进点有以下几个部分: 1. 训练语料:BERT只使用 16 G ...

  4. python脚本迁移数据库_Django 数据库迁移脚本

    django修改模型后更新数据库 当django改变模型过后,需要重新更新数据库,更新方法如下 比如app的名字是rango python manage.py makemigrations rango ...

  5. python脚本迁移数据库_Python迁移MySQL数据到MongoDB脚本

    MongoDB是一个文档数据库,在存储小文件方面存在天然优势.随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录. 一.场景:线上MySQL数据库某表迁移到Mong ...

  6. jpa mysql脚本迁移_Spring Boot 数据库迁移:概述

    原标题:Spring Boot 数据库迁移:概述 前言: 在这里的数据库迁移主要是对数据库结构版本管理和迁移. 一.为什么需要数据库迁移工具? 那在没有使用迁移工具的时候,我们会碰到什么呢? (1)多 ...

  7. 一次使用 Go 语言编写脚本的经历

    本文介绍了我如何尝试使用 Go 语言进行脚本编程的经历.文中我将讨论 Go 脚本的必要性,我们预期的表现以及可能的实现方式.在讨论过程中,我讲深入探讨脚本.Shell 和 Shebang.最终,我们将 ...

  8. 迁移selenium脚本迁移后出现unknown error: DevToolsActivePort file doesn‘t exis

    迁移selenium脚本到其他服务器执行时出现以下错误: File "/data/app/jenkins/workspace/check-page/.venv/lib/python3.7/s ...

  9. 一段三次分拆的蚂蚁搬家式MySQL迁移经历

    趁机房搬迁的机会,打算做一次业务整合.现有的架构是在2010年规划并运营起来的,随着时间的推移,项目也越来越多.打开Nginx配置文件,有四十多行Include包含存在,每一个包含就是一个项目(有些是 ...

最新文章

  1. Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性
  2. 树莓派迅雷远程下载 | 树莓派小无相系列
  3. ServiceModel 元数据实用工具 (Svcutil.exe)
  4. 深度linux win7分区,怎么安装Win7深度操作系统?
  5. 信息摘要算法之四:SHA512算法分析与实现
  6. LeetCode MySQL刷题——day2
  7. 瞧一瞧,看一看,微信应用号(小程序)
  8. 我的Python之路:浏览器模拟
  9. xp大容量u盘补丁_大容量硬盘补丁
  10. 学习笔记(1):2020软考数据库系统工程师-基础知识培训视频-计算机系统--体系结构概述...
  11. ACM算法笔记(一)模拟算法【详细解析】
  12. 无名小站超雅虎奇摩成台湾第一大网站
  13. 六级单词词汇表(有注音)
  14. html中空格符号以及空格字符实体的总结
  15. java+selenium——Navigate命令
  16. linux 服务器访问限制,Linux中限制用户访问权限的3种方法
  17. 年轻人,你活着不是为了观察K线做布朗运动 ——从“全要素参与分配理论”谈股票市场的赚钱陷阱
  18. 转载:深入学习java源码之Callable.call()与Future.get()
  19. 因计算机丢失d3dx9-30,Win10玩仙剑5提示“丢失d3dx9_30.dll”怎么解决?
  20. uoni扫地机器人好用吗_由利Uoni扫地机器人V980 MAX好用吗?详细测评告诉你

热门文章

  1. view.setAlpha(float alpha)与view.getBackground().setAlpha(int alpha)的区别
  2. 一步一步认识用户画像
  3. 2022-2028全球碳纤维山地自行车行业调研及趋势分析报告
  4. 获取文件哈希值_关于哈希的一切,都在这里了
  5. 2020年的网站SEO最新实操方法!5年老站长经验之谈!
  6. 人行征信第三张报告的信息提取
  7. 新站之网站优化方案[优化]
  8. (申请加精)你所不知道的奶粉秘密(2)------转自天涯
  9. 多个点坐标存储在str中,如何转换成LineString?
  10. 手握千亿美金的孙正义,这次真的不能如愿了