TensorFlow Lite モデルを Firebase ML から Cloud Storage に移行する

Firebase Machine Learning を使用してカスタムモデルをホストしている場合は、2027 年 6 月 15 日に Firebase ML ホスティング サービスがシャットダウンされる前に、別のソリューションに移行する必要があります。

別の方法として、Cloud Storage for Firebase を使用してモデルをホストすることもできます。このガイドに沿って、Firebase ML から Cloud Storage にモデルを移行します。

TensorFlow Lite モデルをダウンロードする

モデルがローカルに保存されていない場合は、Firebase プロジェクトからダウンロードします。これを行うには、次の 2 つの方法があります。

Firebase コンソールから 1 つずつダウンロードする

  1. Firebase コンソールで [Machine Learning] ページ セクションを開きます。
  2. 移行するモデルごとに、その他アイコンのオーバーフロー メニューをクリックし、[モデルをダウンロード] をクリックします。

ホストされているすべてのモデルを一括でダウンロードする

  1. Firebase コンソールで [Machine Learning] ページを開きます。
  2. [一括ダウンロードのコマンドを取得] ボタンをクリックして、プロジェクト内のすべてのモデルをダウンロードする curl コマンドを取得します。これらの URL は 7 日後に期限切れになります。
  3. ローカル ターミナルまたは Cloud Shell でコマンドを実行します。Cloud Shell を使用する場合は、5 GB のディスク ストレージの上限に注意してください。このコマンドにより、モデルが hosted_models という名前のローカル フォルダにダウンロードされます。

Cloud Storage を使用してモデルをホストする

モデルをローカルに保存したら、Cloud Storage バケットにアップロードする必要があります。

ニーズに合ったアップロード方法を選択します。

モデルを 1 つずつアップロードする

  1. Storage バケットを作成します。Firebase コンソールで、[データベースとストレージ] > [ストレージ] に移動し、オンボーディングの手順に沿ってバケットを作成します(まだ作成していない場合)。これには課金アカウントが必要です。詳しくは、Firebase の料金をご覧ください。
  2. [ストレージ] セクションで、.tflite モデルファイルを目的のパスにアップロードします。

モデルを一括でアップロードする

  1. Storage バケットを作成します。Firebase コンソールで、[データベースとストレージ] > [ストレージ] に移動し、オンボーディングの手順に沿ってバケットを作成します(まだ作成していない場合)。これには課金アカウントが必要です。詳しくは、Firebase の料金をご覧ください。
  2. 次の gcloud コマンドを使用して、ローカルの hosted_models フォルダからすべてのモデルをアップロードします。

    gcloud storage rsync --recursive ./hosted_models gs://<your-storage-bucket>/models/

セキュリティとアプリの統合を構成する

  1. ストレージ セキュリティ ルールで、アプリがモデルファイルを読み取れるようにします。たとえば、認証済みユーザーにアクセスを制限できます。

  2. アプリに Storage を追加します。AndroidAppleFlutter の設定ガイドに沿って操作します。

  3. 新しい Storage バケットから .tflite ファイルをダウンロードするようにアプリケーション コードを更新します。

    Android

    modelRef = storage.getReferenceFromUrl("gs://YOUR_BUCKET/path/to/model.tflite")
    
    val localFile = File.createTempFile("models", "tflite")
    
    modelRef.getFile(localFile).addOnSuccessListener {
        // Local temp file has been created
    }.addOnFailureListener {
        // Handle any errors
    }
    

    Apple

    let gsReference = storage.reference(forURL: "gs://YOUR_BUCKET/path/to/model.tflite")
    
    // Create local filesystem URL
    let localURL = URL(string: "path/to/model.tflite")!
    
    // Download to the local filesystem
    let downloadTask = gsReference.write(toFile: localURL) { url, error in
      if let error = error {
        // Uh-oh, an error occurred!
      } else {
        // Local file URL for "model.tflite" is returned
      }
    }
    

    Flutter

    final modelRef = FirebaseStorage.instance.refFromURL("gs://YOUR_BUCKET/path/to/model.tflite");
    
    final appDocDir = await getApplicationDocumentsDirectory();
    final filePath = "${appDocDir.absolute}/models/model.tflite";
    final file = File(filePath);
    
    final downloadTask = modelRef.writeToFile(file);
    downloadTask.snapshotEvents.listen((taskSnapshot) {
      switch (taskSnapshot.state) {
        case TaskState.running:
          // TODO: Handle this case.
          break;
        case TaskState.paused:
          // TODO: Handle this case.
          break;
        case TaskState.success:
          // TODO: Handle this case.
          break;
        case TaskState.canceled:
          // TODO: Handle this case.
          break;
        case TaskState.error:
          // TODO: Handle this case.
          break;
      }
    });
    

    モデルがダウンロードされたら、既存の Tensorflow Lite ライブラリを使用してモデルを読み込み、使用できます。

  4. (省略可)Firebase Remote Config を使用して、新しいリリースを必要とせずにアプリ内のモデルパスを動的に更新することを検討してください。

省略可: LiteRT CompiledModel API に移行する

アプリで以前の TensorFlow Lite Interpreter API をまだ使用している場合は、LiteRT CompiledModel API への移行を検討してください。この API は、以前の API よりもハードウェア アクセラレーションのサポートが改善され、その他の改善も行われています。