效能最佳做法

行動裝置和內嵌裝置具備有限的運算資源,因此維持應用程式資源效率相當重要。我們彙整了一份最佳做法和策略清單,協助您改善 TensorFlow Lite 模型效能。

選擇最適合執行工作的模型

視工作而定,您必須在模型複雜度和大小之間做出取捨。如果您的工作需要高準確度,則可能需要大型且複雜的模型。如果是需要較低精度的工作,建議使用較小的模型,因為這類模型不僅耗用較少的磁碟空間和記憶體,而且通常也會更快且更有效率。舉例來說,下方的圖表顯示一些常見圖片分類模型的準確率和延遲取捨。

模型大小與準確率的圖表

準確率與延遲時間的圖表

其中一個針對行動裝置最佳化的模型範例就是 MobileNets,這種模型已針對行動裝置視覺應用程式進行最佳化。TensorFlow Hub 列出了其他幾種已針對行動裝置和嵌入式裝置最佳化的模型。

您可以使用遷移學習,在自己的資料集中重新訓練列出的模型。

剖析模型

選取適合工作的候選模型後,最好的方式就是剖析模型並進行基準測試。TensorFlow Lite 基準化工具內建分析器,可顯示各運算子剖析統計資料。這有助於瞭解效能瓶頸,以及哪些運算子佔了運算時間。

您也可以使用 TensorFlow Lite 追蹤記錄分析 Android 應用程式中的模型,並使用標準 Android 系統追蹤功能,並透過 GUI 型剖析工具,以視覺化方式呈現運算子叫用時間。

剖析圖表及最佳化圖表運算子

如果特定運算子在模型中頻繁出現,且根據剖析結果,您發現運算子耗用的時間最多,您可以設法對該運算子進行最佳化。TensorFlow Lite 已針對大多數運算子進行最佳化版本,因此這種情況應該很少見。但是,如果您知道執行運算子的限制,也許可以編寫較快的自訂運算版本。請參閱自訂運算子指南

將模型最佳化

模型最佳化旨在建立通常較快且能源效率較小的模型,以便部署在行動裝置上。TensorFlow Lite 支援多種最佳化技術,例如量化。

詳情請參閱模型最佳化文件

調整執行緒數量

TensorFlow Lite 支援許多運算子的多執行緒核心。您可以增加執行緒數量,並加快運算子的執行速度。不過,增加執行緒數量會讓模型使用更多資源和能力。

對某些應用程式而言,延遲時間可能比能源效率更高。您可以設定解譯器執行緒的數量,藉此增加執行緒數量。不過,視同時執行其他作業而定,多執行緒執行作業會導致效能變化性增加。特別是行動應用程式的情況。舉例來說,獨立測試可能顯示速度提升 2 倍 (與單一執行緒相比),但如果同時執行其他應用程式,可能會導致效能低於單一執行緒。

刪除多餘副本

如果您的應用程式未經過精心設計,在為輸入饋送輸入並從模型中讀取輸出內容時,可能會產生多餘的副本。請務必刪除多餘的複本。如果您使用 Java 等較高層級的 API,請務必仔細查看說明文件,瞭解效能注意事項。舉例來說,如果將 ByteBuffers 做為輸入使用,Java API 的速度就會加快許多。

使用平台專屬工具剖析應用程式

Android 分析器檢測設備等平台專屬工具可提供豐富的剖析資訊,可用於對應用程式進行偵錯。有時效能錯誤可能並不在模型中,而是在與模型互動的應用程式程式碼中。請務必熟悉平台專屬的剖析工具和您平台適用的最佳做法。

評估模型是否因使用裝置提供的硬體加速器而受惠

TensorFlow Lite 增加了新的方式,可透過 GPU、DSP 和類神經加速器等較快的硬體加快模型速度。一般而言,這些加速器會透過「委派」子模組公開,而該子模組會接管解譯器執行作業的部分。TensorFlow Lite 可透過以下方式使用委派:

  • GPU 委派功能適用於 Android 和 iOS,分別使用 OpenGL/OpenCL 和 Metal。如要試用,請參閱 GPU 委派說明。
  • 如果您可以存取非標準硬體,就可以建立自己的委派項目。詳情請參閱 TensorFlow Lite 委派

請注意,部分加速器適用於不同類型的模型。部分委派項目僅支援浮動模型,或是以特定方式最佳化的模型。請務必為每個委派代表進行「基準測試」,看看這是否是應用程式的最佳選擇。舉例來說,如果您的模型非常小,可能不值得將模型委派給 GPU。相反地,加速器則非常適合具有高算術強度的大型模型。