Android 向けアクセラレーション サービス(ベータ版)

ハードウェアに GPU、NPU、DSP などの専用プロセッサを使用する 高速化により、推論のパフォーマンスを (場合によっては推論)と、ML 対応の Android のユーザー エクスペリエンスが 説明します。ただし、ハードウェアやドライバの多様化を考えると、 ユーザーの環境ごとに最適なハードウェア アクセラレーション構成が 使いづらいかもしれませんさらに、1 つのサーバーに対して誤った構成を有効にすると、 場合によっては、デバイスで発生する遅延の上昇や、まれなケース、 ハードウェアの非互換性に起因するランタイム エラーや精度の問題に迅速に対応できます。

Android 用アクセラレーション サービスは、 ハードウェア アクセラレーションの最適な構成について、 .tflite モデルを使用する一方で、ランタイム エラーや精度の問題のリスクを最小限に抑えることができます。

アクセラレーション サービスは、ユーザーのさまざまなアクセラレーション構成を評価します。 LiteRT を使用して内部推論ベンチマークを実行し、 モデルです。これらのテスト実行は通常、数秒で完了します。 モデルです。推論の前に、すべてのユーザー デバイスでベンチマークを 1 回実行できます 結果をキャッシュに保存して推論時に使用するこれらのベンチマークは プロセス外アプリのクラッシュのリスクを最小限に抑えることができます

モデル、データサンプル、期待される結果(「ゴールデン」入力と Acceleration Service は内部の TFLite 推論を実行し、 ハードウェアの推奨を提示します。

画像

Acceleration Service は Android のカスタム ML スタックの一部であり、 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 の使用方法

アクセラレーション サービスを使用するには、まずアクセラレーション構成を作成します。 例: OpenGL を搭載した GPU)。次に、 サンプルデータ、想定される動作を含むモデルを含む モデルの出力です。最後に、validateConfig() を呼び出して、 検証の設定が含まれます。

画像

アクセラレーション構成を作成する

アクセラレーション構成は、ハードウェア構成を表す これらは実行時にデリゲートに変換されます。 アクセラレーション サービスは、これらの構成を内部で使用します。 テスト推論を実行できます

現在、アクセラレーション サービスでは GPU を評価できます 構成(実行時に GPU デリゲートに変換される) 新しい GpuAccelerationConfig および CPU 推論( CpuAccelerationConfig)。 Google では、より多くの代理人が Google Cloud の他のハードウェアにアクセスできるように取り組んでいます。 説明します。

GPU アクセラレーションの構成

次のように GPU アクセラレーション構成を作成します。

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

モデルで量子化を使用するかどうかを指定する必要があります。 setEnableQuantizedInference()

CPU アクセラレーションの設定

CPU アクセラレーションを次のように作成します。

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

こちらの setNumThreads() メソッドを使用して、CPU の評価に使用するスレッド数を定義します。 説明します。

検証構成を作成する

検証構成を使用すると、Acceleration Validation の 推論を評価するためのサービス。これらを使用して以下を渡します。

  • 入力サンプル、
  • 期待される出力、
  • 精度検証ロジックが用意されています。

優れたパフォーマンスが期待できる入力サンプルを必ず提供してください。 (「ゴールデン」サンプルとも呼ばれます)

作成: ValidationConfig CustomValidationConfig.Builder 次のようになります。

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

サンプル数を setBatchSize()。 次を使用してゴールデン サンプルの入力を渡します。 setGoldenInputs()。 引数として渡された入力に対して期待される出力を setGoldenOutputs()

setInferenceTimeoutMillis() で最大推論時間を定義できます。 (デフォルトは 5,000 ミリ秒)。定義した時間よりも推論に時間がかかる場合は、 構成は拒否されます

必要に応じて、カスタムの 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 開発者サービスから タスク API。これにより、 タスクを自動化できます。
検証呼び出しの結果を取得するには、 addOnSuccessListener() 呼び出すことができます。

インタープリタで検証済みの構成を使用する

ValidatedAccelerationConfigResult が 検証済みの構成をアクセラレーション構成として設定できます。 interpreterOptions.setAccelerationConfig()

構成キャッシュ

