TensorFlow 模型優化工具包正式推出
來源 | TensorFlow 公眾號
我們非常激動地宣佈 TensorFlow 新增一個優化工具包,這是一套讓新手和高階開發者都可以用來優化機器學習模型以進行部署和執行的技術。
我們預期這些技術對優化任何準備部署的 TensorFlow 模型都會非常有用,但對於 TensorFlow Lite 開發者而言,這些技術尤為重要,因為他們在裝置上提供模型時會受到記憶體緊張、功耗約束及儲存空間限制等條件的制約。如果您尚未試用過 TensorFlow Lite,可以點選此處,瞭解更多資訊。 注:此處連結 ofollow,noindex">www.tensorflow.org/lite/

優化模型以縮減尺寸、延時和功率,令其在精確度上的損耗可以忽略不計
我們新支援的第一項技術是 TensorFlow Lite 轉換工具的訓練後量化。對於相關機器學習模型,這項技術可以實現高達 4 倍的壓縮,並能將執行速度提升 3 倍。
通過模型量化,開發者還可以獲得因功耗降低而帶來的額外益處。這有助於開發者在除手機之外的邊緣裝置上部署模型。
啟用訓練後量化
我們將訓練後量化技術整合到 TensorFlow Lite 轉換工具中。這項技術很容易入門:在完成 TensorFlow 模型構建後,開發者只需在 TensorFlow Lite 轉換工具中啟用 “post_training_quantize” 標記即可。假設儲存後的模型儲存在 saved_model_dir 中,則可以生成量化的 tflite flatbuffer:
converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir) converter.post_training_quantize=True tflite_quantized_model=converter.convert() open(“quantized_model.tflite”, “wb”).write(tflite_quantized_model) 複製程式碼
我們的教程將深入介紹如何執行此操作。我們希望日後在通用的 TensorFlow 工具中也納入此技術,以便將其用於在 TensorFlow Lite 目前不支援的平臺上進行部署。 注:教程連結 github.com/tensorflow/…
訓練後量化的益處
-
使模型尺寸縮減 4 倍
-
對於主要由卷積層組成的模型,可以使其執行速度提高 10–50%
-
使基於 RNN 的模型速度提升 3 倍
-
由於對記憶體和計算的要求下降,我們預計大部分模型的功耗都會有所降低
請參閱下圖,瞭解若干模型的尺寸縮減和執行速度加快情況(使用單核心 Android Pixel 2 手機測量)。

圖 1:模型尺寸對比:優化後的模型縮小了幾乎 4 倍

圖 2:延時對比:優化後的模型速度提升了 1.2 到 1.4 倍
這些速度提升和模型尺寸縮減對精確度基本沒有影響。一般情況下,對手頭任務而言已經很小的模型(例如,用於影象分類的 MobileNet v1)可能精確度損耗較多。我們為許多這樣的模型提供了預訓練的完整量化模型。 注:完整量化模型連結 github.com/tensorflow/…

圖 3:精確度對比:優化後模型的精確度下降可以忽略不計(MobileNet 除外)
我們希望日後可以繼續改進成果,請參閱模型優化指南,獲取最新測量資料。 注:模型優化連結 www.tensorflow.org/performance…
訓練後量化的工作原理
在後臺,我們將引數(即神經網路權重)的精度從其訓練時的 32 位浮點數值降低到更小且更高效的 8 位整數值,以通過這種方式進行優化(也稱為量化)。如需瞭解更多詳情,請參閱訓練後量化指南。 注:訓練後量化指南連結 www.tensorflow.org/performance…
這些優化可確保將所產生模型中精度降低的運算定義與混合使用固定和浮點數學的核心實現進行配對。這會使模型以較低精度快速執行最繁重的計算,但以較高精度執行最敏感的計算,因此在執行此類任務時通常只會造成很少甚至完全不會造成最終精確度損耗,而執行速度卻遠遠超過純浮點的方式。如果運算中沒有匹配的“混合”核心,或者工具包認為不必要,則模型會將這些引數重新轉換為較高的浮點精度執行。如需受支援的混合運算列表,請參閱訓練後量化頁面。 注:訓練後量化頁面連結 www.tensorflow.org/performance…
未來工作
我們將繼續改進訓練後量化技術,同時開發能夠使模型優化更加簡單的其他技術。我們會將這些技術整合到相關的 TensorFlow 工作流程中,讓它們更加輕鬆易用。
訓練後量化是我們正在開發的優化工具包中的第一款產品。我們很期待收到開發者的使用反饋。
請在 GitHub 上提交問題,並在 Stack Overflow 上提問。 注:GitHub 連結 github.com/tensorflow/… Stack Overflow 連結 stackoverflow.com/questions/t…
致謝
非常感謝 Raghu Krishnamoorthi、Raziel Alvrarez、Suharsh Sivakumar、Yunlu Li、Alan Chiao、Pete Warden、Shashi Shekhar、Sarah Sirajuddin 和 Tim Davis 的重要貢獻。同時衷心感謝 Mark Daoust 幫助我們建立 Colab 教程。感謝 Billy Lamberta 和 Lawrence Chan 幫助建立網站。 注:Colab 教程連結 github.com/tensorflow/… 網站連結 www.tensorflow.org/performance…