העברה של מודלים של TensorFlow Lite מ-Firebase ML ל-Cloud Storage

אם אתם משתמשים ב-Firebase Machine Learning כדי לארח מודלים בהתאמה אישית, אתם צריכים לעבור לפתרון אחר לפני ששירות האירוח של Firebase ML ייסגר ב-15 ביוני 2027.

חלופה אפשרית היא לארח את המודלים באמצעות Cloud Storage for Firebase. כדי להעביר את המודלים מ-Firebase ML ל-Cloud Storage, פועלים לפי ההוראות במדריך הזה.

הורדת מודלים של TensorFlow Lite

אם המודלים שלכם עדיין לא שמורים באופן מקומי, אתם צריכים להוריד אותם מפרויקט Firebase. יש שתי אפשרויות לעשות את זה:

הורדה של כל קובץ בנפרד ממסוף Firebase

  1. פותחים את הקטע Machine Learning במסוף Firebase.
  2. לכל מודל שרוצים להעביר, לוחצים על תפריט האפשרויות הנוספות (3 נקודות) ואז על הורדת המודל.

הורדה של כל המודלים המתארחים בכמות גדולה

  1. פותחים את הדף Machine Learning במסוף Firebase.
  2. לוחצים על הלחצן קבלת פקודה להורדה בכמות גדולה כדי לקבל פקודה curl להורדה של כל המודלים בפרויקט. כתובות ה-URL האלה יפוגו תוך 7 ימים.
  3. מריצים את הפקודה במסוף המקומי או ב-Cloud Shell. אם משתמשים ב-Cloud Shell, חשוב לזכור את מגבלת האחסון בדיסק של 5GB. הפקודה תוריד את המודלים לתיקייה מקומית בשם hosted_models.

אירוח המודלים באמצעות Cloud Storage

אחרי שיש לכם את המודלים באופן מקומי, אתם צריכים להעלות אותם לקטגוריה ב-Cloud Storage.

בוחרים את שיטת ההעלאה שמתאימה לצרכים שלכם:

העלאה של כל מודל בנפרד

  1. יוצרים מאגר Storage: במסוף Firebase, עוברים אל Databases & Storage > Storage ופועלים לפי השלבים להפעלת השירות כדי ליצור מאגר, אם עדיין לא יצרתם מאגר. שימו לב: נדרש חשבון לחיוב. פרטים נוספים זמינים במאמר תמחור של Firebase.
  2. בקטע Storage, מעלים את קובצי המודל .tflite לנתיב הרצוי.

העלאת מודלים בכמות גדולה

  1. יוצרים מאגר Storage: במסוף Firebase, עוברים אל Databases & Storage > Storage ופועלים לפי השלבים להפעלת השירות כדי ליצור מאגר, אם עדיין לא יצרתם מאגר. שימו לב: נדרש חשבון לחיוב. פרטים נוספים זמינים במאמר תמחור של Firebase.
  2. כדי להעלות את כל המודלים מהתיקייה המקומית hosted_models, משתמשים בפקודה gcloud הבאה:

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

הגדרת אבטחה ושילוב אפליקציות

  1. מוודאים שכללי האבטחה של האחסון מאפשרים לאפליקציה לקרוא את קובצי המודל. לדוגמה, אפשר להגביל את הגישה למשתמשים מאומתים.

  2. מוסיפים אחסון לאפליקציה: פועלים לפי מדריכי ההגדרה ל-Android,‏ Apple או Flutter.

  3. מעדכנים את קוד האפליקציה כדי להוריד את הקבצים .tflite מהקטגוריה החדשה ב-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;
      }
    });
    

    אחרי שמורידים את המודל, אפשר להשתמש בספריית Tensorflow Lite הקיימת כדי לטעון את המודל ולהשתמש בו.

  4. (אופציונלי) אפשר להשתמש בהגדרת תצורה מרחוק ב-Firebase כדי לעדכן באופן דינמי את נתיבי המודלים באפליקציה בלי לפרסם גרסה חדשה.

אופציונלי: מעבר ל-LiteRT CompiledModel API

אם האפליקציה שלכם עדיין משתמשת ב-API מדור קודם של TensorFlow Lite‏ Interpreter, כדאי לשקול מעבר ל-LiteRT CompiledModel API, שמציע תמיכה משופרת בהאצת חומרה ושיפורים נוספים בהשוואה ל-API מדור קודם.