Sie können benutzerdefinierte Modelle entweder über die Firebase Console oder die Firebase Admin SDKs für Python und Node.js bereitstellen und verwalten. Wenn Sie nur ein Modell bereitstellen und gelegentlich aktualisieren möchten, ist es in der Regel am einfachsten, die Firebase Konsole zu verwenden. Das Admin SDK kann hilfreich sein, wenn Sie es in Build-Pipelines einbinden, mit Colab- oder Jupyter-Notebooks arbeiten oder andere Workflows verwenden.
Modelle in der Firebase Console bereitstellen und verwalten
TensorFlow Lite-Modelle
So stellen Sie ein TensorFlow Lite-Modell mit der Firebase Console bereit:
- Öffnen Sie in der Firebase console die Firebase ML Custom model page.
- Klicken Sie auf Benutzerdefiniertes Modell hinzufügen oder Weiteres Modell hinzufügen.
- Geben Sie einen Namen an, mit dem Ihr Modell in Ihrem Firebase-Projekt identifiziert wird, und laden Sie dann die TensorFlow Lite-Modelldatei hoch (die in der Regel auf
.tfliteoder.liteendet).
Nachdem Sie Ihr Modell bereitgestellt haben, finden Sie es auf der Seite „Benutzerdefiniert“. Dort können Sie Aufgaben wie das Aktualisieren des Modells mit einer neuen Datei, das Herunterladen des Modells und das Löschen des Modells aus Ihrem Projekt ausführen.
Modelle mit dem Firebase Admin SDK bereitstellen und verwalten
In diesem Abschnitt wird beschrieben, wie Sie mit dem Admin SDK häufige Aufgaben bei der Bereitstellung und Verwaltung von Modellen ausführen können. Weitere Informationen finden Sie in der SDK-Referenz für Python oder Node.js.
Beispiele für die Verwendung des SDK finden Sie in der Python-Kurzanleitung und Node.js-Kurzanleitung.
Hinweis
Wenn Sie noch kein Firebase-Projekt haben, erstellen Sie ein neues Projekt in der Firebase Konsole. Öffnen Sie dann Ihr Projekt und gehen Sie so vor:
Erstellen Sie auf der Seite „Einstellungen“ ein Dienstkonto und laden Sie die Dienstkontoschlüsseldatei herunter. Bewahren Sie diese Datei sicher auf, da sie Administratorzugriff auf Ihr Projekt gewährt.
Aktivieren Sie auf der Seite „Speicher“ Cloud Storage. Notieren Sie sich den Namen Ihres Buckets.
Sie benötigen einen Cloud Storage Bucket, um Modelldateien vorübergehend zu speichern während Sie sie Ihrem Firebase-Projekt hinzufügen. Wenn Sie den Blaze-Tarif verwenden, können Sie für diesen Zweck einen anderen Bucket als den Standard-Bucket erstellen und verwenden.
Klicken Sie auf der Seite „Firebase ML“ auf Jetzt starten, wenn Sie Firebase ML noch nicht aktiviert haben.
Öffnen Sie in der Google APIs Console Ihr Firebase Projekt und aktivieren Sie die Firebase ML API.
Installieren und initialisieren Sie das Admin SDK.
Geben Sie beim Initialisieren des SDK die Anmeldedaten Ihres Dienstkontos und den Cloud Storage Bucket an, in dem Sie Ihre Modelle speichern möchten:
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();
Modelle bereitstellen
TensorFlow Lite-Dateien
Wenn Sie ein TensorFlow Lite-Modell aus einer Modelldatei bereitstellen möchten, laden Sie es in Ihr Projekt hoch und veröffentlichen Sie es dann:
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- und Keras-Modelle
Mit dem Python SDK können Sie ein Modell aus dem TensorFlow SavedModel-Format in TensorFlow Lite konvertieren und in einem einzigen Schritt in Ihren Cloud Storage Bucket hochladen. Stellen Sie es dann auf dieselbe Weise bereit wie eine TensorFlow Lite-Datei.
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)
Wenn Sie ein Keras-Modell haben, können Sie es auch in einem einzigen Schritt in TensorFlow Lite konvertieren und hochladen. Sie können ein Keras-Modell verwenden, das in einer HDF5-Datei gespeichert ist:
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.)
# ...
Alternativ können Sie ein Keras-Modell direkt aus Ihrem Trainingsskript konvertieren und hochladen:
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.)
# ...
Modelle Ihres Projekts auflisten
Sie können die Modelle Ihres Projekts auflisten und die Ergebnisse optional filtern:
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);
Sie können nach den folgenden Feldern filtern:
| Feld | Beispiele |
|---|---|
display_name |
display_name = example_modeldisplay_name != example_modelAlle Anzeigenamen mit dem Präfix display_name : experimental_*
Es wird nur die Präfixübereinstimmung unterstützt. |
tags |
tags: face_detectortags: face_detector AND tags: experimental
|
state.published |
state.published = truestate.published = false
|
Kombinieren Sie Filter mit den Operatoren AND, OR und NOT sowie mit Klammern ((, )).
Modelle aktualisieren
Nachdem Sie Ihrem Projekt ein Modell hinzugefügt haben, können Sie den Anzeigenamen, die Tags und die tflite-Modelldatei aktualisieren:
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.
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);
Veröffentlichung von Modellen aufheben oder Modelle löschen
Wenn Sie die Veröffentlichung eines Modells aufheben oder es löschen möchten, übergeben Sie die Modell-ID an die entsprechenden Methoden. Wenn Sie die Veröffentlichung eines Modells aufheben, bleibt es in Ihrem Projekt, kann aber nicht mehr von Ihren Apps heruntergeladen werden. Wenn Sie ein Modell löschen, wird es vollständig aus Ihrem Projekt entfernt. Die Aufhebung der Veröffentlichung eines Modells ist in einem Standardworkflow nicht vorgesehen. Sie können sie aber verwenden, um die Veröffentlichung eines neuen Modells, das Sie versehentlich veröffentlicht haben und das noch nirgendwo verwendet wird, sofort aufzuheben. Das kann auch in Fällen sinnvoll sein, in denen es für Nutzer schlechter ist, ein „schlechtes“ Modell herunterzuladen, als Fehler vom Typ „Modell nicht gefunden“ zu erhalten.
Wenn Sie keine Referenz zum Modellobjekt mehr haben, müssen Sie die Modell-ID wahrscheinlich abrufen, indem Sie die Modelle Ihres Projekts mit einem Filter auflisten. So löschen Sie beispielsweise alle Modelle mit dem Tag „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);