计算资源有限的人如何在深度学习领域成长?
- 2019 年 10 月 4 日
- 筆記
@ 一个旅人
结合自己学习Deep Learning以来的经验来谈谈自己的感受吧,实验室刚开始也只有单卡的机器,现在工作了有机会使用更多的计算资源。
如果从学习的角度上来说,一般的机器学习模型或者深度学习模型单卡还是能够支撑的,视觉领域的不是特别了解,在自然语言处理领域常见的任务(情感分类,序列标注,QA,NMT除外吧),常用数据集单卡都是可以应付的。最近比较大的语言模型,ELMo单卡也是可以训练的,只是时间长一点,BERT单卡调用预训练的模型也没有问题。
从做科研的角度来说,个人觉得不要执着于去做和工业界去拼计算资源的问题,BERT是个好东西拿过来用就可以了。在NLP领域,BERT出来之后几乎让单卡刷state-of-the-art变成了很困难的事情,其实这也不是坏事,学术界在有限计算资源的情况下应该更集中的去解决那些deep learning 中fundamental的问题,至于那些需要大量计算资源的的工作就交给工业界吧。
知乎回答链接:
https://www.zhihu.com/question/304263105/answer/617594784
@ Wendell
现在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/543461352
@ 齐国君
在校学生就想办法进有"真正"做深度学习实力的实验室;也工作的人就想办法跳到这方面的岗位上。
这些不是重点,重点是你怎么学、怎么提高对问题和模型的理解?这里的误区是“计算资源有限”。即便在大公司和大实验室,计算资源都不是无限供应的。很可能的情况是你要和其他组其他同学和同事去抢。
所以关键是,你怎么高效地使用有限的计算资源。很多同学容易反的错误是一上来就从Github上下载个模型来跑。跑着跑着就变成了调参,最后模型的性能是上去了,但啥也没学会。
正确的姿势是要搞清楚这个模型或方法的关键是什么?和其他方法比有什么优点,解决了什么问题?但更重要的是搞清楚它不能解决什么问题?
研究一个模型或者方法的过程,往往最重要的是找到它不能做什么。一个模型或者方法不可能什么问题都解决的(参考no free lunch)。用这个模型的过程,其实就是要发现这点;搞清楚了这点,就知道了它的适用边界,就能更有效的在有限计算资源下高效的使用它,而不是把资源浪费到它不适应的情形和数据上。
所以高效使用有限计算资源的方法就是反着用,用有限资源去找到模型的适用范围的边界。这个比重复的去在已经反复被证明适用的范围(数据、场景)上浪费有限资源获得的提高要大得多也快得多。
更进一步,如果有办法改进这个模型,并把它的适用边界进一步扩展,那么恭喜你,你就真正掌握了这个模型了。
知乎回答链接:
https://www.zhihu.com/question/304263105/answer/560291142