首頁>Club>
56
回覆列表
  • 1 # 科技生活評論

    模型太大可以使用壓縮、減枝、量化等進行瘦身。

    比如TensorFlow的模型可以使用converter工具轉為TensorFlow Lite進行瘦身。

  • 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等更加快速的推理框架

    這些框架都經過高度最佳化,顯然具備更高的運算效能,資料吞吐量成倍增加。大模型的推理速度顯然能夠顯著提高。

    計算圖最佳化

    任何神經網路最終都可以表示成圖的形式,圖最佳化的各種演算法都能應用於神經網路的最佳化,透過構建更小的計算圖,減少分支等來加速大模型的運算。

    並行及指令最佳化

    透過多程序,多執行緒,使用向量指令等技術充分利用單指令多資料,或者多指令多資料優勢加快計算優勢。

    編譯最佳化(讀寫,訪存等)

    程式碼經過特別編譯之後能夠更有效的利用暫存器、計算單元等儲存和計算資源,也能夠更合理的分配讀寫時間片提高讀寫效率,從而整體提高大模型的運算速度。

  • 中秋節和大豐收的關聯?
  • 懷孕初期不想要怎麼辦?