Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

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

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

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

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

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

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

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

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

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

  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

Если вы обучили модель 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.

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

08декада10

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

Поле Примеры
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 модели 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);