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

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

代替手段として、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 コンソールで、 [データベースとストレージ] > [Storage] に移動し、オンボーディングの手順に沿ってバケットを作成します。これには課金アカウントが必要です。詳細については、 Firebase の料金をご覧ください。
  2. 引き続き [Storage] セクションで、.tflite モデルファイルを目的のパスにアップロードします。

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

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

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

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

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

  2. アプリに Storage を追加します。設定ガイドに沿って操作してください。 AndroidApple、 または Flutter

  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 よりもハードウェア アクセラレーションのサポートが強化され、その他の機能も改善されています。