Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

Вы можете развертывать пользовательские модели и модели, обученные 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 ).

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

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

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

Для примеров SDK в использовании, смотрите образец QUICKSTART Python и Node.js QUICKSTART образца .

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

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

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

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

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

    3. На странице Firebase ML, нажмите кнопку Начало , если вы еще не включили Firebase ML.

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

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

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

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

Развернуть модели

Файлы TensorFlow Lite

Чтобы развернуть модель TensorFlow Lite из файла модели, загрузите ее в свой проект и затем опубликуйте:

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

Модели TensorFlow и Keras

С помощью Python SDK вы можете преобразовать модель из формата сохраненной модели TensorFlow в TensorFlow Lite и загрузить ее в корзину облачного хранилища за один шаг. Затем разверните его так же, как вы развертываете файл 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)

Если у вас есть модель Keras, вы также можете преобразовать ее в TensorFlow Lite и загрузить за один шаг. Вы можете использовать модель Keras, сохраненную в файле 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.)
# ...

Или вы можете преобразовать и загрузить модель Keras прямо из своего учебного сценария:

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.)
# ...

Модели AutoML TensorFlow Lite

Если вы подготовили модель пограничной с 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 Console.
STORAGE_LOCATION Расположение ресурса в сегменте Cloud Storage, содержащем модель. Это значение всегда us-central1 .
MODEL_ID Идентификатор модели, полученный из AutoML Cloud API.

Python

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

Составьте список моделей вашего проекта

Вы можете перечислить модели своего проекта, при желании отфильтровав результаты:

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

Вы можете фильтровать по следующим полям:

Поле Примеры
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 файл модели:

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. (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:

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