Android 加速服務 (Beta 版)

使用特殊處理器 (例如 GPU、NPU 或 DSP) 加速功能可大幅改善推論效能 (速度最高可達 10 倍) 支援機器學習技術的 Android 以及使用者體驗 (在某些情況下推論) 應用程式。但由於硬體和驅動程式各不相同,使用者可能會遇到 為每位使用者 相當有挑戰性此外,如果您在 裝置可能會因延遲時間過長或極少數情況,造成使用者體驗不佳 以及因硬體不相容而造成的執行階段錯誤或準確性問題。

Android 加速服務 API 是一種 API 為特定使用者裝置和您的 .tflite 模型,同時盡量降低發生執行階段錯誤或準確性問題的風險。

加速服務會評估不同的使用者加速設定 使用 LiteRT 執行內部推論基準測試 模型這些測試通常會在幾秒鐘內完成,視您的 模型在推論前,您可以在每部使用者裝置上執行一次基準測試 時間,請快取結果並在推論時使用。系統會執行這些基準測試 獨立程序盡可能降低應用程式當機的風險

提供您的模型、資料樣本和預期結果 (「黃金」輸入內容, 輸出),然後加速服務將執行內部 TFLite 推論 這項基準可為您提供硬體建議。

圖片

加速服務是 Android 自訂機器學習堆疊的一部分,可與 Google Play 服務中的 LiteRT

將依附元件新增至專案

將下列依附元件新增至應用程式的 build.gradle 檔案中:

implementation  "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"

Acceleration Service API 可與 Google Play 中的 LiteRT 搭配使用 服務。如果發生以下情況: 您尚未使用透過 Play 服務提供的 LiteRT 執行階段, 需要更新dependencies

如何使用 Acceleration Service API

如要使用加速服務,請先建立加速設定 進行評估 (例如 GPU 搭配 OpenGL)。接著建立 驗證設定,內含一些範例資料 模型輸出內容最後呼叫 validateConfig(),將 加速設定和驗證設定。

圖片

建立加速設定

加速設定是硬體設定的表示法 系統會在執行期間轉譯為委派代表 接著,加速服務會在內部使用這些設定 執行測試推論

目前這項加速服務可讓您評估 GPU 設定 (在執行期間轉換為 GPU 委派) 使用 GpuAccelerationConfig 以及 CPU 推論 CpuAccelerationConfig)。 我們正在努力支援更多委任代表使用

GPU 加速設定

建立 GPU 加速設定,如下所示:

AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
  .setEnableQuantizedInference(false)
  .build();

您必須指定模型是否使用量化 setEnableQuantizedInference()

CPU 加速設定

建立 CPU 加速功能,如下所示:

AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
  .setNumThreads(2)
  .build();

使用 setNumThreads()敬上 方法,定義要使用執行緒評估 CPU 的執行緒數量 推論

建立驗證設定

您可以透過驗證設定來定義加速的方式 用於評估推論的服務。請使用這些憑證來傳遞以下項目:

  • 輸入樣本
  • 預期的輸出內容
  • 準確率驗證邏輯。

請務必提供您預期成效良好的輸入範例 (也稱為「黃金」樣本)

撰寫 ValidationConfig敬上 同時 CustomValidationConfig.Builder 如下所示:

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenOutputs(outputBuffer)
   .setAccuracyValidator(new MyCustomAccuracyValidator())
   .build();

使用 setBatchSize()。 使用 setGoldenInputs()。 為傳遞的輸入內容提供預期輸出內容 setGoldenOutputs()

您可以使用 setInferenceTimeoutMillis() 定義最長推論時間 (預設為 5000 毫秒)。如果推論時間超出您定義的時間 因此設定會遭到拒絕

您也可以選擇建立自訂 AccuracyValidator 如下所示:

class MyCustomAccuracyValidator implements AccuracyValidator {
   boolean validate(
      BenchmarkResult benchmarkResult,
      ByteBuffer[] goldenOutput) {
        for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
            if (!goldenOutputs[i]
               .equals(benchmarkResult.actualOutput().get(i).getValue())) {
               return false;
            }
         }
         return true;

   }
}

請務必定義適用於您的用途的驗證邏輯。

請注意,如果模型已嵌入驗證資料,您就可以使用 EmbeddedValidationConfig

產生驗證輸出內容

黃金輸出內容為選用項目,只要提供黃金輸入內容, 加速服務可以在內部產生黃金輸出內容。你也可以 並定義用於產生這些黃金輸出內容的加速設定 呼叫 setGoldenConfig()

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenConfig(customCpuAccelerationConfig)
   [...]
   .build();

驗證加速設定

建立了加速設定和驗證設定後 並評估模型的參考價值

確認 Play 服務執行階段的 LiteRT 可正常使用 並執行下列指令,以讓裝置使用 GPU 委派:

