Migracja modeli TensorFlow Lite z Firebase ML do Cloud Storage

Jeśli używasz Firebase Machine Learning do hostowania modeli niestandardowych, musisz przejść na inne rozwiązanie, zanim usługa hostingu Firebase ML zostanie wyłączona 15 czerwca 2027 r.

Jedną z alternatyw jest hostowanie modeli za pomocą 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 Firebase. Możesz to zrobić na 2 sposoby:

Pobieranie modeli pojedynczo z konsoli Firebase

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

Zbiorcze pobieranie wszystkich hostowanych modeli

  1. W konsoli Firebase otwórz stronę Machine Learning.
  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 lokalnym terminalu lub w Cloud Shell. Jeśli używasz Cloud Shell, pamiętaj o limicie 5 GB miejsca na dysku. Polecenie pobierze modele do folderu lokalnego o nazwie hosted_models.

Hostowanie modeli za pomocą Cloud Storage

Gdy modele będą dostępne 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ęć > Pamięć i wykonaj czynności wprowadzające, aby utworzyć zasobnik, jeśli jeszcze go nie masz. Pamiętaj, że wymaga to konta rozliczeniowego. Więcej informacji znajdziesz w cenniku Firebase.
  2. W sekcji Pamięć 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ęć > Pamięć i wykonaj czynności wprowadzające, aby utworzyć zasobnik, jeśli jeszcze go nie masz. Pamiętaj, że wymaga to konta rozliczeniowego. Więcej informacji znajdziesz w cenniku Firebase.
  2. Aby przesłać wszystkie modele z lokalnego folderu hosted_models, użyj tego polecenia gcloud:

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

Konfigurowanie zabezpieczeń i integracji z aplikacją

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

  2. Dodaj Storage do aplikacji: postępuj zgodnie z instrukcjami konfiguracji na Androidzie, Apple, lub Flutterze.

  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ć dotychczasowej biblioteki Tensorflow Lite, aby go wczytać i używać.

  4. (Opcjonalnie) Możesz użyć 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 z starszym interfejsem API.