Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

לפרוס ולנהל מודלים מותאמים אישית

באפשרותך לפרוס ולנהל מודלים מותאמים אישית ומודלים שהוכשרו עם AutoML באמצעות מסוף Firebase או פקידי ה- SDK של Python ו- Node.js של Firebase Admin. אם אתה רק רוצה לפרוס מודל ולעיתים לעדכן אותו, בדרך כלל הכי פשוט להשתמש במסוף Firebase. ה- SDK של מנהל המערכת יכול להיות מועיל בעת שילוב עם צינורות בנייה, עבודה עם מחברות Colab או Jupyter ותהליכי עבודה אחרים.

פרוס ונהל דגמים במסוף Firebase

דגמי TensorFlow Lite

כדי לפרוס מודל TensorFlow Lite באמצעות קונסולת Firebase:

  1. פתח את עמוד הדגם המותאם אישית של Firebase ML במסוף Firebase.
  2. לחץ על הוסף דגם מותאם אישית (או הוסף דגם אחר ).
  3. ציין שם שישמש לזיהוי המודל שלך בפרויקט Firebase שלך, ואז העלה את קובץ הדגם TensorFlow Lite (מסתיים בדרך כלל ב- .tflite או .lite ).

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

פרוס ונהל דגמים באמצעות Firebase Admin SDK

סעיף זה מראה כיצד ניתן להשלים משימות פריסה וניהול של מודלים נפוצים באמצעות מנהל ה- SDK. עיין בהתייחסות ל- SDK עבור Python או Node.js לעזרה נוספת.

לקבלת דוגמאות של ה- SDK הנמצא בשימוש, עיין במדגם ההפעלה המהירה של Python ובמדגם של התחלת המהירה של Node.js

לפני שאתה מתחיל

  1. אם עדיין אין לך פרויקט Firebase, צור פרויקט חדש במסוף Firebase . לאחר מכן, פתח את הפרויקט שלך ובצע את הפעולות הבאות:

    1. בדף ההגדרות , צור חשבון שירות והורד את קובץ מפתח חשבון השירות. שמור על בטיחות קובץ זה מכיוון שהוא מעניק גישה למנהל לפרויקט שלך.

    2. בדף האחסון, הפעל את אחסון הענן. שים לב לשם הדלי שלך.

      אתה זקוק לדלי אחסון בענן כדי לאחסן קבצי דגם זמנית בזמן שאתה מוסיף אותם לפרויקט Firebase שלך. אם אתה בתוכנית Blaze, תוכל ליצור ולהשתמש בדלי שאינו ברירת המחדל למטרה זו.

    3. בדף Firebase ML לחץ על התחל בעבודה אם עדיין לא הפעלת את Firebase ML.

  2. במסוף ממשקי ה- API של גוגל , פתח את פרויקט Firebase שלך ​​והפעל את ה- API של Firebase ML.

  3. התקן אתחול ה- SDK של מנהל המערכת ואותחל אותו .

    בעת אתחול ה- SDK, ציין את אישורי חשבון השירות ואת דלי האחסון בענן שברצונך להשתמש בהם כדי לאחסן את הדגמים שלך:

    פִּיתוֹן

    import firebase_admin
    from firebase_admin import ml
    from firebase_admin import credentials
    
    firebase_admin.initialize_app(
      credentials.Certificate('/path/to/your/service_account_key.json'),
      options={
          'storageBucket': 'your-storage-bucket',
      })
    

    Node.js

    const admin = require('firebase-admin');
    const serviceAccount = require('/path/to/your/service_account_key.json');
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      storageBucket: 'your-storage-bucket',
    });
    const ml = admin.machineLearning();
    

פריסת דגמים

קבצי TensorFlow Lite

כדי לפרוס מודל TensorFlow Lite מקובץ מודל, העלה אותו לפרויקט שלך ואז פרסם אותו:

פִּיתוֹן

# First, import and initialize the SDK as shown above.

