使用 Firebase 增强 TensorFlow Lite 部署
2020 年 6 月 26 日
发布者 Khanh LeViet,TensorFlow 开发倡导者


TensorFlow Lite 是在移动设备和边缘设备上运行 TensorFlow 模型的官方框架。它被用于 Google 的许多主要移动应用程序,以及第三方开发人员的应用程序。在生产环境中部署 TensorFlow Lite 模型时,您可能会遇到需要一些框架本身未提供的支持功能的情况,例如
  • 无线部署 TensorFlow Lite 模型
  • 衡量用户设备上的模型推理速度
  • 在生产环境中 A/B 测试多个模型版本
在这些情况下,您可以利用 Firebase 来快速实现这些功能,只需几行代码即可,而无需自行构建解决方案。

Firebase 是 Google 的综合应用程序开发平台,它提供基础设施和库,使 Android 和 iOS 的应用程序开发变得更加容易。 Firebase 机器学习 为在移动应用程序中使用机器学习提供多种解决方案。

在本博文中,我们将向您展示如何利用 Firebase 来增强您在生产环境中部署 TensorFlow Lite 模型的方式。我们还为 AndroidiOS 提供了 codelab,向您逐步展示如何将 Firebase 功能集成到您的 TensorFlow Lite 应用程序中。

立即无线部署模型

您可能希望将机器学习模型无线部署到您的用户,而不是将其捆绑到应用程序二进制文件中。例如,构建模型的机器学习团队与移动应用程序团队的发布周期不同,他们希望在移动应用程序发布后独立发布新模型。在另一个示例中,您可能希望延迟加载机器学习模型,以节省不需要 ML 功能的用户设备存储空间,并减小应用程序大小,以便从 Play 商店和 App Store 更快地下载。

使用 Firebase 机器学习,您可以立即部署模型。您可以从 Firebase 控制台将 TensorFlow Lite 模型上传到 Firebase。 您也可以使用 Firebase ML 模型管理 API 将模型上传到 Firebase。当您拥有自动使用新数据重新训练模型并将其直接上传到 Firebase 的机器学习管道时,此方法特别有用。以下是如何使用 Python 将 TensorFlow Lite 模型上传到 Firebase ML 的代码片段。
# Load a tflite file and upload it to Cloud Storage.
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example.tflite')

# Create the model object.
tflite_format = ml.TFLiteFormat(tflite_source=source)
model = ml.Model(display_name="example_model", model_format=tflite_format)

# Add the model to your Firebase project and publish it.
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)
将 TensorFlow Lite 模型上传到 Firebase 后,您可以随时在移动应用程序中下载它,并使用下载的模型初始化 TensorFlow Lite 解释器。以下是您在 Android 上的操作方法。
val remoteModel = FirebaseCustomRemoteModel.Builder("example_model").build()

// Get the last/cached model file.
FirebaseModelManager.getInstance().getLatestModelFile(remoteModel)
  .addOnCompleteListener { task ->
    val modelFile = task.result
    if (modelFile != null) {
      // Initialize a TF Lite interpreter with the downloaded model.
      interpreter = Interpreter(modelFile)
    }
  }

衡量用户设备上的推理速度

如今市场上出现了各种各样的移动设备,从配备强大芯片的旗舰设备(经过优化以运行机器学习模型)到配备低端 CPU 的廉价设备。因此,您的模型在用户设备上的推理速度可能在用户群中差异很大,让您想知道您的模型是否太慢,甚至对某些使用低端设备的用户来说不可用。

您可以使用性能监控来衡量模型推理在所有用户设备上的执行时间。由于提前进行测试时不可能拥有市场上的所有设备,因此在生产环境中了解模型性能的最佳方法是在用户设备上直接进行衡量。Firebase 性能监控是用于衡量移动应用程序性能的通用工具,因此您还可以衡量应用程序中的任何任意过程,例如预处理或后处理代码。以下是您在 Android 上的操作方法。
// Initialize a Firebase Performance Monitoring trace
val modelInferenceTrace = firebasePerformance.newTrace("model_inference")