モデルに最適なアクセラレーションの構成が、次の日付で変更される可能性は クリックします。満足のいくアクセラレーション設定を受け取ると、 は、それをデバイスに保存し、アプリで取得して使用することで、 次のセッションで InterpreterOptions を作成する 別の検証を実行しています。serialize() メソッドと deserialize() メソッド: ValidatedAccelerationConfigResult は、保存と取得のプロセスを行います。 簡単になります。

サンプル アプリケーション

アクセラレーション サービスのその場で統合を確認するには、 サンプルアプリ

制限事項

現在、アクセラレーション サービスには次の制限があります。

  • 現時点では、CPU アクセラレーション構成と GPU アクセラレーション構成のみがサポートされています。
  • Google Play 開発者サービスでは LiteRT のみをサポートしており、 バンドル版の LiteRT を使用している場合は、これを使用してください。
  • アクセラレーション サービス SDK は、API レベル 22 以降のみをサポートします。

注意点

特に今後計画を立てる場合は、次の注意点をよくご確認ください 必要な手順は以下のとおりです。

  • ベータ版を終了し、安定版をリリースする前に、 新しい SDK がリリースされます。これには、 現在のベータ版とは異なります。引き続き使用するには、 新しい SDK に移行し、新しい SDK を アプリをタイムリーに更新する必要があります。破損の原因となる可能性があります。 ベータ版 SDK は、Google Play 開発者サービスとの互換性が 説明します。

  • Acceleration 内の特定の機能が必ず 今後、Service API または API 全体が一般提供となる予定です。これは、 無期限にベータ版のまま維持されたり、提供終了となったり、他のソリューションと統合されたりする場合があります。 特定のデベロッパー向けに設計されたパッケージに機能を統合できます。一部 API 自体を含む機能または API 全体を使用している場合、 最終的に一般提供される予定だが、具体的なスケジュールは できます。

利用規約とプライバシー ポリシー

利用規約

Acceleration Service API の使用には、Google API 利用規約 Service です。
また、Acceleration Service API は現在ベータ版です。 使用することで、 上記の注意事項のセクションに示し、Acceleration Service が 常に指定どおりに動作します。

プライバシー

Acceleration Service API を使用する場合、入力データの処理(例: 画像、動画、テキストなど)はすべてデバイス上で行われ、アクセラレーション サービス そのデータが Google のサーバーに送信されることはありません。そのため、Google の API を使用して 外部に送信されない入力データを処理できます。
Acceleration Service API は、Google サーバーに随時接続することがあります。 (バグの修正、モデルの更新、ハードウェア アクセラレータなど)を受け取ります。 互換性に関する情報が含まれています。Acceleration Service API は、この API に関連する アプリでの API のパフォーマンスと使用率を Google に提供します。Google は パフォーマンスの測定、API のデバッグ、維持、改善に使用する指標データ 不正使用や不正使用を検出できるよう努めています。詳しくは、プライバシー ポリシーをご覧ください。
デベロッパーは、Google によるデータ処理についてアプリユーザーに通知する必要があります。 適用される法律で義務付けられている、アクセラレーション サービスの指標データ。
収集するデータには次のものがあります。

  • デバイス情報(メーカー、モデル、OS バージョン、ビルドなど) ML ハードウェアアクセラレータ(GPU と DSP)を 利用できます診断と診断に使用 使用状況の分析です。
  • アプリの情報(パッケージ名 / バンドル ID、アプリのバージョン)。用途 使用状況の分析にも使用できます。
  • API 構成(画像形式、解像度など)。用途 使用状況の分析にも使用できます。
  • イベントタイプ(初期化、モデルのダウンロード、更新、実行、検出など)。 診断と使用状況の分析に使用されます。
  • エラーコード。診断に使用されます。
  • パフォーマンス指標。診断に使用されます。
  • ユーザーまたは一意に識別されない、インストールごとの ID 接続しますリモート構成と使用の操作に使用 分析できます
  • ネットワーク リクエスト送信者の IP アドレス。リモート構成に使用 診断できます収集された IP アドレスは一時的に保持されます。

サポートとフィードバック

TensorFlow Issue Tracker を使用して、フィードバックの提供やサポートを受けることができます。 問題やサポート リクエストは、 問題テンプレート Google Play 開発者サービスの LiteRT でダウンロードされました。