首页 飞桨菁英计划 帖子详情
【菁英计划】---实习日志
收藏
快速回复
飞桨菁英计划 文章实习就业 502 10
【菁英计划】---实习日志
收藏
快速回复
飞桨菁英计划 文章实习就业 502 10

记录自己在百度飞桨启航菁英计划期间的日常实习日志,总结一天当中完成了什么,遇到了什么样的难题,又是通过什么来解决的,收获了些什么。

0
收藏
回复
全部评论(10)
时间顺序
三岁
#2 回复于2021-10

飞桨飞桨飞桨飞桨飞桨飞桨飞桨飞桨飞桨飞桨!!!!!!!!!!!!!!!!!!

0
回复
SeaElm
#3 回复于2021-10

补记:2021年10月21日

上午先去百度大厦参加了破冰仪式,百度官方介绍此次活动期间我们所需要进行的实习任务和团队赛的赛制和奖励等等,中午一同前去酒店进行就餐(饭菜还不错~)。

下午,通过中午的简单熟悉,对身边参加的同学有了个初步的了解(好多大佬,来自全国的高校),通过综合个人赛等情况,我们自行进行了组队。每个小组5人,一共8个小组。等到晚上12点。。。正式发布了需要复现的论文。。。(没错,开始007了)

0
回复
SeaElm
#4 回复于2021-10
三岁 #2
飞桨飞桨飞桨飞桨飞桨飞桨飞桨飞桨飞桨飞桨!!!!!!!!!!!!!!!!!!

是的呀,哈哈,平台有免费的算力的可以让我们进行搞笑的跑项目!必须点赞!!!参加这种类似的活动也挺好的,通过论文复现实践,可以用来提高自己的代码能力,而且,在这期间算力给你提供足够~~~还能认识到好多来自各个学校各个方向的大佬,一起交流,超棒的!!!

0
回复
SeaElm
#5 回复于2021-10

补记:2021年10月22日

上午:通过小组成员在个人赛的优秀表现,成功第一个优先选择了论文!!!通过小组内成员商量讨论,选取了两篇分类领域的论文进行复现,两者的数据集都是cifar10(当然要选择小数据集了,哈哈哈哈)。选择好了论文之后,通过分工,我们决定两三进行分小组,我和其他两个小伙伴完成其中一篇,剩下两个小伙伴完成另外一篇,双线程,嘻嘻。

在此之后,我们首先要做的就是建立github仓库,将飞浆提供的参考论文下载到本地,然后我们在github当中新建组织,然后新建一个项目,命名为参考项目的paddle版本,然后首先将我们新建的项目用git clone命令克隆下来,然后下载好的原论文文件放入,然后push上去,这样我们就得到了一个初始版本。然后之后第一步就是先将torch版本的代码跑起来,期间通过ssl取消了一个全局的证书验证。然后代码成功的完成了训练,上午也差不多过去了。

下午:确认torch版本的无误之后,然后就是项目paddle版本的复现过程了。由于在个人赛期间不知道原来整个复现过程是要根据打卡点来进行的,总共分为模型结构对齐打卡,数据导入验证打卡,评估策略打卡,模型反向传播打卡,模型训练打卡等等。花了1-2小时的时候,阅读在个人赛期间错过的github教程文档(这就是眼瞎的后果。。。),然后磕磕巴巴的进行着模型的前向对齐(也就是模型结构的对齐,对相同的输入,前向结果完全一样了,就说明模型结构是完全一样的)。整个下午我也都在完成这么一个任务,当然,我们这个小分组有三个人,我的分工是进行这些对齐操作(数据导入的对齐不是我做的),另外一个同学是对代码框架进行阅读理解和使用远程服务器跑跑torch版本的项目(后面也做了数据导入对齐),另外一个同学在完成项目全局torch的API到paddleAPI的转换(优先的是模型这块儿,我要用)。

通过一个下午的摸索的话,我大概整理出前向对齐的一个基本步骤。

  1. 制作假数据,主要将同一数据转成torch.Tensor和paddle.Tensor的两个版本,保证模型输入的相同
  2. 生成模型,然后将两者模型参数设置成相同数据
  3. 将假数据载入模型,算出前向的输出值,然后通过reprod_log这个库导入一些函数,导出为npy文件,并且对两者的值进行比较,是否达到进度要求。

