将 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 项目中下载模型。您可以通过以下两种方式下载:

从 Firebase 控制台逐个下载

  1. 在 Firebase 控制台中打开机器学习页面部分。
  2. 对于要迁移的每个模型,点击其三点状溢出菜单,然后点击下载模型

批量下载所有托管模型

  1. 在 Firebase 控制台中打开机器学习页面。
  2. 点击获取批量下载命令按钮,获取用于下载项目中的所有模型的 curl 命令。这些网址将在 7 天后失效。
  3. 在本地终端或 Cloud Shell 中运行该命令。如果使用 Cloud Shell,请注意其磁盘存储空间上限为 5 GB。该命令会将您的模型下载到名为 hosted_models 的本地文件夹中。

使用 Cloud Storage 托管模型

将模型下载到本地后,您需要将其上传到 Cloud Storage 存储分区。

选择符合您需求的上传方法:

一次上传一个模型

  1. 创建存储分区:在 Firebase 控制台中,依次前往数据库和存储 > 存储,然后按照初始配置步骤创建存储分区(如果尚未创建)。请注意,这需要结算账号;如需了解详情,请参阅 Firebase 定价
  2. 存储空间部分中,将 .tflite 模型文件上传到所需路径。

批量上传模型

  1. 创建存储分区:在 Firebase 控制台中,依次前往数据库和存储 > 存储,然后按照初始配置步骤创建存储分区(如果尚未创建)。请注意,这需要结算账号;如需了解详情,请参阅 Firebase 定价
  2. 使用以下 gcloud 命令上传本地 hosted_models 文件夹中的所有模型:

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

配置安全性和应用集成

  1. 确保您的 Storage 安全规则允许您的应用读取模型文件。例如,您可以限制只有经过身份验证的用户才能访问。

  2. 向应用添加 Storage:按照 AndroidAppleFlutter 的设置指南进行操作。

  3. 更新应用代码,以便从新的存储分区下载 .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 提供了更出色的硬件加速支持和其他改进。