// Run inference with TensorFlow Lite
interpreter.run(...)

// End the Firebase Performance Monitoring trace
modelInferenceTrace.stop()
在每个用户设备上衡量的性能数据将上传到 Firebase 服务器,并进行聚合以提供模型在用户群中的整体性能概览。从 Firebase 控制台,您可以轻松识别出推理速度较慢的设备,或查看不同操作系统版本之间的推理速度差异。

A/B 测试多个模型版本

当您对机器学习模型进行迭代并提出改进的模型时,您可能非常渴望立即将其发布到生产环境中。但是,模型在测试数据上表现良好,但在生产环境中却失败的情况并不罕见。因此,最佳实践是将模型推广到一小部分用户,使用原始模型进行 A/B 测试,并仔细监控它对重要业务指标的影响,然后再将其推广到所有用户。

Firebase A/B 测试使您能够以最小的工作量运行此类 A/B 测试。所需步骤如下:
  1. 将您要测试的所有 TensorFlow Lite 模型版本上传到 Firebase,并为每个版本指定不同的名称。
  2. 在 Firebase 控制台中设置 Firebase 远程配置,以管理应用程序中使用的 TensorFlow Lite 模型名称。
    • 更新客户端应用程序,使其从远程配置中获取 TensorFlow Lite 模型名称,并从 Firebase 下载相应的 TensorFlow Lite 模型。
  3. 在 Firebase 控制台中设置 A/B 测试。
    • 确定测试计划(例如,将每个模型版本测试的用户群比例)。
    • 确定您要优化的指标(例如,转化次数、用户留存率等)。
以下是如何使用 TensorFlow Lite 模型设置 A/B 测试的示例。我们将模型的两个版本中的每一个都提供给 50% 的用户群,目标是优化多个指标。 然后,我们将应用程序更改为从 Firebase 获取模型名称,并使用它来下载分配给每个设备的 TensorFlow Lite 模型。
val remoteConfig = Firebase.remoteConfig
remoteConfig.fetchAndActivate()
  .addOnCompleteListener(this) { task ->
      // Get the model name from Firebase Remote Config
      val modelName = remoteConfig["model_name"].asString()
      
      // Download the model from Firebase ML
      val remoteModel = FirebaseCustomRemoteModel.Builder(modelName).build()
      val manager = FirebaseModelManager.getInstance()
      manager.download(remoteModel).addOnCompleteListener {
        // Initialize a TF Lite interpreter with the downloaded model
        interpreter = Interpreter(modelFile)
      }
  }
启动 A/B 测试后,Firebase 将自动聚合用户对不同模型版本的反应指标,并向您展示哪个版本表现更好。如果您对 A/B 测试结果充满信心,只需单击一下即可将更好的版本推广到所有用户。

后续步骤

查看此 codelab(Android 版本或 iOS 版本),逐步了解如何将这些 Firebase 功能集成到您的应用程序中。它从使用 TensorFlow Lite 模型识别手写数字的应用程序开始,并向您展示
  • 如何通过 Firebase 控制台和 Firebase 模型管理 API 将 TensorFlow Lite 模型上传到 Firebase。
  • 如何动态地从 Firebase 下载 TensorFlow Lite 模型并使用它。
  • 如何使用 Firebase 性能监控衡量用户设备上的预处理、后处理和推理时间。
  • 如何使用 Firebase A/B 测试对两个版本的手写数字分类模型进行 A/B 测试。

致谢

Amy Jang、Ibrahim Ulukaya、Justin Hong、Morgan Chen、Sachin Kotwani
下一篇文章
 Enhance your TensorFlow Lite deployment with Firebase

发布者 Khanh LeViet,TensorFlow 开发倡导者


TensorFlow Lite 是在移动设备和边缘设备上运行 TensorFlow 模型的官方框架。它被用于 Google 的许多主要移动应用程序,以及第三方开发人员的应用程序。在生产环境中部署 TensorFlow Lite 模型时,您可能会遇到需要一些框架本身未提供的支持功能的情况,例如…