Możesz wdrażać modele niestandardowe i modele wyszkolone przez AutoML oraz zarządzać nimi za pomocą konsoli Firebase lub zestawów SDK Firebase Admin Python i Node.js. Jeśli chcesz po prostu wdrożyć model i okazjonalnie go aktualizować, zwykle najprościej jest użyć konsoli Firebase. Pakiet Admin SDK może być pomocny podczas integracji z potokami kompilacji, pracy z notatnikami Colab lub Jupyter i innymi przepływami pracy.
Wdrażaj modele i zarządzaj nimi w konsoli Firebase
Modele TensorFlow Lite
Aby wdrożyć model TensorFlow Lite przy użyciu konsoli Firebase:
- Otwórz stronę niestandardowego modelu Firebase ML w konsoli Firebase.
- Kliknij Dodaj model niestandardowy (lub Dodaj inny model ).
- Podaj nazwę, która będzie używana do identyfikacji Twojego modelu w projekcie Firebase, a następnie prześlij plik modelu TensorFlow Lite (zwykle kończący się na
.tflite
lub.lite
).
Po wdrożeniu modelu można go znaleźć na stronie niestandardowej. Stamtąd możesz wykonywać zadania, takie jak aktualizowanie modelu za pomocą nowego pliku, pobieranie modelu i usuwanie modelu z projektu.
Wdrażaj modele i zarządzaj nimi za pomocą pakietu Firebase Admin SDK
W tej sekcji pokazano, jak można wykonać typowe zadania związane z wdrażaniem modelu i zarządzaniem za pomocą pakietu Admin SDK. Aby uzyskać dodatkową pomoc, zapoznaj się z dokumentacją zestawu SDK dla języka Python lub Node.js.
Aby zapoznać się z przykładami używanego zestawu SDK, zobacz przykład szybkiego startu w języku Python i przykład szybkiego startu w środowisku Node.js .
Zanim zaczniesz
Jeśli nie masz jeszcze projektu Firebase, utwórz nowy projekt w konsoli Firebase . Następnie otwórz swój projekt i wykonaj następujące czynności:
Na stronie Ustawienia utwórz konto usługi i pobierz plik klucza konta usługi. Przechowuj ten plik w bezpiecznym miejscu, ponieważ zapewnia on dostęp administratora do Twojego projektu.
Na stronie Przechowywanie włącz Przechowywanie w chmurze. Zanotuj nazwę swojego zasobnika.
Potrzebujesz zasobnika Cloud Storage, aby tymczasowo przechowywać pliki modelu podczas dodawania ich do projektu Firebase. Jeśli korzystasz z planu Blaze, możesz w tym celu utworzyć i używać zasobnika innego niż domyślny.
Na stronie Firebase ML kliknij Rozpocznij , jeśli jeszcze nie włączyłeś Firebase ML.
W konsoli interfejsów API Google otwórz swój projekt Firebase i włącz interfejs Firebase ML API.
Zainstaluj i zainicjuj pakiet Admin SDK .
Podczas inicjowania pakietu SDK określ dane logowania do konta usługi i zasobnik Cloud Storage, którego chcesz używać do przechowywania modeli:
Pyton
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();
Wdróż modele
Pliki TensorFlow Lite
Aby wdrożyć model TensorFlow Lite z pliku modelu, prześlij go do swojego projektu, a następnie opublikuj:
Pyton
# 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);
Modele TensorFlow i Keras
Dzięki pakietowi Python SDK możesz w jednym kroku przekonwertować model z zapisanego formatu modelu TensorFlow na TensorFlow Lite i przesłać go do zasobnika Cloud Storage. Następnie wdróż go w ten sam sposób, w jaki wdrażasz plik TensorFlow Lite.
Pyton
# 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)
Jeśli masz model Keras, możesz również przekonwertować go na TensorFlow Lite i przesłać w jednym kroku. Możesz użyć modelu Keras zapisanego w pliku HDF5:
Pyton
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.)
# ...
Możesz też przekonwertować i przesłać model Keras bezpośrednio ze skryptu szkoleniowego:
Pyton
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.)
# ...
Modele AutoML TensorFlow Lite
Jeśli model Edge został wytrenowany za pomocą interfejsu AutoML Cloud API lub interfejsu Google Cloud Console, możesz wdrożyć ten model w Firebase przy użyciu pakietu Admin SDK.
Konieczne będzie określenie identyfikatora zasobu modelu, który jest ciągiem znaków podobnym do poniższego przykładu:
projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER | Numer projektu zasobnika Cloud Storage zawierającego model. Może to być Twój projekt Firebase lub inny projekt Google Cloud. Możesz znaleźć tę wartość na stronie Ustawienia w konsoli Firebase lub na pulpicie nawigacyjnym Google Cloud Console. |
STORAGE_LOCATION | Lokalizacja zasobu zasobnika Cloud Storage zawierającego model. Ta wartość to zawsze us-central1 . |
MODEL_ID | Identyfikator modelu uzyskany z interfejsu AutoML Cloud API. |
Pyton
# 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);
Wymień modele swojego projektu
Możesz wyświetlić listę modeli swojego projektu, opcjonalnie filtrując wyniki:
Pyton
# 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);
Możesz filtrować według następujących pól:
Pole | Przykłady |
---|---|
display_name | display_name = example_model display_name != example_model Wszystkie wyświetlane nazwy z przedrostkiem display_name : experimental_* Pamiętaj, że obsługiwane jest tylko dopasowywanie prefiksów. |
tags | tags: face_detector tags: face_detector AND tags: experimental |
state.published | state.published = true state.published = false |
Połącz filtry z operatorami AND
, OR
i NOT
oraz nawiasami okrągłymi ( (
, )
).
Zaktualizuj modele
Po dodaniu modelu do projektu możesz zaktualizować jego nazwę wyświetlaną, tagi i plik modelu tflite
:
Pyton
# 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);
Cofnij publikację lub usuń modele
Aby cofnąć publikację lub usunąć model, przekaż identyfikator modelu do metod cofania publikacji lub usuwania. Gdy cofniesz publikację modelu, pozostanie on w Twoim projekcie, ale nie będzie dostępny do pobrania przez Twoje aplikacje. Gdy usuniesz model, zostanie on całkowicie usunięty z twojego projektu. (Cofnięcie publikacji modelu nie jest oczekiwane w standardowym przepływie pracy, ale można go użyć do natychmiastowego cofnięcia publikacji nowego modelu, który został przypadkowo opublikowany i nie jest jeszcze nigdzie używany, lub w przypadkach, gdy pobieranie „złego” modelu jest gorsze dla użytkowników modelu niż uzyskać błędy dotyczące braku modelu).
Jeśli nadal nie masz odniesienia do obiektu Model, prawdopodobnie będziesz musiał uzyskać identyfikator modelu, wyświetlając modele swojego projektu za pomocą filtra. Na przykład, aby usunąć wszystkie modele oznaczone jako „face_detector”:
Pyton
# 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);