استقرار و مدیریت مدل های سفارشی

می توانید مدل های سفارشی و مدل های آموزش دیده با AutoML را با استفاده از کنسول Firebase یا Firebase Admin Python و Node.js SDK اجرا و مدیریت کنید. اگر فقط می خواهید یک مدل را مستقر کنید و گهگاه آن را به روز کنید، معمولاً ساده ترین کار است که از کنسول Firebase استفاده کنید. Admin SDK می تواند هنگام ادغام با خطوط لوله ساخت، کار با نوت بوک های Colab یا Jupyter و سایر گردش کار مفید باشد.

استقرار و مدیریت مدل ها در کنسول Firebase

مدل های TensorFlow Lite

برای استقرار یک مدل TensorFlow Lite با استفاده از کنسول Firebase :

  1. صفحه مدل Firebase ML Custom را در کنسول 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. در صفحه Storage، Cloud Storage فعال کنید. به نام سطل خود توجه داشته باشید.

      برای ذخیره موقت فایل‌های مدل در حین افزودن آن‌ها به پروژه Firebase، به یک سطل Cloud Storage نیاز دارید. اگر در پلن Blaze هستید، می توانید یک سطل غیر از پیش فرض برای این منظور ایجاد و استفاده کنید.

    3. اگر هنوز Firebase ML فعال نکرده‌اید، در صفحه Firebase ML ، روی شروع به کار کلیک کنید.

  2. در کنسول Google APIs ، پروژه Firebase خود را باز کنید و Firebase ML API را فعال کنید.

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

مدل های تنسورفلو و کراس

با 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 کنسول آموزش داده‌اید، می‌توانید با استفاده از Admin SDK مدل را در Firebase مستقر کنید.

شما باید شناسه منبع مدل را مشخص کنید، که رشته ای شبیه به مثال زیر است:

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