cuda上的量化深度學習模型的自動化優化
深度學習已成功應用於各種任務。在諸如自動駕駛汽車推理之類的實時場景中,模型的推理速度至關重要。網路量化是加速深度學習模型的有效方法。在量化模型中,資料和模型引數都用諸如int8和的低精度資料型別表示float16。降低的資料頻寬減少了推理時間和儲存器/儲存需求,以及功耗。同時,在適當的量化方案下,可以最小化量化模型的精度下降。量化模型特別適合研究人員和開發人員,使大型模型適合在各種裝置(例如gpu,cpu和移動裝置)上部署。
以前,通常通過手工微核心針對不同的工作量來優化量化運算元,或者依靠cudnn和tensorrt等黑盒專有解決方案。在整合中編寫高效能微核心可能非常困難,並且通常需要大量的工程工作。此外,很難使這些臨時微核心適應新興的工作負載和新裝置。
圖2. nchw4c中的資料布局和oihw4o4i中的權重布局的二維卷積。左:nchw4c布局中的輸入張量。核心的乙個移動的過濾器被染成藍色。輸入和核心的乙個元素以灰色顯示。 中:灰色塊中的打包輸入和核心。右:nchw4c布局中的輸出。在所示的乙個元素內,通道子維度中有四個壓縮元素。
在指定卷積層的布局之後,其它運算元(例如add和啟用)可以在relay中的alteroplayout傳遞期間自動適應所選的布局。權重的布局轉換可以離線進行預先計算。可以在相同的布局中執行整個模型而無需額外的開銷。
設計搜尋空間以進行自動優化
在量化運算元中獲得良好效能的關鍵是與基於機器學習的自動優化相整合。乙個問題是如何設計有效的排程表搜尋空間。有效的計畫模板意味著在自動調整中,可以通過合理的迭代次數獲得良好的效能。定義乙個靈活的模板以覆蓋搜尋空間中的不同配置。利用效能優化方面的先驗知識。例如,一種常見的做法是,在cuda程式設計中將資料快取在共享記憶體中,因此利用共享記憶體,使用機器學習來選擇最佳的圖塊大小。還進行了一些手動平鋪,例如將軸分割為4或16,以方便進行向量化記憶體訪問。
在量化的2d卷積中,設計了乙個搜尋空間,其中包括一組可調選項,例如圖塊大小,要融合的軸,迴圈展開和雙緩衝的配置。在cuda上註冊了量化模板conv2d和densecuda模板int8。在自動調整期間,可以通過設定template_key引數,為這些量化運算元建立調整任務。有關如何啟動自動優化的詳細資訊,請參見autotvm教程。
一般工作流程
圖3.執行量化模型的工作流程
tvm提供了乙個簡單的工作流程,可以量化其它框架中訓練有素的模型,自動優化運算元(使用autotvm)並部署到其它裝置。
首先,使用relay前端匯入現有模型。在這裡,以帶有(1, 3, 224, 224)輸入形狀的mxnet模型為例。
sym, arg_params, aux_params = mxnet.model.load_checkpoint(model_path, epoch)
net, params = relay.from_mxnet(sym, shape=, arg_params=arg_params, aux_params=aux_params)
接下來,使用中繼量化api將其轉換為量化模型。
net = relay.quantize.quantize(net, params=params)
然後,使用autotvm為模型中的運算元提取調整任務,並執行自動優化。
最後,建立模型並以量化模式執行推理。
with relay.build_config(opt_level=3):
graph, lib, params = relay.build(net, target)
結果relay.build是可部署的庫。可以直接在gpu上執行推理,也可以通過rpc部署在遠端裝置上。
基準為了驗證tvm中量化運算元的效能,對幾種流行的網路模型(包括vgg-19,resnet-50和inception v3)的效能進行了基準測試。還對來自可變形卷積網路的drn-c-26,resnext-50和dcn-resnet-101進行基準測試,以顯示新興模型的效能,其中包含較少的常規運算元,例如膨脹卷積,組卷積和可變形卷積。選擇nvidia tensorrt作為基準。據報道,在float32模式下mxnet 1.4 + cudnn 7.3的結果顯示了量化的加快。實驗是在nvidia gtx 1080上進行的。當以批處理大小= 1和16執行時,輸出每個影象的推理時間。
如圖1所示,tvm使用量化實現了高達8倍的加速。在vng和resnet等標準cnn模型中,tvm與tensorrt的最新結果保持一致。
在對新興模型進行基準測試時,tvm取得了令人印象深刻的結果。在resnext和dcn-resnet-101上獲得了可觀的效能提公升。tensorrt的dcn-resnet-101的結果不可用,因為尚無可變形卷積的正式實現。tvm中的自動優化可以輕鬆靈活地支援和優化新興的工作負載。
深度學習模型剪枝 量化和TensorRT推理
rethinking the value of network pruning這篇文獻主要介紹了以下幾種剪枝演算法,並在github上開源了 在imagenet和cifar兩個資料集上進行了測試,也驗證了對比了對剪枝模型進行fine tune和根據剪枝後的網路結構從頭訓練網路的準確率,在作者提供的準...
安裝用於深度學習的CUDA環境
下面正式介紹在64位win8.1系統下安裝theano的過程 在anaconda下安裝mingw包即可,不需要安裝tdm gcc或者mingw steup.exe等,在cmd下輸入 conda install mingw libpython 即可在anaconda的安裝目錄下看到mingw包,然後在...
深度學習中向量化的意義
向量化就是要去除 中for迴圈,這就需要用到矩陣,python是可以直接進行矩陣計算的,c語言就不行,我以前在使用matlab時候就覺得matlab非常強大,就是因為其矩陣計算能力,而且matlab名字就叫矩陣實驗室。但可惜matlab是收費軟體,在接觸到python以後發現,python在實現方法...