步骤虽然有了,但是提一些坑点和难点:

  1. 在制作假数据阶段,一定要知道模型输入的时候需要的数据形状是什么样的,数据类型是什么样的。小技巧就是可以在原版torch项目中,在train的阶段找到模型载入数据部分,然后在这之前一小步加上一个print数据shape的步骤,然后通过raise指令可以停留在那里,就可以明确知道模型的输入形式和类型了
  2. 对于一些需要生成的模型,通常也有一些需要输入的参数,我们也可以通过在1中我们提到的方法知道输入的参数的具体数值,但是一定要清楚,生成模型之后,一定要将torch的参数转换为paddle的参数版本,然后通过model_paddle.set_tate_dict(params_paddle)将paddle版本的数据导入paddle版本的模型。注意:在paddle版本的模型当中使用_mean代替了running_mean和_variance代替了running_var,可以通过replace('running_mean','_mean')这样的命令替换,部分全连接层也是需要进行转置的,也要注意,务必在参数转换阶段做到没有一个warning。

留在最后:github一定要好好学!简单用了用之后发现,管理项目真棒!!!多人协作的利器!!!

 

 

 

0
回复
三岁
#6 回复于2021-10
SeaElm #4
是的呀,哈哈,平台有免费的算力的可以让我们进行搞笑的跑项目!必须点赞!!!参加这种类似的活动也挺好的,通过论文复现实践,可以用来提高自己的代码能力,而且,在这期间算力给你提供足够~~~还能认识到好多来自各个学校各个方向的大佬,一起交流,超棒的!!!
展开

你文章里面字打错了改一下啊!!!!

0
回复
SeaElm
#7 回复于2021-10
三岁 #6
你文章里面字打错了改一下啊!!!!

好的好的,多谢!

 

0
回复
skywalk163
#8 回复于2021-10

写的真好! 加油! 

0
回复
贝德多
#9 回复于2021-10

飞桨

0
回复
SeaElm
#10 回复于2021-10

补记:2021年10月24日

正在写这个日志的我现在正在10月29日,这几天都没有更新,实在是不得不说,在通过这些天的复现当中,经常崩溃!时常整个人都被弄得疯疯癫癫的了。。。不过索性熬了过来了,正在写日志的我,一边本机跑着小batchsize的训练调试,一边等着数据集上传到aistudio上只用先用单卡测试,然后用脚本任务开始训练模型。今天基本攻克了这篇论文,我感谢很好!!!所以,我又回来了,哈哈哈哈哈。

回忆起24号那天,在我们的这个安排里面,这天是个lucky day的日子,也就是在一个当天提交成功,获得的团队赛积分double的日子(提交成功论文复现,可以获得团队赛积分)。在前面记得也说过,我们选择的前两篇是比较简单的论文,所以我们基本上完成的是比较有把握的,因为模型训练的速度太慢(一个epoch大概5分钟),所以基本从23号那时候开始(那时候论文基本已经复现成功了,基本就等训练了),我就开始着手研究这个分布式怎么弄了,平台的这个脚本任务是怎么弄了,诶,回想起23号晚上,真的是魔鬼!!!不得不吐槽,现阶段的脚本任务debug太难了,我从零开始学习太难了!在脚本任务里面我最常用的print已经不管用了,不能得到任何输出,没有终端命令,提交一次至少6-7分钟开始运行,运行结果还可能是编译错误。。。实在是真的很情绪崩溃!(当天研究到大概三点钟,早上8点多起来的)

但是24号那一天还是很不错的,还没有发新任务,所以我就愉快的在哪里研究那个怎么弄脚本任务4卡训练。经过不断地打磨汇合吧,大概得出的以下的一些坑点和收获,记录和分享一下吧。

  • 脚本任务当中,除了固定的输出文件夹,貌似不支持在别的文件夹当中新建文件夹和各类文件,所以在这些细节上面要注意保存
  • 貌似由于上面所提到的这个原因,脚本任务当中也不是支持用git命令克隆啥的,,,所以,我以后就不要想着偷懒了,乖乖的建目录树然后上传文件吧。。。
  • 脚本任务之所以叫脚本任务,是因为只能运行脚本文件,一般常用的是python、bash、unzip这种?
  • 在paddle里面设置分布式训练真的超级简单!(有可能是我操作错误。。。)大概分三步吧。第一步,初始化并行式运行环境;第二步,训练的batchsampler用distributedbatchsampler方式,测试的还是一样用普通的方式导入;第三步,模型用并行化方式转化一下。然后OK了,这就成功了。。。超级简单!
  • 这边也是一个要注意的小点儿~在写训练日志的时候,只写在0号GPU上的测试数据日志同样,模型的精度和准确率也以0号GPU上的为主
  • 然后最后提一下,能用多卡训练一定要用多卡!!!用多卡的时候,学习率也要相应的设置高一些(指导我们的人说4倍?我也不知道,我就设了不到2倍),通过多卡,不仅仅是速度,真的精度收敛也大大的提高了,强烈建议!

最后,给官方提个建议吧!!!脚本任务给个终端,给个本地服务器调试吧!!!要不这个调试成本太大了,真的还没有入门就开始要劝退了。。。

 

 

0
回复
十进制到二进制
#11 回复于2021-10

可以!很细致啊!

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户