計算資源有限的人如何在深度學習領域成長?
- 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