-
1 # 科技生活評論
-
2 # 深度視野
首先模型太大的影響可以分為:訓練階段(training)和預測階段(inference)。不同的階段解決的方式不太一樣。以下就從這兩個方面來回答這個問題。
訓練階段選擇這麼大的模型是否合理?是否有等價方案?例如在語音合成方面WaveNet可以是幾十層的CNN結構,而WaveRNN僅僅有一層GRU單元,但最終在合成效能上卻取得了相近的結果,這就是說如果你一開始經過了充分的調研分析,並且找到一種更優的結構就能從根本上避免模型過大問題的產生。
簡單感受下下面兩張圖,也許你就會認識到充分調研,仔細選取模型的重要性。
使用GPU進行訓練GPU的多核架構決定了它的計算吞吐量遠超過傳統CPU。在經濟條件允許的條件下選用算力強大的GPU,顯然能夠在模型大小不變的情況下提供更強的算力支援。
使用叢集和雲資源進行訓練目前tensorflow、mxnet、paddle都支援雲上訓練和叢集訓練,只需要簡單配置就能實現多機多卡訓練,顯然使用多臺伺服器能夠更快的將資料處理完,極大的加速訓練過程。
使用集合通訊機制和更先進的網路互連技術採用Nvidia ncll 或其他框架提供的All-reduce等集合運算元可以極大的加快反向傳播的梯度計算和損失回傳,多機能夠快速的實現資料同步。同時使用RDMA傳輸技術也顯然要比採用傳統TCP有更高效的資料互動能力,透過減少資料傳輸損耗降低計算延遲來加快深度學習的訓練。
其他最佳化這裡涉及到具體的程式碼書寫,降低記憶體缺頁,資料讀寫等待等計算機常用最佳化方法來加快程式碼的執行速度,從而提高訓練速度。
預測階段預測階段也有很多種方法來做到減小模型大小和運算速度的方法。
模型量化透過更少的位元位(bit)來表示模型權重,顯然能夠成比例的將模型變小。目前8bit量化已經使用的比較多了,2bit量化或者0-1量化也被一些模型所採用。
模型裁剪透過將接近於0的權重值進行裁剪可以有效的減小網路規模和計算量。
模型蒸餾distilling model又叫teacher student model,損失函式透過hard target和soft target ce loss共同作用,從而訓練出一個比原始teacher 模型小的多的student model,從而可以部署的資源更小的端上。
使用tensorrt等更加快速的推理框架這些框架都經過高度最佳化,顯然具備更高的運算效能,資料吞吐量成倍增加。大模型的推理速度顯然能夠顯著提高。
計算圖最佳化任何神經網路最終都可以表示成圖的形式,圖最佳化的各種演算法都能應用於神經網路的最佳化,透過構建更小的計算圖,減少分支等來加速大模型的運算。
並行及指令最佳化透過多程序,多執行緒,使用向量指令等技術充分利用單指令多資料,或者多指令多資料優勢加快計算優勢。
編譯最佳化(讀寫,訪存等)程式碼經過特別編譯之後能夠更有效的利用暫存器、計算單元等儲存和計算資源,也能夠更合理的分配讀寫時間片提高讀寫效率,從而整體提高大模型的運算速度。
回覆列表
模型太大可以使用壓縮、減枝、量化等進行瘦身。
比如TensorFlow的模型可以使用converter工具轉為TensorFlow Lite進行瘦身。