1. 訓練階段加速
* 使用混合精度加速訓練
推薦使用NVIDIA的APEX進行訓練加速,在2060S顯卡上,大約可以獲得一倍的綜合速度提升(顯存使用減少,可以適當增加batchsize, 提高速度)。精度下降幾乎察覺不到。APEX保存和加載的模型參數仍然是float32類型的,所以不用擔心預訓練模型重用的問題。使用起來也十分簡單:https://nvidia.github.io/apex/
更多細節可以參考:https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html
直接使用FP16進行訓練,會產生很多問題,需要針對性的手動優化。很麻煩,不建議這麼做。
* 平衡數據預處理的計算量
數據加載階段的提速也很重要。如果發現自己的顯存使用率較高,但GPU計算利用率一直不高(比如50%就算偏低了),然而此時CPU利用率標高,應該考慮是不是在數據加載階段卡脖子了。數據加載階段的圖像處理計算量和數據量都應該適當控制。儘量不要讓GPU計算閒置。也可將CPU做的圖像處理搬到GPU上。
參考更多內容:https://www.zhihu.com/question/356829360
2. 推理階段加速
* 使用FP16進行計算
推理階段使用FP16進行計算,能夠明顯減少帶寬,並提高速度。在2060S顯卡上,大約可以獲得30%左右的速度提升。而推理精度損失幾乎難以察覺。pytorch中對數據和模型進行half()即可實現。
* 使用TensorRT加速
使用NVIDIA的TensorRT進行模型轉換,可以獲得1~3倍的速度提升(具體看顯卡和模型)。詳情參考https://developer.nvidia.com/tensorrt
更多細節可以參考:https://docs.nvidia.com/deeplearning/sdk/#inference
(nvidia文檔很不錯,建議多看看,瞭解細節。顯卡雖貴,服務到位~)
3. 缺陷樣本自動生成
* 相同的應用場景,建立缺陷樣本庫,獲取無缺陷樣本後進行缺陷融合,自動產生訓練樣本
4. 硬件方案選擇
選擇顯卡也很重要:(TODO)
5. 數據增強