# 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(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    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)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  // Upload the tflite file to Cloud Storage
  const storageBucket = admin.storage().bucket('your-storage-bucket');
  const files = await storageBucket.upload('./example.tflite');

  // Create the model object and add the model to your Firebase project.
  const bucket = files[0].metadata.bucket;
  const name = files[0].metadata.name;
  const gcsUri = `gs:/⁠/${bucket}/${name}`;
  const model = await ml.createModel({
    displayName: 'example_model',  // This is the name you use from your app to load the model.
    tags: ['examples'],  // Optional tags for easier management.
    tfliteModel: { gcsTfliteUri: gcsUri },
  });

  // Publish the model.
  await ml.publishModel(model.modelId);

  process.exit();
})().catch(console.error);

דגמי TensorFlow ו- Keras

בעזרת Python SDK, תוכלו להמיר דגם מפורמט דגם שמור של TensorFlow ל- TensorFlow Lite ולהעלות אותו לדלי אחסון הענן שלכם בשלב אחד. לאחר מכן, פרוס אותו באותו אופן בו אתה פורס קובץ TensorFlow Lite.

פִּיתוֹן

# First, import and initialize the SDK as shown above.

# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_saved_model('./model_directory')

# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    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)

אם יש לך מודל Keras, אתה יכול גם להמיר אותו ל- TensorFlow Lite ולהעלות אותו בשלב אחד. אתה יכול להשתמש בדגם Keras שנשמר בקובץ HDF5:

פִּיתוֹן

import tensorflow as tf

# Load a Keras model, convert it to TensorFlow Lite, and upload it to Cloud Storage
model = tf.keras.models.load_model('your_model.h5')
source = ml.TFLiteGCSModelSource.from_keras_model(model)

# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...

לחלופין, תוכלו להמיר ולהעלות מודל Keras ישירות מתסריט האימונים שלכם:

פִּיתוֹן

import tensorflow as tf

# Create a simple Keras model.
x = [-1, 0, 1, 2, 3, 4]
y = [-3, -1, 1, 3, 5, 7]

model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(x, y, epochs=3)

# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_keras_model(model)

# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...

דגמי AutoML TensorFlow Lite

אם הכשרת מודל Edge עם ממשק ה- API של AutoML Cloud או עם ממשק המשתמש של Google Cloud Console, תוכל לפרוס את המודל ל- Firebase באמצעות ה- SDK של מנהל המערכת.

יהיה עליך לציין את מזהה המשאבים של המודל, שהוא מחרוזת שנראית כמו הדוגמה הבאה:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER מספר הפרויקט של דלי אחסון הענן המכיל את הדגם. זה יכול להיות פרויקט Firebase שלך ​​או פרויקט אחר של Google Cloud. תוכלו למצוא ערך זה בדף ההגדרות של קונסולת Firebase או במרכז השליטה של ​​Google Cloud Console.
STORAGE_LOCATION מיקום המשאב של דלי אחסון הענן המכיל את המודל. ערך זה הוא תמיד us-central1 .
MODEL_ID מזהה המודל שקיבלת מממשק ה- API של ענן AutoML.

פִּיתוֹן

# First, import and initialize the SDK as shown above.

# Get a reference to the AutoML model
source = ml.TFLiteAutoMlSource('projects/{}/locations/{}/models/{}'.format(
    # See above for information on these values.
    project_number,
    storage_location,
    model_id
))

# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you will use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)

# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
new_model.wait_for_unlocked()
ml.publish_model(new_model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  // Get a reference to the AutoML model. See above for information on these
  // values.
  const automlModel = `projects/${projectNumber}/locations/${storageLocation}/models/${modelId}`;

  // Create the model object and add the model to your Firebase project.
  const model = await ml.createModel({
    displayName: 'example_model',  // This is the name you use from your app to load the model.
    tags: ['examples'],  // Optional tags for easier management.
    tfliteModel: { automlModel: automlModel },
  });

  // Wait for the model to be ready.
  await model.waitForUnlocked();

  // Publish the model.
  await ml.publishModel(model.modelId);

  process.exit();
})().catch(console.error);

פרט את דגמי הפרויקט שלך

