אתם יכולים לפרוס ולנהל מודלים מותאמים אישית ומודלים שאומנו על ידי AutoML באמצעות מסוף Firebase או באמצעות ערכות ה-SDK של Firebase Admin עבור Python ו-Node.js. אם אתם רוצים רק לפרוס מודל ולעדכן אותו מדי פעם, בדרך כלל הכי פשוט להשתמש במסוף Firebase. ה-SDK של Admin יכול להיות שימושי כשמשלבים אותו עם צינורות עיבוד נתונים ל-build, עובדים עם קובצי notebook של Colab או Jupyter ותהליכי עבודה אחרים.
פריסת מודלים וניהול שלהם במסוף Firebase
מודלים של TensorFlow Lite
כדי לפרוס מודל TensorFlow Lite באמצעות מסוף Firebase:
- פותחים את דף המודל המותאם אישית Firebase ML במסוף Firebase.
- לוחצים על הוספת מודל מותאם אישית (או על הוספת מודל נוסף).
- מציינים שם שמשמש לזיהוי המודל בפרויקט Firebase, ואז מעלים את קובץ המודל של TensorFlow Lite (בדרך כלל מסתיים ב-
.tflite
או ב-.lite
).
אחרי הפריסה של המודל, תוכלו למצוא אותו בדף 'מותאם אישית'. משם תוכלו לבצע משימות כמו עדכון המודל באמצעות קובץ חדש, הורדת המודל ומחיקה שלו מהפרויקט.
פריסה וניהול של מודלים באמצעות Firebase Admin SDK
בקטע הזה נסביר איך לבצע משימות נפוצות של פריסה וניהול של מודלים באמצעות Admin SDK. לקבלת עזרה נוספת, אפשר לעיין במסמכי העזרה של ה-SDK ל-Python או ל-Node.js.
לדוגמאות לשימוש ב-SDK, ראו את הדוגמה למתחילים ב-Python ואת הדוגמה למתחילים ב-Node.js.
לפני שמתחילים
אם עדיין אין לכם פרויקט Firebase, תוכלו ליצור פרויקט חדש במסוף Firebase. לאחר מכן פותחים את הפרויקט ועושים את הפעולות הבאות:
בדף Settings, יוצרים חשבון שירות ומורידים את קובץ המפתח של חשבון השירות. חשוב לשמור על הקובץ הזה כי הוא מעניק גישת אדמין לפרויקט.
בדף Storage (אחסון), מפעילים את האפשרות Cloud Storage. חשוב לזכור את שם הקטגוריה.
צריך קטגוריה מסוג Cloud Storage כדי לאחסן באופן זמני את קובצי המודל בזמן ההוספה שלהם לפרויקט Firebase. אם אתם בתוכנית Blaze, תוכלו ליצור קטגוריה ולהשתמש בה במקום ברירת המחדל למטרה הזו.
אם עדיין לא הפעלתם את Firebase ML, לוחצים על Get started בדף Firebase ML.
במסוף Google APIs, פותחים את פרויקט Firebase ומפעילים את Firebase ML API.
מתקינים ומפעילים את Admin SDK.
כשמאתחלים את ה-SDK, מציינים את פרטי הכניסה של חשבון השירות ואת הקטגוריה Cloud Storage שבה רוצים לאחסן את המודלים:
Python
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 מקובץ מודל, מעלים אותו לפרויקט ולאחר מכן מפרסמים אותו:
Python
# 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
באמצעות ה-SDK של Python, אפשר להמיר מודל מפורמט מודל שמור של TensorFlow ל-TensorFlow Lite ולהעלות אותו לקטגוריה Cloud Storage בשלב אחד. לאחר מכן, פורסים אותו באותה דרך שבה פורסים קובץ TensorFlow Lite.
Python
# 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:
Python
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 ישירות מתוך סקריפט האימון:
Python
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 Cloud API או באמצעות ממשק המשתמש של מסוף Google Cloud, תוכלו לפרוס את המודל ב-Firebase באמצעות Admin SDK.
צריך לציין את מזהה המשאב של המודל, שהוא מחרוזת שנראית כמו בדוגמה הבאה:
projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER |
מספר הפרויקט של הקטגוריה Cloud Storage שמכילה את המודל. יכול להיות שזה פרויקט Firebase או פרויקט Google Cloud אחר. אפשר למצוא את הערך הזה בדף Settings (הגדרות) במסוף Firebase או במרכז הבקרה של מסוף Google Cloud. |
STORAGE_LOCATION |
מיקום המשאב של הקטגוריה Cloud Storage שמכילה את המודל. הערך הזה תמיד הוא us-central1 . |
MODEL_ID |
מזהה המודל, שקיבלתם מ-AutoML Cloud API. |
Python
# 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);
הצגת רשימה של המודלים של הפרויקט
אפשר להציג את רשימת המודלים של הפרויקט, ולסנן את התוצאות לפי הצורך:
Python
# 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 כל השמות המוצגים עם הקידומת 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
שלו:
Python
# 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':
Python
# 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);