Check out what’s new from Firebase at Google I/O 2022. Learn more

Развертывание пользовательских моделей и управление ими

Вы можете развертывать пользовательские модели и модели, обученные AutoML, и управлять ими с помощью консоли Firebase или пакетов Firebase Admin Python и Node.js SDK. Если вы просто хотите развернуть модель и время от времени обновлять ее, обычно проще всего использовать консоль Firebase. Административный SDK может быть полезен при интеграции с конвейерами сборки, работе с блокнотами Colab или Jupyter и других рабочих процессах.

Развертывание и управление моделями в консоли Firebase

Модели TensorFlow Lite

Чтобы развернуть модель TensorFlow Lite с помощью консоли Firebase:

  1. Откройте страницу пользовательской модели Firebase ML в консоли Firebase.
  2. Нажмите « Добавить пользовательскую модель» (или «Добавить другую модель» ).
  3. Укажите имя, которое будет использоваться для идентификации вашей модели в проекте Firebase, затем загрузите файл модели TensorFlow Lite (обычно заканчивающийся на .tflite или .lite ).

После развертывания модели ее можно найти на странице Custom. Оттуда вы можете выполнять такие задачи, как обновление модели новым файлом, загрузка модели и удаление модели из вашего проекта.

Развертывание моделей и управление ими с помощью Firebase Admin SDK

В этом разделе показано, как выполнять стандартные задачи развертывания и управления моделями с помощью Admin SDK. Дополнительные сведения см. в справочнике SDK для Python или Node.js.

Примеры используемого SDK см. в примере быстрого запуска Python и в примере быстрого запуска Node.js.

Прежде чем вы начнете

  1. Если у вас еще нет проекта Firebase, создайте новый проект в консоли Firebase . Затем откройте свой проект и выполните следующие действия:

    1. На странице настроек создайте учетную запись службы и загрузите файл ключа учетной записи службы. Храните этот файл в безопасности, так как он предоставляет администратору доступ к вашему проекту.

    2. На странице «Хранилище» включите «Облачное хранилище». Обратите внимание на название вашего ведра.

      Вам понадобится сегмент облачного хранилища для временного хранения файлов модели при добавлении их в проект Firebase. Если вы пользуетесь планом Blaze, вы можете создать и использовать для этой цели корзину, отличную от стандартной.

    3. На странице Firebase ML нажмите « Начать », если вы еще не включили Firebase ML.

  2. В консоли API Google откройте проект Firebase и включите API Firebase ML.

  3. Установите и инициализируйте Admin SDK .

    При инициализации SDK укажите учетные данные своей служебной учетной записи и сегмент облачного хранилища, который вы хотите использовать для хранения своих моделей:

    питон

    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 и загрузить ее в корзину облачного хранилища за один шаг. Затем разверните его так же, как вы развертываете файл 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 с помощью AutoML Cloud API или пользовательского интерфейса Google Cloud Console, вы можете развернуть модель в Firebase с помощью Admin SDK.

Вам нужно будет указать идентификатор ресурса модели, который представляет собой строку, похожую на следующий пример:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER Номер проекта сегмента Cloud Storage, содержащего модель. Это может быть ваш проект Firebase или другой проект Google Cloud. Вы можете найти это значение на странице настроек консоли Firebase или панели инструментов Google Cloud Console.
STORAGE_LOCATION Расположение ресурсов корзины Cloud Storage, содержащей модель. Это значение всегда us-central1 .
MODEL_ID Идентификатор модели, полученный из AutoML Cloud API.

питон

# 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

Все отображаемые имена с experimental_ Experiment_:

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);

Отменить публикацию или удалить модели

Чтобы отменить публикацию или удалить модель, передайте идентификатор модели в методы отмены публикации или удаления. Когда вы отменяете публикацию модели, она остается в вашем проекте, но недоступна для скачивания вашими приложениями. Когда вы удаляете модель, она полностью удаляется из вашего проекта. (Отмена публикации модели не предусмотрена в стандартном рабочем процессе, но вы можете использовать его для немедленной отмены публикации новой модели, которую вы случайно опубликовали и которая еще нигде не используется, или в случаях, когда пользователям хуже загрузить «плохую» модель. модель, чем получать ошибки модели, не найденной.)

Если у вас все еще нет ссылки на объект модели, вам, вероятно, потребуется получить идентификатор модели, перечислив модели вашего проекта с фильтром. Например, чтобы удалить все модели с тегом «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);