Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

דגמי TensorFlow Lite

כדי לפרוס דגם TensorFlow Lite באמצעות מסוף Firebase:

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

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

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

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

לדוגמאות של SDK בשימוש, לראות את המדגם QuickStart Python ו- מדגם QuickStart Node.js .

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

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

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

    2. בדף האחסון, הפעל את Cloud Storage. שימו לב לשם הדלי שלכם.

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

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

  2. בשנות ה קונסולת API של Google , לפתוח את הפרויקט Firebase שלך ולאפשר API ML Firebase.

  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 עם AutoML קלאוד API או עם Google Cloud Console UI, אתה יכול לפרוס את המודל כדי 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 של Cloud Cloud.

פִּיתוֹן

# 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

// 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) {
      console.log(`${model.displayName} (ID: ${model.modelId})`);
    }
  } while (pageToken != null);

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

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

שדה דוגמאות
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 קובץ מודל:

פִּיתוֹן

# 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);

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

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

אם עדיין אין לך התייחסות לאובייקט המודל, סביר להניח שתצטרך לקבל את מזהה הדגם על ידי רישום הדגמים של הפרויקט שלך עם מסנן. לדוגמה, למחוק את כל הדגמים המתויגים "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);