计算资源有限的人如何在Deep Learning领域成长?

链接:https://www.zhihu.com/question/304263105

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

作者:Lyken
https://www.zhihu.com/question/304263105/answer/543632394

写申请材料之余答一波,一言概之,资源不够时,我的策略就是去弄到更多计算资源

最早在浙大的时候,基本只有手头一台 MacBook,跑跑 SVM 和 SIFT 就是极限,那个时候 Deep Learning 在国内还不被重视,本想找个实验室去套波资源,但在紫金港整体以 Graphics 为主的氛围下,加之粥少僧多,本科生是基本拿不到资源的。后来来到了加拿大,厚脸皮套到一位做 CV + CG 的老师。正逢他开始探索新方向,大手一挥就买了 8 张 Titan 回来。感谢当时带我的师兄,我终于有机会真正入坑 CNN。

当时的研究基本是在 Caffe model zoo 上 finetune,实验室这点小资源根本不够训练 imagenet 这种庞然大物。中间有很长一段时间没有进展,后来觉得不行,感觉这种有 idea 无处尝试的感觉很难受,于是就在知乎上套了一波@Naiyan Wang,得到了去图森加州分部实习机会。在图森,显卡再也不是瓶颈,我也第一次见识到企业做 deep learning 的方式。实习期间认识了很多优秀的同事,实验了很多想法,学到了很多 lab 里学不到的知识,感觉自己终于初窥门径。

结束图森实习后,脑中的灵感一个接一个,同时也深刻意识到计算资源的重要性。可实验室里显卡有限,而且和学长学姐协调。幸好图森给的工资剩下不少,于是一咬牙,就自己攒了显卡和机器。这是个肉疼的选择,但事实证明这也是一个非常正确的选择。有了稳定充足的计算资源后,整个科研周期大大加快,很顺利的发出了几篇我自己满意的工作。

去年申请行情水涨船高,不幸申请失败了,遂给商汤还有麻省理工的一位新晋教授递交了简历,表明实习愿望。实际证明,这又是两个非常正确的选择。在商汤,利用充裕的计算资源尝试了很多新想法来解决现在工业界的痛点。在麻省理工,烧了老板十几万刀的 cloud credits 来做一些之前完全没有机会做的 idea。终于,可以厚脸皮的说自己在 deep learning 这块已经略有小成了。

回观自己一路,基本就是 找资源 ->  提升自己 -> 找更多的资源 这样一个螺旋上升的过程。至于计算资源有限时如何冷启动?找实习应该是个不错的选择。

作者:Wendell
https://www.zhihu.com/question/304263105/answer/543461352

现在Google Colab上有免费的TPU啊,知道TPU有多快么?常规训练一个Resnet50只要10个小时,和8卡V100的速度相当。

所以你需要的只是一把梯子和一张信用卡(用于Google Cloud账号)

当然Colab的TPU有些坑要爬,说几个最关键的,以免大家浪费时间:

1. 除了Mnist之类可以缓存的小数据集,必须用Google Cloud Storage,否则IO会是瓶颈

2. 有些ops被硬件限制了,自定义ops肯定都不行了,因为backend不是CUDA,Tensorflow自己的很多API也不能用,比如tf.images里头的很多API,所以ROI Align之类的ops都无法实现,也就是Two stages的物体检测算法都无法实现(官方也只给出了retinanet的实现)

3. Notebook经常断线,我准备写个浏览器脚本来实现自动重连。

4. Tensorflow

补充一下:要是觉得Colab不好用,直接花钱用TPU也不贵,抢占式的TPUV2 8核,一个小时只要1.35美元,性价比比GPU高太多了,想跑超大规模的模型,还可以选择TPUV3,TPUV2 32核、 128核、256核。。。

20190102更新:发现最近官方复现了Mask RCNN,使用高级API实现了ROI Align。

另外说明一下为什么必须用GCS:TPU的运作方式和GPU不同,GPU是直接挂载到VM上,然后你就可以像本机使用GPU一样用就好了,TPU是有TPU Server的,VM并不能直接访问TPU,而是在VM上编译好XLA,然后丢给TPU Server,所有的数据读取、预处理、和TPU通讯等,都是在TPU Server上运行,所以你如果把数据放在VM上,IO必然是瓶颈。这也是为什么不管你跑多大的模型,Colab配给你的VM性能都是够用的。

作者:齐国君
https://www.zhihu.com/question/304263105/answer/560291142

在校学生就想办法进有"真正"做深度学习实力的实验室;也工作的人就想办法跳到这方面的岗位上。

这些不是重点,重点是你怎么学、怎么提高对问题和模型的理解?这里的误区是“计算资源有限”。即便在大公司和大实验室,计算资源都不是无限供应的。很可能的情况是你要和其他组其他同学和同事去抢。

所以关键是,你怎么高效地使用有限的计算资源。很多同学容易反的错误是一上来就从Github上下载个模型来跑。跑着跑着就变成了调参,最后模型的性能是上去了,但啥也没学会。

正确的姿势是要搞清楚这个模型或方法的关键是什么?和其他方法比有什么优点,解决了什么问题?但更重要的是搞清楚它不能解决什么问题

研究一个模型或者方法的过程,往往最重要的是找到它不能做什么。一个模型或者方法不可能什么问题都解决的(参考no free lunch)。用这个模型的过程,其实就是要发现这点;搞清楚了这点,就知道了它的适用边界,就能更有效的在有限计算资源下高效的使用它,而不是把资源浪费到它不适应的情形和数据上。

所以高效使用有限计算资源的方法就是反着用,用有限资源去找到模型的适用范围的边界。这个比重复的去在已经反复被证明适用的范围(数据、场景)上浪费有限资源获得的提高要大得多也快得多。

更进一步,如果有办法改进这个模型,并把它的适用边界进一步扩展,那么恭喜你,你就真正掌握了这个模型了。

作者:小赖sqLai
https://www.zhihu.com/question/304263105/answer/543224003

这个我相对比较有经验,硕士期间一直都是一张1070单打独斗来着。

主要就是避免和大牛们抢过于热门的领域。尽量选择训练集20w以内的领域,相关sota中使用的模型尽量不超过resnet50。基本单卡是够用的。

尽量避免最热门的那几个领域,分类检测分割这种数据集比较大很难做。根据经验,一般通用领域的数据集都比较大,而对应的细粒度领域里,数据集就很小了,比如vehicle detection,pedestrian detection之于通用检测,face parsing,clothing parsing,salience等之于segmentation。

如果连显卡都没有,还可以做reranking,indexing,feature fusion,slam等等更偏向于用传统方法去解决的领域。

其实大家最需要的是对于某个领域的调参直觉,这种时候,就需要自己写脚本,充分利用时间,比如每天睡觉之前,预估一下第二天到实验室大概够跑多少组实验,脚本跑起来,基本把日志和对应的超参都设好。第二天就可以再仔细分析了。合理数量的实验,加比较充足的思考,还是可以学会很多调参经验的。

再进一步的话,就是多看论文,我一直觉得论文其实是最最重要的,闲的没事干就看论文,跑实验过程中就看论文,充分利用所有时间刷论文,初学者而言,五十篇论文加三五篇复现就足以对某个领域有较为深入的了解了。如果看完五百以上论文,其实很多领域之间都能很好地串起来了。这也是一个极为重要的避免做很多无用实验的手段。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

66ba94466fee6b23422f4edc1a139e64.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值