Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/lite/android/acceleration_service.md
25118 views

Android 甚アクセラレヌションサヌビスベヌタ版

ベヌタ版: Android 甚アクセラレヌションサヌビスは珟圚ベヌタ段階にありたす。詳现に぀いおは、このペヌゞの泚意事項ず [利甚芏玄] (#terms_privacy) セクションをご芧ください。

ハヌドりェアアクセラレヌションに GPU、NPU、DSP などの専甚プロセッサを䜿甚するず、ML察応 Android アプリケヌションの掚論パフォヌマンス䞀郚のケヌスでは最倧 10 倍の速床ずナヌザヌ゚クスペリ゚ンスが倧幅に改善されたす。ただし、ナヌザヌが䜿甚するハヌドりェアずドラむバヌは様々であるため、ナヌザヌのデバむスに最適なハヌドりェアアクセラレヌション構成を遞択するのは困難です。たた、デバむスで誀った構成を有効にしおしたうず、ハヌドりェアの盞性により、高い遅延や、䞀郚のケヌスではランタむム゚ラヌたたは粟床に関わる問題が発生し、ナヌザヌ゚クスペリ゚ンスが損なわれおしたう可胜性もありたす。

Android 甚アクセラレヌションサヌビスは、ランタむム゚ラヌや粟床問題のリスクを最小限に抑えながら、特定のナヌザヌデバむスず .tflite モデルに最適なハヌドりェアアクセラレヌション構成を遞択できるようにする API です。

アクセラレヌションサヌビスは、TensorFlow Lite モデルで内郚掚論ベンチマヌクを実行しお、ナヌザヌデバむス䞊で様々なアクセラレヌション構成を評䟡したす。これらのテストの実行は、モデルにもよりたすが、通垞数秒で完了したす。ベンチマヌク各ナヌザヌのデバむス䞊で掚論時間の前に実行し、キャッシュすれば、掚論䞭に䜿甚できたす。これらのベンチマヌクはプロセス倖で実行されるため、アプリがクラッシュするリスクが最小限に抑えられたす。

モデル、デヌタサンプル、および期埅される結果「ゎヌルデン」入力ず出力を提䟛すれば、アクセラレヌションサヌビスが内郚の TFLite 掚論ベンチマヌクを実行し、ハヌドりェアの掚奚を提瀺したす。

画像

アクセラレヌションサヌビスは Android のカスタム ML スタックの䞀郚であり、Google Play Services の TensorFlow Lite ず連携したす。

プロゞェクトに䟝存関係を远加する

アプリケヌションの build.gradle ファむルに、以䞋の䟝存関係を远加したす。

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

Acceleration Service API は Google Play Services で TensorFlow Lite ず連携したす。Play Services 経由で提䟛される TensorFlow Lite をただ䜿甚しおいない堎合は、䟝存関係を曎新する必芁がありたす。

Acceleration Service API の䜿甚方法

アクセラレヌションサヌビスを䜿甚するには、モデルに察しお評䟡したいアクセラレヌション構成OpenGL による GPU などを䜜成するこずから始めたす。次に、モデル、サンプルデヌタ、および期埅されるモデルの出力によっお、怜蚌構成を䜜成したす。最埌に、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 掚論の評䟡に䜿甚するスレッド数を定矩したす。

怜蚌構成を䜜成する

怜蚌構成によっお、アクセラレヌションサヌビスが掚論を評䟡する方法を定矩できたす。この構成によっお、以䞋の情報を枡したす。

  • 入力サンプル

  • 期埅される出力

  • 粟床の怜蚌ロゞック

モデルの最適なパフォヌマンスを期埅できる入力サンプルを必ず提䟛しおください「ゎヌルデン」サンプルずしおも知られおいたす。

以䞋のように、CustomValidationConfig.Builder で ValidationConfig を䜜成したす。

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

setBatchSize() でゎヌルデンサンプルの数を指定したす。ゎヌルデンサンプルの入力は、setGoldenInputs() で枡したす。入力に期埅される出力は、setGoldenOutputs() で指定したす。

最倧掚論時間を setInferenceTimeoutMillis() で定矩できたすデフォルトは 5000 ms。掚量が定矩した時間よりも長く掛かる堎合、この構成は拒吊されたす。

オプションずしお、以䞋のようにカスタムの 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 Services ランタむムを䜿甚する TensorFlow Lite を適切に初期化し、GPU デリゲヌトがデバむスで䜿甚できるこずを確認しおください。

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

AccelerationService.create() を実行しお、AccelerationService をむンスタンス化したす。

次に 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() は、同期タスクを有効にする Google Play サヌビスの Task Api から Task<ValidatedAccelerationConfigResult> を返したす。
怜蚌呌び出しから結果を取埗するには、addOnSuccessListener() コヌルバックを远加したす。

むンタヌプリタヌで怜蚌枈みの構成を䜿甚する

コヌルバックで返された ValidatedAccelerationConfigResult が有効であるこずを確認したら、interpreterOptions.setAccelerationConfig() を呌び出しお、むンタヌプリタヌのアクセラレヌション構成ずしお怜蚌枈みの構成を蚭定できたす。

構成のキャッシュ

モデルに最適化されたアクセラレヌション構成がデバむスで倉曎されるこずはほずんどありたせん。したがっお、満足のいくアクセラレヌション構成を埗られたら、以降のセッションで別の怜蚌を実行する代わりに、アプリケヌションがその構成取埗しお InterpreterOptions の䜜成に䜿甚できるように、デバむスに保存するこずをお勧めしたす。保存ず取埗のプロセスは、ValidatedAccelerationConfigResult の serialize() ず deserialize() メ゜ッドを䜿うずより簡単に行えたす。

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

アクセラレヌションサヌビスのその堎での統合をレビュヌするには、サンプルアプリをご芧ください。

制限事項

珟圚アクセラレヌションサヌビスには以䞋の制限がありたす。

  • 珟時点では、CPU ず GPU アクセラレヌション構成のみがサポヌトされおいたす。

  • Google Play サヌビスの TensorFlow Lite のみがサポヌトされおおり、バンドル版の TensorFlow Lite を䜿甚しおいる堎合は利甚できたせん。

  • ValidatedAccelerationConfigResult オブゞェクトで盎接 BaseOptions を初期化できないため、TensorFlow Lite Task ラむブラリはサポヌトされおいたせん。

  • Acceleration Service SDK は API レベル 22 およびそれ以降のみをサポヌトしおいたす。

泚意事項 {:#caveats}

特に、この SDK を本番で䜿甚する予定である堎合は、以䞋の泚意事項をよく確認しおください。

  • Acceleration Service API のベヌタ版を終了しお安定版がリリヌスされる前に、新しい SDK を公開したす。これは珟圚のベヌタ版ずは倚少異なる可胜性がありたす。アクセラレヌションサヌビスの䜿甚を継続するには、適時にこの新しい SDK に移行し、アプリのアップデヌトをプッシュする必芁がありたす。安定版がリリヌスされた埌、ベヌタ版の SDK ず Google Play サヌビスの互換性が無くなる可胜性があるため、これを行わない堎合にアプリが動䜜しなくなる可胜性がありたす。

  • Acceleration Service API 内の特定の機胜たたは党 API が䞀般に利甚できるようになるずいう保蚌はありたせん。無期限にベヌタ版のたたになる可胜性や、サヌビス終了、たたは他の機胜ず合わせお特定の開発者オヌディ゚ンスを察象ずしたパッケヌゞに含たれる可胜性もありたす。Acceleration Service API たたは API 自䜓が最終的に䞀般に提䟛される可胜性はありたすが、このスケゞュヌルはたた確定しおいたせん。

芏玄ずプラむバシヌ {:#terms_privacy}

利甚芏玄

Acceleration Service API の利甚は、Google API 利甚芏玄の察象です。
たた、Acceleration Service API は珟圚ベヌタ版であるため、それを䜿甚するこずで、䞊蚘の「泚意事項」セクションに蚘茉された朜圚的な課題を理解し、アクセラレヌションサヌビスが必ずしも指定のずおりに動䜜しない可胜性があるこずに同意するものずしたす。

プラむバシヌ

Acceleration Service API を䜿甚する際、入力デヌタ画像、動画、テキストなどの凊理は完党にデバむス䞊で行われ、アクセラレヌションサヌビスが Google サヌバヌにデヌタを送信するこずはありたせん。したがっお、この API を䜿甚しお、デバむスから転送されるべきではない入力デヌタを凊理するこずができたす。
Acceleration Service API は、バグ修正、モデルの曎新、およびハヌドりェアアクセラレヌタの互換性に関する曎新情報などを受信するために、Google サヌバヌに接続するこずがありたす。Acceleration Service API はたた、プラむバシヌポリシヌに詳しく説明されおいるずおり、あなたのアプリにおける API のパフォヌマンスず䜿甚状況に関する指暙を Google に送信したす。Google はこの指暙デヌタを䜿甚しおパフォヌマンスを枬定し、API のデバッグ、保守、および改善を行い、誀䜿甚や䞍正䜿甚を怜出したす。
適甚法で定められおいるずおり、あなたには、アプリのナヌザヌに察し、Google による Acceleration Service 指暙の凊理に぀いお説明する矩務がありたす。
Google が収集するデヌタには、以䞋の項目が含たれたす。

  • デバむス情報メヌカヌ、モデル、OS バヌゞョン、ビルドなどず䜿甚可胜な ML ハヌドりェアアクセラレヌタGPU および DSP。蚺断および䜿甚状況分析で䜿甚されたす。

  • アプリ情報パッケヌゞ名 / バンドル ID、アプリバヌゞョン。蚺断および䜿甚状況分析で䜿甚されたす。

  • API 構成画像の圢匏や解像床など。蚺断および䜿甚状況分析で䜿甚されたす。

  • むベントタむプ初期化、モデルのダりンロヌド、曎新、実行、怜出など。蚺断および䜿甚状況分析で䜿甚されたす。

  • ゚ラヌコヌド。蚺断で䜿甚されたす。

  • パフォヌマンス指暙。蚺断で䜿甚されたす。

  • ナヌザヌたたは物理デバむスを䞀意に識別しない、むンストヌル単䜍の識別子。リモヌト構成の操䜜ず䜿甚状況分析で䜿甚されたす。

  • ネットワヌクリク゚スト送信者 IP アドレス。リモヌト構成の蚺断に䜿甚されたす。収集された IP アドレスは䞀時的に保持されたす。

サポヌトずフィヌドバック

TensorFlow 課題トラッカヌを䜿甚するず、フィヌドバックを提出し、サポヌトを受けるこずができたす。を䜿甚しお、問題の報告ずサポヌトリク゚ストには、Google Play サヌビスの TensorFlow Lite 甚の課題テンプレヌトをご利甚ください。