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 entraînés par AutoML à l'aide de la console Firebase ou les SDK Firebase Admin pour Python et Node.js. Si vous vous souhaitez simplement déployer un modèle et le mettre à jour de temps en temps, il est généralement plus simple utilisez la console Firebase. Le SDK Admin peut être utile lors de l'intégration de créer des pipelines, d'utiliser des 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 console Firebase, procédez comme suit:

  1. Ouvrez la page Modèle personnalisé Firebase ML dans le Firebase.
  2. Cliquez sur Ajouter un modèle personnalisé (ou Ajouter un autre modèle).
  3. Spécifiez un nom qui permettra d'identifier votre modèle dans Firebase projet, puis importez le fichier de modèle TensorFlow Lite (qui se termine généralement par .tflite ou .lite).

Une fois votre modèle déployé, vous le trouverez sur la page "Personnalisé". Vous pouvez ensuite effectuer des tâches telles que mettre à jour le modèle avec un nouveau fichier, le télécharger et le supprimer de votre projet.

Déployer et gérer des modèles avec le SDK Admin Firebase

Cette section explique comment effectuer des tâches courantes de déploiement et de gestion de modèles avec le SDK Admin. Consultez la documentation de référence du SDK pour Python. ou Node.js pour obtenir de l'aide.

Pour voir des exemples de SDK en cours d'utilisation, consultez le Exemple de guide de démarrage rapide pour Python Exemple de démarrage rapide Node.js.

Avant de commencer

  1. Si vous n'avez pas encore de projet Firebase, créez-en un dans la section Console Firebase. Ensuite, ouvrez votre projet et effectuer les opérations suivantes:

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

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

      Vous avez besoin d'un bucket Cloud Storage pour stocker temporairement les fichiers de modèle tout en les ajoutant à votre projet Firebase. Si vous utilisez Blaze vous pouvez créer et utiliser un bucket autre que celui par défaut l'objectif.

    3. Sur la page Firebase ML, cliquez sur Commencer si vous ne l'avez pas encore fait. Firebase ML a été activé.

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

  3. Installez et initialisez le SDK Admin.

    Lorsque vous initialisez le SDK, spécifiez les identifiants de votre compte de service et le bucket Cloud Storage 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-la:

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

Le SDK Python permet de convertir un modèle à partir du format de modèle enregistré TensorFlow dans TensorFlow Lite, puis importez-le dans votre bucket Cloud Storage en une seule fois étape. Déployez-le ensuite de la même manière que vous le feriez pour 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 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 depuis 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 TensorFlow Lite AutoML

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

Vous devez spécifier l'identifiant de ressource du modèle, qui est une chaîne semblable à l'exemple suivant :

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER Numéro de projet du bucket Cloud Storage contenant le du modèle de ML. Il peut s'agir de votre projet Firebase ou d'un autre Google Cloud projet. Vous trouverez cette valeur sur la page "Settings" (Paramètres) de la console Firebase ou dans le tableau de bord de la console Google Cloud.
STORAGE_LOCATION L'emplacement de la ressource du bucket Cloud Storage contenant le modèle. Cette valeur est toujours us-central1.
MODEL_ID ID du modèle, que vous avez obtenu à partir 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);

Lister les modèles de votre projet

Vous pouvez répertorier 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 les données selon les champs suivants:

Champ Exemples
display_name display_name = example_model
display_name != example_model

Tous les noms à afficher avec le préfixe experimental_:

display_name : experimental_*

Notez que seule la correspondance de préfixe est acceptée.

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

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

Mettre à jour des modèles

Après avoir ajouté un modèle à votre projet, vous pouvez mettre à jour son nom à afficher, tags et le 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 du modèle à l'opération d'annulation de la publication ou de suppression méthodes. Lorsque vous annulez la publication d'un modèle, celui-ci reste dans votre projet, mais pas que vos applications peuvent télécharger. Lorsque vous supprimez un modèle, supprimés de votre projet. Notez que l'annulation de la publication d'un modèle n'est pas prévue mais vous pouvez l'utiliser pour annuler immédiatement la publication d'un nouveau modèle publié par erreur et qu'il n'est encore utilisé nulle part, ou lorsqu'il pire pour les utilisateurs de télécharger un "mauvais" code que d'obtenir des données de type "modèle introuvable" erreurs.)

Si vous n'avez pas encore de référence à l'objet Model, vous devrez probablement obtenir l'ID du modèle en listant les modèles de votre projet à l'aide d'un filtre. Par exemple, pour supprimer tous les modèles associés au 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);