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

Вы можете развертывать и управлять пользовательскими моделями и моделями, обученными с помощью AutoML, используя либо консоль Firebase , либо SDK Firebase Admin для Python и Node.js. Если вам нужно просто развернуть модель и время от времени обновлять ее, обычно проще всего использовать консоль Firebase . SDK Admin может быть полезен при интеграции с конвейерами сборки, работе с блокнотами 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 . Запишите имя вашего хранилища.

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

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

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

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

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

    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 и загрузить ее в свой сегмент Cloud Storage за один шаг. Затем разверните ее так же, как и файл 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

Если вы обучили модель 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 Идентификатор модели, полученный из API AutoML Cloud.

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