當前位置:
首頁 > 知識 > TensorFlow 模型優化工具包:模型大小減半,精度幾乎不變!

TensorFlow 模型優化工具包:模型大小減半,精度幾乎不變!

近日,TensorFlow 強勢推出能將模型規模壓縮卻幾乎不影響精度的半精度浮點量化(float16 quantization)工具。小體積、高精度,還能夠有效的改善 CPU 和硬體加速器延遲。TensorFlow 發出相應的文章對該工具做了簡要的說明,AI 開發者將其整理編譯如下。

Float16 Quantization

我們非常高興能夠將訓練後的 float16 quantization 作為模型優化工具包(Model Optimization Toolkit)的一部分。這套工具包括了:

混合量化(https://medium.com/tensorflow/introducing-the-model-optimization-toolkit-for-tensorflow-254aca1ba0a3 )

全整數量化(https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-post-training-integer-quantization-b4964a1ea9ba )

修剪(https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-pruning-api-42cac9157a6a )

在計算中,半精度是二進位浮點計算機數字格式,佔用計算機存儲器中的 16 位。在 IEEE 754-2008 標準中,16 位 base-2 格式稱為 binary16。它用於在高精度對於執行算術計算不是必需的應用中存儲浮點值,並且 IEEE 754 標準將 binary16 指定為具有以下格式:

Sign bit(符號位):1 bit

Exponent width(指數位寬):5 bits

Significand precision(尾數精度):11 bits (有10位被顯式存儲)

圖 1 IEEE 754 標準下 binary16 的格式

訓練後的 float16 quantization 減少了 TensorFlow Lite 模型的大小(高達 50%),同時以少量的精度損失為代價。它將模型常量(如權重和偏差值)從全精度浮點(32 位)量化為減少精度的浮點數據類型(IEEE FP16)。

訓練後的 float16 quantization 是量化 TensorFlow Lite 模型很好的方法,因為它對精度的影響極小並且能夠使得模型大小顯著減小。在這裡可以通過查看該文檔(包括一個新的浮動圖表,https://www.tensorflow.org/lite/performance/post_training_quantization),以幫助你了解不同的量化選項和場景。

圖 2 幫助確定合適量化場景的決策樹

降低精度的收益

尤其是在部署到邊緣時,降低精度將產生很大的收益。

模型尺寸減少 2 倍。模型中的所有常量值都存儲在 16 位浮點數而不是 32 位浮點數中;由於這些常量值通常在整個模型尺寸中佔主導地位,因此通常會將模型的尺寸減小約一半。

精確度損失可忽略不計。深度學習模型通常能夠在使用相較於最初訓練時更少精確度的情況下,產生良好的推理結果。並且在我們對多個模型的實驗中,我們發現推理質量幾乎沒有損失。例如圖 4 中,MobileNet V2 top 1 的測試結果顯示,其精度降低值小於 0.03%。

模型尺寸測試結果

訓練後的 float16 quantization 對精度的影響很小,並可以使得深度學習模型的大小減小約 2 倍。

以下是在 MobileNet V1 和 V2 模型以及 MobileNet SSD 模型的一些測試結果。其中,MobileNet v1 和 v2 的結果基於 ImageNet 圖像識別任務測得,而 MobileNet SSD 模型則在 COCO 目標檢測任務上評估而得。

圖 3 不同模型下模型大小變化

模型精度測試結果

在 ILSVRC 2012 圖像分類任務中,我們評估了標準 Mobilenet Float32 模型(和 FP16 變體)。在 COCO 目標檢測任務中,我們對 Mobilenet SSD float32 模型及其 fp16 變體進行了評估。

圖 4 不同模型下精度損失測試結果

如何使用 float16 quantization 工具

用戶可以在 TensorFlow Lite converter 上指定訓練後的 float16 quantization,即使用經過訓練的 float32 模型,將優化設置為 DEFAULT,然後再將目標規範支持的類型設置為 float16 常量。

圖 5 模型參數相關設置

轉換模型後,用戶就可以像任何其它 TensorFlow Lite 模型那樣直接運行該模型了。默認情況下,模型將在 CPU 上運行,通過將 16 位參數「上採樣」為 32 位,然後在標準 32 位浮點運算中執行操作。在今後的優化過程中,我們也希望能夠有更多的硬體支持加速 fp16 計算,這樣半精度值就不再需要進行「上採樣」的操作,而是直接進行計算。

同時,用戶還可以在 GPU 上運行模型。我們已經增強了 TensorFlow Lite GPU 代理,以接收 16 位精度參數並直接運行(而無需像在 CPU 上那樣先進行轉換)。

在應用程序中,用戶可以通過 TfLiteGpuDelegateCreate 函數(文檔)創建 GPU 代理。需要注意的是在為代理指定選項時,請確保將 precision_loss_allowed 設置為 1,從而使其能夠在 GPU 上直接使用 float16 操作。

圖 6 在 GUP 上運行模型的參數設置

有關 GPU 委託的概述,可以參閱我們之前的帖子(https://medium.com/tensorflow/tensorflow-lite-now-faster-with-mobile-gpus-developer-preview-e15797e6dee7);如果想進一步了解該工具,可以在 CoLab 教程中查看 float16 quantization 工具的使用示例。

https://medium.com/tensorflow/tensorflow-model-optimization-toolkit-float16-quantization-halves-model-size-cc113c75a2fa

CoLab 教程:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

新版 PyTorch 1.2 已發布:功能更多、兼容更全、操作更快!

TAG:AI研習社 |