Puoi eseguire il deployment e gestire i modelli personalizzati utilizzando la Firebase console o gli SDK Firebase Admin Python e Node.js. Se vuoi solo eseguire il deployment di un modello e aggiornarlo occasionalmente, di solito è più semplice utilizzare la console Firebase. L'SDK Admin può essere utile per l'integrazione con le pipeline di build, l'utilizzo di notebook Colab o Jupyter e altri flussi di lavoro.
Eseguire il deployment e gestire i modelli nella console Firebase
Modelli TensorFlow Lite
Per eseguire il deployment di un modello TensorFlow Lite utilizzando la Firebase console:
- Apri la pagina Modello personalizzato Firebase ML nella console Firebase.
- Fai clic su Aggiungi modello personalizzato (o Aggiungi un altro modello).
- Specifica un nome che verrà utilizzato per identificare il modello nel progetto Firebase, quindi carica il file del modello TensorFlow Lite (in genere con estensione
.tfliteo.lite).
Dopo aver eseguito il deployment del modello, puoi trovarlo nella pagina Personalizzato. Da qui, puoi completare attività come aggiornare il modello con un nuovo file, scaricare il modello ed eliminarlo dal progetto.
Eseguire il deployment e gestire i modelli con l'SDK Firebase Admin
Questa sezione mostra come completare le attività comuni di deployment e gestione dei modelli con l'SDK Admin. Per ulteriore assistenza, consulta la documentazione di riferimento dell'SDK per Python o Node.js.
Per esempi di utilizzo dell'SDK, consulta l' esempio di guida rapida di Python e l' esempio di guida rapida di Node.js.
Prima di iniziare
Se non hai già un progetto Firebase, creane uno nuovo nella Firebase console. Quindi, apri il progetto e procedi nel seguente modo:
Nella pagina Impostazioni, crea un service account e scarica il file della chiave del service account. Conserva questo file in un luogo sicuro, poiché concede l'accesso amministratore al tuo progetto.
Nella pagina Spazio di archiviazione, attiva Cloud Storage. Prendi nota del nome del bucket.
Hai bisogno di un bucket Cloud Storage per archiviare temporaneamente i file dei modelli mentre li aggiungi al progetto Firebase. Se hai il piano Blaze, puoi creare e utilizzare un bucket diverso da quello predefinito per questo scopo.
Nella pagina Firebase ML, fai clic su Inizia se non hai ancora attivato Firebase ML.
Nella console Google Cloud, apri il progetto Firebase e attiva l'API Firebase ML.
Installa e inizializza l'SDK Admin.
Quando inizializzi l'SDK, specifica le credenziali del service account e il Cloud Storage bucket che vuoi utilizzare per archiviare i modelli:
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();
Deployment modelli
File TensorFlow Lite
Per eseguire il deployment di un modello TensorFlow Lite da un file del modello, caricalo nel progetto e poi pubblicalo:
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);
Modelli TensorFlow e Keras
Con l'SDK Python, puoi convertire un modello dal formato del modello salvato di TensorFlow a TensorFlow Lite e caricarlo nel bucket Cloud Storage in un unico passaggio. Quindi, esegui il deployment nello stesso modo in cui esegui il deployment di un file 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)
Se hai un modello Keras, puoi anche convertirlo in TensorFlow Lite e caricarlo in un unico passaggio. Puoi utilizzare un modello Keras salvato in un file 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.)
# ...
In alternativa, puoi convertire e caricare un modello Keras direttamente dallo script di addestramento:
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.)
# ...
Elencare i modelli del progetto
Puoi elencare i modelli del progetto, filtrando facoltativamente i risultati:
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);
Puoi filtrare in base ai seguenti campi:
| Campo | Esempi |
|---|---|
display_name |
display_name = example_modeldisplay_name != example_modelTutti i nomi visualizzati con il prefisso display_name : experimental_*
Tieni presente che è supportata solo la corrispondenza del prefisso. |
tags |
tags: face_detectortags: face_detector AND tags: experimental
|
state.published |
state.published = truestate.published = false
|
Combina i filtri con gli operatori AND, OR e NOT e le parentesi ((, )).
Aggiornamento modelli
Dopo aver aggiunto un modello al progetto, puoi aggiornarne il nome visualizzato, i tag e il file del modello 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);
Annullare la pubblicazione o eliminare i modelli
Per annullare la pubblicazione o eliminare un modello, passa l'ID del modello ai metodi di annullamento della pubblicazione o di eliminazione. Quando annulli la pubblicazione di un modello, questo rimane nel progetto, ma non è disponibile per il download da parte delle tue app. Quando elimini un modello, questo viene rimosso completamente dal progetto. (L'annullamento della pubblicazione di un modello non è previsto in un flusso di lavoro standard, ma puoi utilizzarlo per annullare immediatamente la pubblicazione di un nuovo modello che hai pubblicato per errore e che non è ancora utilizzato da nessuna parte oppure nei casi in cui è peggio per gli utenti scaricare un modello "errato" che ricevere errori di modello non trovato.)
Se non hai ancora un riferimento all'oggetto Model, probabilmente dovrai recuperare l'ID del modello elencando i modelli del progetto con un filtro. Ad esempio, per eliminare tutti i modelli con il 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);