-
1 # 日新為道
-
2 # 深度視野
沒有理解清楚你的問題中效率的概念。問題1 可能是Deep Learning的訓練加速推理加速?或者問題2可能是怎麼快速上手Deep Learning?問題1可能不是那麼一言兩語才能回答完,回答2簡單一些。
問題1 Deep Learning的訓練加速推理加速?
啟用框架fuse技術進行運算元融合運算元融合之後訓練起來減少了無效的複製時間,計算組織更加緊密,所以效能更好。
啟用集合通訊框架Nvidia NCCL 等都提供這樣的集合通訊方法開啟後,梯度的反向傳播和平均等運算將大大加速。
配置多機多卡多機多卡訓練會大大加速神經網路的計算。
啟用垃圾回收等記憶體視訊記憶體機制透過最佳化儲存空間,使得更多計算在視訊記憶體中或者記憶體中顯然比在硬碟來回排程快的多。
透過tensorrt、openvino等進行推理針對英偉達和intel的計算單元進行了大量的軟體最佳化,部署速度更快。官方也提供了相應的生態,部署起來按照文件也很容易操作。
問題1總結:用最先進的工具把最牛X的選項開啟,把所有能利用的資源都利用了,自然訓練速度和部署推理就會顯著提高。
問題2 怎麼快速入手Deep Learning?
首先上結論:唯一的總神器就是數學。
Deep Learning本質上要學的是特徵表示,多層神經網路的組織實際上是特徵組合和空間變換。學過線性代數的人都會知道向量空間的概念,如果仔細想想點的組合就是線,線的組合就是面,面的組合就是空間。我們所謂的輸入特徵,無非就是空間中一個點的多維表示方法。
第一神器線性代數矩陣運算部分矩陣計算瞭如指掌,你就能輕鬆理解各種線性變換的概念,大部分的運算元比如卷積Conv,迴圈神經網路運算元LSTM等都不難理解。學好矩陣理論,別說Deep Learning,你就是去搞GPU神經網路平行計算也不在話下。
第二神器高等數學梯度部分神經網路能訓練出來的第一功臣應該是BP(反向傳播)演算法吧,應該說沒有BP就沒有深度神經網路什麼事情了,學好梯度的運算別說訓練神經網路,你就是寫個效能不那麼好的神經網路框架也不在話下,pytorch/mxnet不過就是矩陣的前向和反向計算組合成的一個經過最佳化的工具包罷了。
第三神器機率論如果連基本的機率論都不懂,那麼我請問你怎麼搞清楚貝葉斯,怎麼搞HMM 隱馬爾科夫模型,怎麼搞條件隨機場CRF,怎麼搞Beam Search 剪枝,怎麼搞CTC....一堆的怎麼搞,頭大了有木有。
高階大神需要學的科目來了:離散數學圖論大神必備科目,怎麼才能讓神經網路算的更快是架構師考慮的問題,這裡面涉及大量的圖最佳化問題,圖論都沒學過,怎麼搞無依賴運算元平行計算,這麼搞運算元合併最佳化,又是一堆的怎麼搞?
問題2 總結瞭解清楚原理和背後的數學知識什麼時候都不晚,當有一天數學知識精進了,什麼pytorch,tensorflow2.0,mxnet,paddlepaddle都不在話下,猛然發現這些所謂的牛逼框架,大多就是大學水平。碩士水平怎麼也得搞個複數域神經網路。如果實在不想學數學,先從numpy搞起,試試各種API是怎麼回事兒,鼓弄一下記住答案直接上手pytorch也未嘗不可。大部分AI工程師數學真的很差,整天假裝搞Deep Learning,實際上連矩陣乘法都不會,被計算框架寵壞了。
回覆列表
推薦一個基於PyTorch的Deep Learning框架PyTorch Lightning。
經過我的試用,這個框架現在優點很多,使用方便,節省大量時間,讓使用者只需要關注模型和資料。不再需要關注很多無關但必要的繁雜細節,例如控制訓練流程、儲存模型checkpoint、fp16支援、多機多卡訓練、梯度累計等等。這些東西全部由框架實現。對於一般的模型訓練,只需要關注模型設計和資料讀取。模型部分就不談了。對於資料讀取,除了具體的讀資料,只需要寫一個如何將多個instance打包成一個batch的函式即可。擴充套件性強。這是我認為這個框架最優秀的地方。PyTorch實際上有很多不同的框架,但是增加的易(無)用(腦)性的同時,其擴充套件性往往大打折扣。PyTorch Lightning對於這點的處理很好。可能某高階鍊金術師不止需要控制模型設計和資料讀取,而是想要進行更精細的控制,例如學習率的自定義調節。PyTorch Lightning也透過hook的方式提供了支援,幾乎所有常見的可以插入自定義控制流程的地方都可以使用hook進行更精細的控制。
下面說說缺點:
老生常談的第一點,對於某些國家鍊金術師,他們想要控制每一個細節,那麼PyTorch Lightning可能無法提供支援。但是我覺得這些人也沒必要用這個,自己從頭寫最好了。
框架還處於高頻更新中,可能前後版本存在相容性問題。甚至有一些小坑。