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

באפשרותך לפרוס ולנהל מודלים מותאמים אישית ומודלים שהוכשרו עם 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 (בדרך כלל עם סיומת .tflite או .lite ).

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

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

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

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

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

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

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

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

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

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

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

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

אם עדיין אין לך התייחסות לאובייקט 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);