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

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

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

Модели TensorFlow Lite

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

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

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

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

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

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

Прежде чем начать

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

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

    2. На странице «Хранилище» включите Cloud Storage . Запишите имя своего ведра.

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

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

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

  3. Установите и инициализируйте 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 с помощью AutoML Cloud API или пользовательского интерфейса консоли 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 Идентификатор модели, полученный от 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_ :

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

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

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

Если у вас еще нет ссылки на объект 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);