Вы можете развертывать и управлять пользовательскими моделями и моделями, обученными AutoML, с помощью консоли Firebase или Firebase Admin Python и Node.js SDK. Если вы просто хотите развернуть модель и время от времени ее обновлять, обычно проще всего использовать консоль Firebase . Admin SDK может быть полезен при интеграции с конвейерами сборки, работе с блокнотами Colab или Jupyter и другими рабочими процессами.
Развертывание и управление моделями в консоли Firebase
Модели TensorFlow Lite
Чтобы развернуть модель TensorFlow Lite с помощью консоли Firebase :
- Откройте страницу пользовательской модели Firebase ML в консоли Firebase .
- Нажмите Добавить пользовательскую модель (или Добавить другую модель ).
- Укажите имя, которое будет использоваться для идентификации вашей модели в проекте Firebase, затем загрузите файл модели TensorFlow Lite (обычно заканчивающийся на
.tflite
или.lite
).
После развертывания модели вы можете найти ее на странице Custom. Оттуда вы можете выполнять такие задачи, как обновление модели новым файлом, загрузка модели и удаление модели из вашего проекта.
Развертывание и управление моделями с помощью Firebase Admin SDK
В этом разделе показано, как можно выполнить общие задачи развертывания и управления моделями с помощью Admin SDK. Для получения дополнительной помощи см. справочник SDK для Python или Node.js.
Примеры используемого SDK см. в примерах быстрого старта Python и Node.js.
Прежде чем начать
Если у вас еще нет проекта Firebase, создайте новый проект в консоли Firebase . Затем откройте свой проект и выполните следующие действия:
На странице настроек создайте учетную запись службы и загрузите файл ключа учетной записи службы. Сохраните этот файл в безопасности, так как он предоставляет администратору доступ к вашему проекту.
На странице Storage включите Cloud Storage . Запишите имя вашего контейнера.
Вам нужен контейнер Cloud Storage для временного хранения файлов моделей при добавлении их в ваш проект Firebase. Если вы используете план Blaze, вы можете создать и использовать контейнер, отличный от контейнера по умолчанию, для этой цели.
На странице Firebase ML нажмите « Начать» , если вы еще не включили Firebase ML .
В консоли API Google откройте проект Firebase и включите API Firebase ML.
Установите и инициализируйте Admin SDK .
При инициализации SDK укажите данные учетной записи службы и контейнер Cloud Storage , который вы хотите использовать для хранения своих моделей:
Питон
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();
Развертывание моделей
Файлы TensorFlow Lite
Чтобы развернуть модель TensorFlow Lite из файла модели, загрузите ее в свой проект, а затем опубликуйте:
Питон
# 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);
Модели TensorFlow и Keras
С помощью Python SDK вы можете преобразовать модель из сохраненного формата модели TensorFlow в TensorFlow Lite и загрузить ее в контейнер Cloud Storage за один шаг. Затем разверните ее так же, как вы разворачиваете файл TensorFlow Lite.
Питон
# 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)
Если у вас есть модель Keras, вы также можете преобразовать ее в TensorFlow Lite и загрузить ее за один шаг. Вы можете использовать модель Keras, сохраненную в файле HDF5:
Питон
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.)
# ...
Или вы можете преобразовать и загрузить модель Keras прямо из вашего обучающего скрипта:
Питон
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.)
# ...
Модели AutoML TensorFlow Lite
Если вы обучили модель Edge с помощью API AutoML Cloud или пользовательского интерфейса консоли Google Cloud , вы можете развернуть модель в Firebase с помощью Admin SDK.
Вам необходимо будет указать идентификатор ресурса модели, представляющий собой строку, которая выглядит следующим образом:
projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER | Номер проекта контейнера Cloud Storage , содержащего модель. Это может быть ваш проект Firebase или другой проект Google Cloud . Это значение можно найти на странице настроек консоли Firebase или панели инструментов консоли Google Cloud . |
STORAGE_LOCATION | Расположение ресурса контейнера Cloud Storage , содержащего модель. Это значение всегда us-central1 . |
MODEL_ID | Идентификатор модели, который вы получили из API AutoML Cloud. |
Питон
# 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);
Перечислите модели вашего проекта
Вы можете составить список моделей вашего проекта, при желании отфильтровав результаты:
Питон
# 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);
Вы можете фильтровать по следующим полям:
Поле | Примеры |
---|---|
display_name | display_name = example_model display_name != example_model Все отображаемые имена с префиксом display_name : experimental_* Обратите внимание, что поддерживается только сопоставление префиксов. |
tags | tags: face_detector tags: face_detector AND tags: experimental |
state.published | state.published = true state.published = false |
Объедините фильтры с операторами AND
, OR
и NOT
и скобками ( (
, )
).
Обновление моделей
После добавления модели в проект вы можете обновить ее отображаемое имя, теги и файл модели tflite
:
Питон
# 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);
Отменить публикацию или удалить модели
Чтобы отменить публикацию или удалить модель, передайте идентификатор модели в методы unpublish или delete. Когда вы отменяете публикацию модели, она остается в вашем проекте, но недоступна для загрузки вашими приложениями. Когда вы удаляете модель, она полностью удаляется из вашего проекта. (Отмена публикации модели не ожидается в стандартном рабочем процессе, но вы можете использовать ее, чтобы немедленно отменить публикацию новой модели, которую вы случайно опубликовали и которая пока нигде не используется, или в случаях, когда для пользователей хуже загрузить «плохую» модель, чем получить ошибки «модель не найдена».)
Если у вас все еще нет ссылки на объект Model, вам, вероятно, понадобится получить идентификатор модели, перечислив модели вашего проекта с помощью фильтра. Например, чтобы удалить все модели с тегом "face_detector":
Питон
# 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);