Vous pouvez déployer et gérer des modèles personnalisés à l'aide de la console Firebase ou des SDK Firebase Admin Python et Node.js. Si vous souhaitez simplement déployer un modèle et le mettre à jour de temps en temps, il est généralement plus simple d' utiliser la Firebase console. Le SDK Admin peut être utile lors de l'intégration à des pipelines de compilation, de l'utilisation de notebooks Colab ou Jupyter, et d'autres workflows.
Déployer et gérer des modèles dans la console Firebase
Modèles TensorFlow Lite
Pour déployer un modèle TensorFlow Lite à l'aide de la Firebase console :
- Ouvrez la page Modèle personnalisé Firebase ML dans la Firebase console.
- Cliquez sur Ajouter un modèle personnalisé (ou Ajouter un autre modèle).
- Spécifiez un nom qui sera utilisé pour identifier votre modèle dans votre projet Firebase, puis importez le fichier de modèle TensorFlow Lite (qui se termine généralement par
.tfliteou.lite).
Une fois votre modèle déployé, vous le trouverez sur la page "Personnalisé". À partir de là, vous pouvez effectuer des tâches telles que la mise à jour du modèle avec un nouveau fichier, le téléchargement du modèle et la suppression du modèle de votre projet.
Déployer et gérer des modèles avec le SDK Firebase Admin
Cette section explique comment effectuer des tâches courantes de déploiement et de gestion de modèles avec le SDK Admin. Pour obtenir de l'aide supplémentaire, consultez la documentation de référence du SDK pour Python ou Node.js.
Pour obtenir des exemples d'utilisation du SDK, consultez l' exemple de démarrage rapide Python et l' exemple de démarrage rapide Node.js.
Avant de commencer
Si vous ne disposez pas encore d'un projet Firebase, créez-en un dans la Firebase console. Ensuite, ouvrez votre projet et procédez comme suit :
Sur la page Paramètres, créez un compte de service et téléchargez le fichier de clé de compte de service. Conservez ce fichier en lieu sûr, car il accorde un accès administrateur à votre projet.
Sur la page "Stockage", activez Cloud Storage. Prenez note du nom de votre bucket.
Vous avez besoin d'un Cloud Storage bucket pour stocker temporairement les fichiers de modèle lorsque vous les ajoutez à votre projet Firebase. Si vous disposez du forfait Blaze, vous pouvez créer et utiliser un bucket autre que celui par défaut à cet effet.
Sur la page Firebase ML, cliquez sur Premiers pas si vous n'avez pas encore activé Firebase ML.
Dans la console Google APIs, ouvrez votre projet Firebase et activez l'API Firebase ML.
Installez et initialisez le SDK Admin.
Lorsque vous initialisez le SDK, spécifiez vos identifiants de compte de service et le Cloud Storage bucket que vous souhaitez utiliser pour stocker vos modèles :
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();
Déployer des modèles
Fichiers TensorFlow Lite
Pour déployer un modèle TensorFlow Lite à partir d'un fichier de modèle, importez-le dans votre projet, puis publiez-le :
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);
Modèles TensorFlow et Keras
Avec le SDK Python, vous pouvez convertir un modèle du format de modèle enregistré TensorFlow au format TensorFlow Lite et l'importer dans votre Cloud Storage bucket en une seule étape. Ensuite, déployez-le de la même manière que vous déployez un fichier 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)
Si vous disposez d'un modèle Keras, vous pouvez également le convertir au format TensorFlow Lite et l'importer en une seule étape. Vous pouvez utiliser un modèle Keras enregistré dans un fichier 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.)
# ...
Vous pouvez également convertir et importer un modèle Keras directement à partir de votre script d'entraînement :
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.)
# ...
Répertorier les modèles de votre projet
Vous pouvez répertorier les modèles de votre projet et, si vous le souhaitez, filtrer les résultats :
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);
Vous pouvez filtrer les résultats par les champs suivants :
| Champ | Exemples |
|---|---|
display_name |
display_name = example_modeldisplay_name != example_modelTous les noms à afficher avec le préfixe display_name : experimental_*
Notez que seule la correspondance de préfixe est acceptée. |
tags |
tags: face_detectortags: face_detector AND tags: experimental
|
state.published |
state.published = truestate.published = false
|
Combinez les filtres avec les opérateurs AND, OR et NOT, ainsi qu'avec des parenthèses ((, )).
Mettre à jour des modèles
Une fois que vous avez ajouté un modèle à votre projet, vous pouvez modifier son nom à afficher, ses tags et son fichier de modèle 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.
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);
Annuler la publication ou supprimer des modèles
Pour annuler la publication ou supprimer un modèle, transmettez l'ID du modèle aux méthodes d'annulation de publication ou de suppression. Lorsque vous annulez la publication d'un modèle, il reste dans votre projet, mais vos applications ne peuvent pas le télécharger. Lorsque vous supprimez un modèle, il est complètement supprimé de votre projet. (L'annulation de la publication d'un modèle n'est pas prévue dans un workflow standard, mais vous pouvez l'utiliser pour annuler immédiatement la publication d'un nouveau modèle que vous avez publié par erreur et qui n'est pas encore utilisé, ou dans les cas où il est préférable pour les utilisateurs de recevoir des erreurs de modèle introuvable plutôt que de télécharger un "mauvais" modèle.)
Si vous ne disposez plus d'une référence à l'objet Model, vous devrez probablement obtenir l'ID du modèle en répertoriant les modèles de votre projet avec un filtre. Par exemple, pour supprimer tous les modèles tagués "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);