Firebase Summit is happening now. Tune in to learn how Firebase can help you accelerate app development, gain actionable insights and scale with ease. Join now
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Déployer et gérer des modèles personnalisés

Vous pouvez déployer et gérer des modèles personnalisés et des modèles formés AutoML à 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 occasionnellement, il est généralement plus simple d'utiliser la console Firebase. Le SDK Admin peut être utile lors de l'intégration avec des pipelines de build, de l'utilisation des blocs-notes Colab ou Jupyter et d'autres flux de travail.

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 console Firebase:

  1. Ouvrez la page du modèle personnalisé de Firebase ML dans la console Firebase.
  2. Cliquez sur Ajouter un modèle personnalisé (ou Ajouter un autre modèle ).
  3. Spécifiez un nom qui sera utilisé pour identifier votre modèle dans votre projet Firebase, puis téléchargez le fichier de modèle TensorFlow Lite (se terminant généralement par .tflite ou .lite ).

Après avoir déployé votre modèle, vous pouvez le trouver 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.

Modèles AutoML TensorFlow Lite

Après avoir entraîné un modèle dans la console Firebase, vous pouvez déployer le modèle en le publiant .

Vous pouvez trouver vos modèles déployés sur la page AutoML de la console Firebase. À partir de là, vous pouvez afficher les données de précision et d'exactitude du modèle ou supprimer le modèle.

Déployez et gérez des modèles avec le SDK Firebase Admin

Cette section montre comment vous pouvez effectuer des tâches courantes de déploiement et de gestion de modèles avec le SDK Admin. Consultez la référence du SDK pour Python ou Node.js pour obtenir une aide supplémentaire.

Pour obtenir des exemples du SDK utilisé, consultez l' exemple de démarrage rapide Python et l' exemple de démarrage rapide Node.js.

Avant que tu commences

  1. Si vous n'avez pas encore de projet Firebase, créez un nouveau projet dans la console Firebase . Ensuite, ouvrez votre projet et procédez comme suit:

    1. Sur la page Paramètres , créez un compte de service et téléchargez le fichier de clé du compte de service. Gardez ce fichier en sécurité, car il accorde un accès administrateur à votre projet.

    2. Sur la page Stockage, activez Cloud Storage. Prenez note du nom de votre bucket.

      Vous avez besoin d'un bucket de stockage pour stocker temporairement les fichiers de modèle tout en les ajoutant à votre projet Firebase. Si vous êtes sur le plan Blaze, vous pouvez créer et utiliser un bucket autre que celui par défaut à cette fin.

    3. Sur la page Firebase ML, cliquez sur Commencer si vous n'avez pas encore activé Firebase ML.

  2. Dans la console des API Google , ouvrez votre projet Firebase et activez l'API Firebase ML.

  3. Installez et initialisez le SDK Admin .

    Lorsque vous initialisez le SDK, spécifiez les informations d'identification de votre compte de service et le compartiment de stockage 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, téléchargez-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 en TensorFlow Lite et le télécharger dans votre bucket Cloud Storage 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 en TensorFlow Lite et le télécharger 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 télécharger 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.)
# ...

Modèles AutoML TensorFlow Lite

Lorsque vous publiez un modèle que vous avez formé avec AutoML dans la console Firebase, il est entièrement déployé et prêt à être téléchargé sur les appareils des utilisateurs.

Si vous avez entraîné un modèle Edge avec l' API AutoML Cloud ou avec l'interface utilisateur de la console Cloud, vous pouvez déployer le modèle sur Firebase à l'aide du SDK Admin.

Vous devrez spécifier l'identificateur de ressource du modèle, qui est une chaîne qui ressemble à l'exemple suivant:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER Numéro de projet du bucket Cloud Storage contenant le modèle. Il peut s'agir de votre projet Firebase ou d'un autre projet Cloud. Vous pouvez trouver cette valeur sur la page Paramètres de la console Firebase ou sur le tableau de bord de la console Cloud.
STORAGE_LOCATION Emplacement des ressources du bucket Cloud Storage qui contient le modèle. Cette valeur est toujours us-central1 .
MODEL_ID L'ID du modèle, que vous avez obtenu de l'API AutoML Cloud.

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

Listez les modèles de votre projet

Vous pouvez lister les modèles de votre projet, en filtrant éventuellement 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 par les champs suivants:

Champ Exemples
display_name display_name = example_model
display_name != example_model

Tous les noms d'affichage avec le préfixe experimental_ :

display_name : experimental_*

Notez que seule la correspondance de préfixe est prise en charge.

tags tags: face_detector
tags: face_detector AND tags: experimental
state.published state.published = true
state.published = false

Combinez les filtres avec les opérateurs AND , OR et NOT et les parenthèses ( ( , ) ).

Mettre à jour les modèles

Après avoir ajouté un modèle à votre projet, vous pouvez mettre à jour son nom d'affichage, ses balises et tflite 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. (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);

Annuler la publication ou supprimer des modèles

Pour annuler la publication ou supprimer un modèle, transmettez l'ID de 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 n'est pas disponible pour le téléchargement de vos applications. Lorsque vous supprimez un modèle, il est complètement supprimé de votre projet. (La dépublication d'un modèle n'est pas prévue dans un flux de travail standard, mais vous pouvez l'utiliser pour dépublier immédiatement un nouveau modèle que vous avez publié accidentellement et qui n'est encore utilisé nulle part, ou dans les cas où il est pire pour les utilisateurs de télécharger un "mauvais" modèle que pour obtenir des erreurs de modèle introuvable.)

Si vous n'avez toujours pas de référence à l'objet Model, vous devrez probablement obtenir l'ID de modèle en répertoriant les modèles de votre projet avec un filtre. Par exemple, pour supprimer tous les modèles marqué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);