1. 程式人生 > >TensorFlow 首個優化工具來了:模型壓縮4倍,速度提升3倍!

TensorFlow 首個優化工具來了:模型壓縮4倍,速度提升3倍!

今天,TensorFlow釋出了一個新的優化工具包:一套可以讓開發者,無論是新手還是高階開發人員,都可以使用來優化機器學習模型以進行部署和執行的技術。

 

這些技術對於優化任何用於部署的TensorFlow模型都非常有用。特別是對於在記憶體緊張、功耗限制和儲存有限的裝置上提供模型的TensorFlow Lite開發人員來說,這些技術尤其重要。

 

關於TensorFlow Lite,這裡有更多教程:https://www.tensorflow.org/mobile/tflite/

 

優化模型以減小尺寸,降低延遲和功耗,同時使精度損失可以忽略不計

 

這次新增支援的第一個技術是向TensorFlow Lite轉換工具新增post-training模型量化(post-training quantization)。對於相關的機器學習模型,這可以實現最多4倍的壓縮和3倍的執行速度提升

 

通過量化模型,開發人員還將獲得降低功耗的額外好處。這對於將模型部署到手機之外的終端裝置是非常有用的。

 

啟用 post-training quantization

 

post-training quantization技術已整合到TensorFlow Lite轉換工具中。入門很簡單:在構建了自己的TensorFlow模型之後,開發人員可以簡單地在TensorFlow Lite轉換工具中啟用“post_training_quantize”標記。假設儲存的模型儲存在saved_model_dir中,可以生成量化的tflite flatbuffer:

 

 

1converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
2converter.post_training_quantize=True
3tflite_quantized_model=converter.convert()
4open(“quantized_model.tflite”, “wb”).write(tflite_quantized_model)

 

我們提供了教程詳細介紹如何執行此操作。將來,我們的目標是將這項技術整合到通用的TensorFlow工具中,以便可以在TensorFlow Lite當前不支援的平臺上進行部署。

 

教程:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/tutorials/post_training_quant.ipynb

 

post-training 量化的好處

  • 模型大小縮小4倍

  • 模型主要由卷積層組成,執行速度提高10-50%

  • 基於RNN的模型可以提高3倍的速度

  • 由於減少了記憶體和計算需求,預計大多數模型的功耗也會降低

 

有關模型尺寸縮小和執行時間加速,請參見下圖(使用單核心在Android Pixel 2手機上進行測量)。

 

圖1:模型大小比較:優化的模型比原來縮小了4倍

 

圖2:延遲比較:優化後的模型速度提高了1.2到1.4倍

 

這些加速和模型尺寸的減小對精度影響很小。一般來說,對於手頭的任務來說已經很小的模型(例如,用於影象分類的mobilenet v1)可能會發生更多的精度損失。對於這些模型,我們提供預訓練的完全量化模型(fully-quantized models)。

 

圖3:精度比較:除 mobilenets外,優化後的模型的精度下降幾乎可以忽略不計

 

我們希望在未來繼續改進我們的結果,請參閱模型優化指南以獲得最新的測量結果。

 

模型優化指南:

https://www.tensorflow.org/performance/model_optimization

 

post-training quantization的工作原理

 

在底層,我們通過將引數(即神經網路權重)的精度從訓練時的32位浮點表示降低到更小、更高效的8位整數表示來執行優化(也稱為量化)。 有關詳細資訊,請參閱post-training量化指南。

 

post-training量化指南:

https://www.tensorflow.org/performance/post_training_quantization

 

這些優化將確保將最終模型中精度降低的操作定義與使用fixed-point和floating-point數學混合的核心實現配對。這將以較低的精度快速執行最繁重的計算,但是以較高的精度執行最敏感的計算,因此通常會導致任務的最終精度損失很小,甚至沒有損失,但相比純浮點執行而言速度明顯提高。

 

對於沒有匹配的“混合”核心的操作,或者工具包認為必要的操作,它會將引數重新轉換為更高的浮點精度以便執行。有關支援的混合操作的列表,請參閱post-training quantizaton頁面。

 

未來的工作

 

我們將繼續改進post-training量化技術以及其他技術,以便更容易地優化模型。這些將整合到相關的TensorFlow工作流中,使它們易於使用。

 

post-training量化技術是我們正在開發的優化工具包的第一個產品。我們期待得到開發者的反饋。

 

關注公眾賬號

飛馬會