תוכל לרשום את דגמי הפרויקט שלך, ולסנן את התוצאות באופן אופציונלי:

פִּיתוֹן

# First, import and initialize the SDK as shown above.

face_detectors = ml.list_models(list_filter="tags: face_detector").iterate_all()
print("Face detection models:")
for model in face_detectors:
  print('{} (ID: {})'.format(model.display_name, model.model_id))

Node.js

08 דקה 10.

אתה יכול לסנן לפי השדות הבאים:

שדה דוגמאות
display_name display_name = example_model
display_name != example_model

כל שמות התצוגה עם הקידומת experimental_ :

display_name : experimental_*

שים לב שרק תואם קידומת קידומת.

tags tags: face_detector
tags: face_detector AND tags: experimental
state.published state.published = true
state.published = false

שלב מסננים עם המפעילים והסוגריים AND , OR ו- NOT ( ( , ) ).

עדכן דגמים

לאחר שהוספת מודל לפרויקט שלך, תוכל לעדכן את שם התצוגה שלו, התגים tflite הדגם tflite :

פִּיתוֹן

# First, import and initialize the SDK as shown above.

model = ...   # Model object from create_model(), get_model(), or list_models()

# Update the model with a new tflite model. (You could also update with a
# `TFLiteAutoMlSource`)
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example_v2.tflite')
model.model_format = ml.TFLiteFormat(model_source=source)

# Update the model's display name.
model.display_name = "example_model"

# Update the model's tags.
model.tags = ["examples", "new_models"]

# Add a new tag.
model.tags += "experimental"

# After you change the fields you want to update, save the model changes to
# Firebase and publish it.
updated_model = ml.update_model(model)
ml.publish_model(updated_model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  const model = ... // Model object from createModel(), getModel(), or listModels()

  // Upload a new tflite file to Cloud Storage.
  const files = await storageBucket.upload('./example_v2.tflite');
  const bucket = files[0].metadata.bucket;
  const name = files[0].metadata.name;

  // Update the model. Any fields you omit will be unchanged.
  await ml.updateModel(model.modelId, {
    displayName: 'example_model',  // Update the model's display name.
    tags: model.tags.concat(['new']),  // Add a tag.
    tfliteModel: {gcsTfliteUri: `gs:/⁠/${bucket}/${name}`},
  });

  process.exit();
})().catch(console.error);

בטל פרסום או מחק דגמים

כדי לבטל פרסום או למחוק מודל, העבירו את מזהה הדגם לשיטות הפרסום או המחיקה. כשאתה מבטל את פרסום הדגם, הוא נשאר בפרויקט שלך, אך לא ניתן להוריד את האפליקציות שלך. כשאתה מוחק מודל, הוא מוסר לחלוטין מהפרויקט שלך. (ביטול פרסום מודל אינו צפוי בתהליך עבודה רגיל, אך באפשרותך להשתמש בו לביטול פרסום מיידי של מודל חדש שפרסמת בטעות והוא עדיין לא נמצא בשימוש בשום מקום, או במקרים שבהם גרוע יותר למשתמשים להוריד "רע" מודל מאשר לקבל שגיאות שלא נמצאו דגם.)

אם עדיין אין לך התייחסות לאובייקט Model, סביר להניח שתצטרך לקבל את מזהה הדגם על ידי רישום דגמי הפרויקט שלך עם מסנן. לדוגמא, כדי למחוק את כל הדגמים שתויגו "face_detector":

פִּיתוֹן

# First, import and initialize the SDK as shown above.

face_detectors = ml.list_models(list_filter="tags: 'face_detector'").iterate_all()
for model in face_detectors:
  ml.delete_model(model.model_id)

Node.js

// First, import and initialize the SDK as shown above.

(async () => {
  let listOptions = {filter: 'tags: face_detector'}
  let models;
  let pageToken = null;
  do {
    if (pageToken) listOptions.pageToken = pageToken;
    ({models, pageToken} = await ml.listModels(listOptions));
    for (const model of models) {
      await ml.deleteModel(model.modelId);
    }
  } while (pageToken != null);

  process.exit();
})().catch(console.error);