Migracja modeli TensorFlow Lite z Firebase ML do Cloud Storage

Jeśli korzystasz z usługi Firebase Machine Learning do hostowania modeli niestandardowych, musisz przejść na inne rozwiązanie przed wyłączeniem usługi hostingu Firebase ML 15 czerwca 2027 r.

Możesz też hostować modele w Cloud Storage for Firebase. Aby przenieść modele z Firebase ML do Cloud Storage, postępuj zgodnie z tym przewodnikiem.

Pobieranie modeli TensorFlow Lite

Jeśli nie masz jeszcze modeli zapisanych lokalnie, pobierz je z projektu w Firebase. Możesz to zrobić na 2 sposoby:

Pobieranie ich pojedynczo z konsoli Firebase

  1. Otwórz sekcję Machine Learning w konsoli Firebase.
  2. W przypadku każdego modelu, który chcesz przenieść, kliknij rozszerzone menu z 3 kropkami, a następnie kliknij Pobierz model.

Zbiorcze pobieranie wszystkich hostowanych modeli

  1. Otwórz stronę Machine Learning w konsoli Firebase.
  2. Kliknij przycisk Pobierz polecenie do pobierania zbiorczego, aby uzyskać polecenie curl, które pobiera wszystkie modele w projekcie. Te adresy URL wygasną za 7 dni.
  3. Uruchom polecenie w terminalu lokalnym lub w Cloud Shell. Jeśli używasz Cloud Shell, pamiętaj o limicie 5 GB miejsca na dysku. Polecenie pobierze modele do lokalnego folderu o nazwie hosted_models.

Hostowanie modeli za pomocą Cloud Storage

Po utworzeniu modeli lokalnie musisz przesłać je do zasobnika Cloud Storage.

Wybierz metodę przesyłania, która odpowiada Twoim potrzebom:

Przesyłanie modeli pojedynczo

  1. Utwórz zasobnik Storage: w konsoli Firebase otwórz Bazy danych i pamięć > Storage i postępuj zgodnie z instrukcjami, aby utworzyć zasobnik, jeśli jeszcze tego nie zrobisz. Pamiętaj, że wymaga to konta rozliczeniowego. Więcej informacji znajdziesz na stronie Ceny Firebase.
  2. W sekcji Miejsce na dane prześlij pliki modelu .tflite do wybranej ścieżki.

Zbiorcze przesyłanie modeli

  1. Utwórz zasobnik Storage: w konsoli Firebase otwórz Bazy danych i pamięć masowa > Storage i postępuj zgodnie z instrukcjami, aby utworzyć zasobnik, jeśli jeszcze tego nie zrobisz. Pamiętaj, że wymaga to konta rozliczeniowego. Więcej informacji znajdziesz na stronie Ceny Firebase.
  2. Aby przesłać wszystkie modele z lokalnego folderu gcloud, użyj tego polecenia:hosted_models

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

Konfigurowanie zabezpieczeń i integracji aplikacji

  1. Upewnij się, że reguły zabezpieczeń usługi Storage umożliwiają aplikacji odczytywanie plików modelu. Możesz na przykład ograniczyć dostęp do uwierzytelnionych użytkowników.

  2. Dodaj do aplikacji usługę Storage: postępuj zgodnie z przewodnikami konfiguracji dla Androida, Apple lub Fluttera.

  3. Zaktualizuj kod aplikacji, aby pobierać pliki .tflite z nowego zasobnika Storage.

    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;
      }
    });
    

    Po pobraniu modelu możesz użyć istniejącej biblioteki TensorFlow Lite, aby go wczytać i z niego korzystać.

  4. (Opcjonalnie) Rozważ użycie Zdalnej konfiguracji Firebase, aby dynamicznie aktualizować ścieżki modeli w aplikacji bez konieczności publikowania nowej wersji.

Opcjonalnie: przejście na interfejs LiteRT CompiledModel API

Jeśli Twoja aplikacja nadal korzysta ze starszego interfejsu TensorFlow Lite Interpreter API, rozważ przejście na interfejs LiteRT CompiledModel API, który oferuje lepszą obsługę akceleracji sprzętowej i inne ulepszenia w porównaniu ze starszym interfejsem API.