Firebase ML에서 Cloud Storage로 TensorFlow Lite 모델 이전

Firebase 머신러닝을 사용하여 맞춤 모델을 호스팅하는 경우 2027년 6월 15일에 Firebase ML 호스팅 서비스가 종료되기 전에 다른 솔루션으로 이전해야 합니다.

대안으로 Firebase용 Cloud Storage를 사용하여 모델을 호스팅할 수 있습니다. 이 가이드에 따라 Firebase ML에서 Cloud Storage로 모델을 이전하세요.

TensorFlow Lite 모델 다운로드

모델이 아직 로컬에 저장되어 있지 않다면 Firebase 프로젝트에서 다운로드합니다. 다음 두 가지 방법으로 이 작업을 수행할 수 있습니다.

Firebase Console에서 한 번에 하나씩 다운로드

  1. Firebase Console에서 머신러닝 페이지 섹션을 엽니다.
  2. 이전하려는 각 모델의 점 3개로 된 더보기 메뉴를 클릭한 다음 모델 다운로드를 클릭합니다.

호스팅된 모델을 모두 일괄 다운로드

  1. Firebase Console에서 머신러닝 페이지를 엽니다.
  2. 일괄 다운로드 명령어 가져오기 버튼을 클릭하여 프로젝트의 모든 모델을 다운로드하는 curl 명령어를 가져옵니다. 이 URL은 7일 후에 만료됩니다.
  3. 로컬 터미널 또는 Cloud Shell에서 명령어를 실행합니다. Cloud Shell을 사용하는 경우 5GB 디스크 스토리지 한도에 유의하세요. 이 명령어는 모델을 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. 스토리지 보안 규칙을 통해 앱이 모델 파일을 읽을 수 있는지 확인합니다. 예를 들어 인증된 사용자에게만 액세스를 허용할 수 있습니다.

  2. 앱에 스토리지 추가: Android, Apple 또는 Flutter 설정 가이드를 따릅니다.

  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 원격 구성을 사용하는 것이 좋습니다.

선택사항: LiteRT CompiledModel API로 이전

앱에서 여전히 기존 TensorFlow Lite Interpreter API를 사용하는 경우 기존 API에 비해 하드웨어 가속 지원 및 기타 개선사항이 제공되는 LiteRT CompiledModel API로 이전하는 것이 좋습니다.