Modele niestandardowe możesz wdrażać i nimi zarządzać za pomocą konsoli Firebase lub pakietów Firebase Admin SDK w językach Python i Node.js. Jeśli chcesz tylko wdrożyć model i od czasu do czasu go aktualizować, najprościej będzie użyć konsoli Firebase. Pakiet Admin SDK może być przydatny podczas integracji z potokami kompilacji, pracy z Colab lub Jupyter Notebooks oraz innymi procesami.
Wdrażanie modeli i zarządzanie nimi w konsoli Firebase
Modele TensorFlow Lite
Aby wdrożyć model TensorFlow Lite za pomocą konsoli Firebase:
- W konsoli Firebase otwórz stronę Firebase ML model niestandardowy.
- Kliknij Dodaj model niestandardowy (lub Dodaj kolejny model).
- Określ nazwę, która będzie używana do identyfikowania modelu w projekcie Firebase, a następnie prześlij plik modelu TensorFlow Lite (zwykle z rozszerzeniem
.tflitelub.lite).
Po wdrożeniu model znajdziesz na stronie Niestandardowy. Możesz tam wykonywać takie czynności jak aktualizowanie modelu za pomocą nowego pliku, pobieranie modelu i usuwanie go z projektu.
Wdrażanie modeli i zarządzanie nimi za pomocą pakietu Firebase Admin SDK
W tej sekcji dowiesz się, jak wykonywać typowe zadania związane z wdrażaniem modeli i zarządzaniem nimi za pomocą pakietu Admin SDK. Dodatkowe informacje znajdziesz w dokumentacji pakietu SDK w języku Python lub Node.js.
Przykłady użycia pakietu SDK znajdziesz w krótkim wprowadzeniu do Pythona i krótkim wprowadzeniu do Node.js.
Zanim zaczniesz
Jeśli nie masz jeszcze projektu Firebase, utwórz nowy projekt w Firebase konsoli. Następnie otwórz projekt i wykonaj te czynności:
Na stronie Ustawienia utwórz konto usługi i pobierz plik klucza konta usługi. Chroń ten plik, ponieważ przyznaje on dostęp administratora do Twojego projektu.
Na stronie Miejsce na dane włącz Cloud Storage. Zanotuj nazwę zasobnika.
Potrzebujesz zasobnika Cloud Storage, aby tymczasowo przechowywać pliki modeli podczas dodawania ich do projektu w Firebase. Jeśli korzystasz z planu Blaze, możesz w tym celu utworzyć i użyć zasobnika innego niż domyślny.
Jeśli nie masz jeszcze włączonej usługi Firebase ML, na stronie Firebase ML kliknij Rozpocznij.
W konsoli interfejsów API Google otwórz projekt Firebase i włącz interfejs Firebase ML API.
Zainstaluj i zainicjuj pakiet Admin SDK.
Podczas inicjowania pakietu SDK określ dane logowania konta usługi i zasobnik Cloud Storage którego chcesz używać do przechowywania modeli:
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();
Wdrażanie modeli
Pliki TensorFlow Lite
Aby wdrożyć model TensorFlow Lite z pliku modelu, prześlij go do projektu, a następnie opublikuj:
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);
Modele TensorFlow i Keras
Za pomocą pakietu Python SDK możesz w jednym kroku przekonwertować model z formatu zapisanego modelu TensorFlow na TensorFlow Lite i przesłać go do zasobnika Cloud Storage. Następnie wdróż go w taki sam sposób jak plik 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)
Jeśli masz model Keras, możesz go też przekonwertować na TensorFlow Lite i przesłać w jednym kroku. Możesz użyć modelu Keras zapisanego w pliku 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.)
# ...
Możesz też przekonwertować i przesłać model Keras bezpośrednio ze skryptu trenowania:
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.)
# ...
Wyświetlanie listy modeli projektu
Możesz wyświetlić listę modeli projektu, opcjonalnie filtrując wyniki:
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);
Możesz filtrować według tych pól:
| Pole | Przykłady |
|---|---|
display_name |
display_name = example_modeldisplay_name != example_modelWszystkie nazwy wyświetlane z prefiksem display_name : experimental_*
Pamiętaj, że obsługiwane jest tylko dopasowywanie prefiksów. |
tags |
tags: face_detectortags: face_detector AND tags: experimental
|
state.published |
state.published = truestate.published = false
|
Łącz filtry za pomocą operatorów AND, OR i NOT oraz nawiasów ((, )).
Aktualizowanie modeli
Po dodaniu modelu do projektu możesz zaktualizować jego nazwę wyświetlaną, tagi i plik modelu 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);
Cofanie publikacji modeli i ich usuwanie
Aby cofnąć publikację modelu lub go usunąć, przekaż jego identyfikator do metod cofania publikacji lub usuwania. Gdy cofniesz publikację modelu, pozostanie on w projekcie, ale nie będzie można go pobrać w aplikacjach. Gdy usuniesz model, zostanie on całkowicie usunięty z projektu. (Cofanie publikacji modelu nie jest oczekiwane w standardowym procesie, ale możesz go użyć, aby natychmiast cofnąć publikację nowego modelu, który został przypadkowo opublikowany i nie jest jeszcze nigdzie używany, lub w przypadkach, gdy pobranie „złego” modelu jest gorsze dla użytkowników niż otrzymywanie błędów „nie znaleziono modelu”).
Jeśli nie masz już odniesienia do obiektu Model, prawdopodobnie musisz uzyskać identyfikator modelu, wyświetlając listę modeli projektu z filtrem. Aby na przykład usunąć wszystkie modele oznaczone tagiem „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);