將 TensorFlow Lite 模型從 Firebase ML 遷移至 Cloud Storage

如果您使用 Firebase Machine Learning 代管自訂模型,請務必在 2027 年 6 月 15 日 Firebase ML 代管服務停止運作前,改用其他解決方案。

您可以改用 Firebase 的 Cloud Storage 代管模型。請按照本指南,將模型從 Firebase ML 遷移至 Cloud Storage。

下載 TensorFlow Lite 模型

如果模型尚未儲存在本機,請從 Firebase 專案下載。方法有兩種:

從 Firebase 控制台逐一下載

  1. 在 Firebase 控制台中開啟「Machine Learning」頁面部分。
  2. 針對要遷移的每個模型,按一下三點溢位選單,然後按一下「下載模型」

大量下載所有代管模型

  1. 在 Firebase 控制台中開啟「Machine Learning」頁面。
  2. 按一下「取得大量下載的指令」按鈕,取得可下載專案中所有模型的 curl 指令。這些網址會在 7 天後失效。
  3. 在本機終端機或 Cloud Shell 中執行指令。如果使用 Cloud Shell,請注意磁碟儲存空間上限為 5 GB。這項指令會將模型下載至名為 hosted_models 的本機資料夾。

使用 Cloud Storage 託管模型

模型儲存在本機後,您需要將其上傳至 Cloud Storage bucket。

選擇符合需求的上傳方式:

一次上傳一個模型

  1. 建立 Storage bucket:在 Firebase 控制台中,依序前往「資料庫和儲存空間」>「儲存空間」,然後按照新手上路步驟建立 bucket (如果尚未建立)。請注意,這需要帳單帳戶;詳情請參閱 Firebase 定價
  2. 在「Storage」部分中,將 .tflite 模型檔案上傳至所需路徑。

大量上傳模型

  1. 建立 Storage bucket:在 Firebase 控制台中,依序前往「資料庫和儲存空間」>「儲存空間」,然後按照新手上路步驟建立 bucket (如果尚未建立)。請注意,這需要帳單帳戶;詳情請參閱 Firebase 定價
  2. 使用下列 gcloud 指令,上傳本機 hosted_models 資料夾中的所有模型:

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

設定安全機制和應用程式整合

  1. 請確認您的儲存空間安全性規則允許應用程式讀取模型檔案。舉例來說,您可以限制只有通過驗證的使用者才能存取。

  2. 在應用程式中新增 Storage:請按照 AndroidAppleFlutter 的設定指南操作。

  3. 更新應用程式程式碼,從新的 Storage bucket 下載 .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 遠端設定,在應用程式中動態更新模型路徑,不必發布新版本。

選用:遷移至 LiteRT CompiledModel API

如果應用程式仍使用舊版 TensorFlow Lite Interpreter API,建議遷移至 LiteRT CompiledModel API,因為相較於舊版 API,LiteRT CompiledModel API 可提供更完善的硬體加速支援和其他改良功能。