TfLiteGpu.isGpuDelegateAvailable(context)
   .onSuccessTask(gpuAvailable -> TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(gpuAvailable)
        .build()
      )
   );

AccelerationService 執行個體化 呼叫 AccelerationService.create()

接著,您可以透過呼叫 validateConfig():

InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
   .validateConfig(model, accelerationConfig, validationConfig)
   .addOnSuccessListener(validatedConfig -> {
      if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
         interpreterOptions.setAccelerationConfig(validatedConfig);
         interpreter = InterpreterApi.create(model, interpreterOptions);
});

您也可以呼叫 validateConfigs()敬上 並傳遞 Iterable<AccelerationConfig> 物件做為參數。

validateConfig()會傳回 Task<ValidatedAccelerationConfigResult> 透過 Google Play 服務 Task Api 非同步作業
如要從驗證呼叫取得結果,請新增 addOnSuccessListener() 回呼。

在解譯器中使用經過驗證的設定

檢查 ValidatedAccelerationConfigResult 中是否傳回 回呼有效,您可以將通過驗證的設定設為加速設定 ,為翻譯呼叫 interpreterOptions.setAccelerationConfig()

設定快取

模型的最佳加速設定不太可能改變 裝置。收到令人滿意的加速設定後 應儲存在裝置中,並讓您的應用程式擷取檔案並用於 請改為建立InterpreterOptions,而非在後續的工作階段中 再次執行驗證。中的 serialize()deserialize() 方法 ValidatedAccelerationConfigResult 負責儲存和擷取 讓您更容易

應用程式範例

如要確認加速服務是否立即整合,請參閱 範例應用程式

限制

加速服務目前具有下列限制:

  • 目前僅支援 CPU 和 GPU 加速設定。
  • 此 SDK 僅支援 Google Play 服務的 LiteRT,但無法提供 。
  • 加速服務 SDK 僅支援 API 級別 22 以上的版本。

注意事項

請詳閱以下注意事項,尤其是在規劃 才能在實際工作環境中使用這個 SDK:

  • 退出 Beta 版並發布 我們會發布新的 SDK,這個 SDK 可能會 與現行測試版的差異如要繼續使用 Acceleration Service,您需要遷移至這個新版 SDK, 及時更新您的應用程式。否則,可能造成服務中斷 Beta 版 SDK 在下列日期後可能無法與 Google Play 服務相容: 一些時間。

  • 「加速」不保證是特定功能 服務 API 或整個 API 都將全面開放使用這項服務 可能會無限期保持在 Beta 版狀態、終止服務,或與其他專案併用 並將這些功能納入專為特定開發人員目標對象設計的套件中。只有部分通知 或整個 API 本身 但最終可以正式發布,但沒有任何固定的 而負責任的 AI 技術做法 有助於達成這項目標

條款與隱私權

服務條款

使用加速服務 API 時,必須遵守《Google API 服務條款》 服務
此外,加速服務 API 目前為 Beta 版 因此,使用本聲明即表示您瞭解 上方的注意事項,並確認加速服務 一律按照指定方式運作

隱私權

使用加速服務 API 時,系統會處理輸入資料 (例如 圖片、影片、文字等) 完全在裝置上處理,而且加速服務 不會將這些資料傳送至 Google 伺服器。因此,您可以使用我們的 API 來處理不應離開裝置的輸入資料。
加速服務 API 得不時與 Google 伺服器連線 以便接收錯誤修正、更新模型和硬體加速器等 相容性資訊。Acceleration Service API 也會傳送 應用程式 API 的效能和使用率。Google 會運用 並根據這些指標資料評估 API 效能、偵錯、維護及改善 API 以及偵測濫用行為或濫用行為,詳情請參閱《隱私權 政策
您必須自行告知應用程式使用者 Google 會進行處理程序 。
我們蒐集的資料包括:

  • 裝置資訊 (例如製造商、型號、OS 版本和版本) 和 可用的機器學習硬體加速器 (GPU 和 DSP)。用於診斷和 以及用量分析
  • 應用程式資訊 (套件名稱 / 軟體包 ID、應用程式版本)。適用於 包括診斷和使用分析
  • API 設定 (例如圖片格式和解析度)。適用於 包括診斷和使用分析
  • 事件類型 (例如 初始化、下載模型、更新、執行、偵測)。 用於診斷和使用情形分析。
  • 錯誤代碼。用於診斷。
  • 成效指標。用於診斷。
  • 不會明確識別使用者身分的安裝 ID 實體裝置。用於操作遠端設定和使用 數據分析
  • 網路要求傳送者 IP 位址。用於遠端設定 診斷方式收集的 IP 位址會暫時保留。

支援和意見回饋

你可以透過 TensorFlow Issue Tracker 提供意見並取得支援。 請使用 問題範本