Migrar modelos do TensorFlow Lite do Firebase ML para o Cloud Storage

Se você usa o Firebase Machine Learning para hospedar modelos personalizados, migre para outra solução antes que o serviço de hospedagem do Firebase ML seja desativado em 15 de junho de 2027.

Uma alternativa é hospedar seus modelos usando o Cloud Storage para Firebase. Siga este guia para migrar seus modelos do Firebase ML para o Cloud Storage.

Fazer o download dos modelos do TensorFlow Lite

Se você ainda não tiver seus modelos armazenados localmente, faça o download deles no seu projeto do Firebase. Você tem duas opções para fazer isso:

Fazer o download de um por vez no console do Firebase

  1. Abra a seção da página Machine Learning no console do Firebase.
  2. Para cada modelo que você quer migrar, clique no menu flutuante de três pontos e em Fazer o download do modelo.

Fazer o download de todos os modelos hospedados em massa

  1. Abra a página Machine Learning no console do Firebase.
  2. Clique no botão Obter comando para download em massa para receber um comando curl que faz o download de todos os modelos no projeto. Esses URLs expiram em sete dias.
  3. Execute o comando no terminal local ou no Cloud Shell. Se você estiver usando o Cloud Shell, observe o limite de armazenamento em disco de 5 GB. O comando vai fazer o download dos modelos para uma pasta local chamada hosted_models.

Hospedar modelos usando o Cloud Storage

Depois de ter os modelos localmente, faça o upload deles para um bucket do Cloud Storage.

Escolha o método de upload que atenda às suas necessidades:

Fazer o upload dos modelos um por vez

  1. Crie um bucket do Storage: no console do Firebase, acesse Bancos de dados e armazenamento > Storage e siga as etapas de integração para criar um bucket, se ainda não tiver feito isso. Isso exige uma conta de faturamento. Consulte os preços do Firebase para mais detalhes.
  2. Ainda na seção Storage, faça o upload dos arquivos de modelo .tflite para o caminho desejado.

Fazer o upload dos modelos em massa

  1. Crie um bucket do Storage: no console do Firebase, acesse Bancos de dados e armazenamento > Storage e siga as etapas de integração para criar um bucket, se ainda não tiver feito isso. Isso exige uma conta de faturamento. Consulte os preços do Firebase para mais detalhes.
  2. Use o seguinte comando gcloud para fazer o upload de todos os modelos da pasta local hosted_models:

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

Configurar a segurança e a integração do app

  1. Verifique se as regras de segurança do Storage permitem que o app leia os arquivos de modelo. Por exemplo, é possível restringir o acesso a usuários autenticados.

  2. Adicione o Storage ao seu app: siga os guias de configuração para Android, Apple, ou Flutter.

  3. Atualize o código do aplicativo para fazer o download dos arquivos .tflite do novo bucket do 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;
      }
    });
    

    Depois que o modelo for baixado, você poderá usar a biblioteca do Tensorflow Lite para carregar e usar o modelo.

  4. (Opcional) Considere usar a Configuração remota do Firebase para atualizar dinamicamente os caminhos do modelo no app sem exigir um novo lançamento.

Opcional: migrar para a API CompiledModel do LiteRT

Se o app ainda usa a API Interpreter legada do TensorFlow Lite, considere migrar para a API LiteRT CompiledModel, que oferece suporte aprimorado à aceleração de hardware e outras melhorias em relação à API legada.