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

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

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

مدل‌های TensorFlow Lite

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

  1. صفحه مدل Firebase ML Custom را در کنسول Firebase باز کنید.
  2. روی افزودن مدل سفارشی (یا افزودن مدل دیگر ) کلیک کنید.
  3. نامی را مشخص کنید که برای شناسایی مدل شما در پروژه Firebase استفاده خواهد شد، سپس فایل مدل TensorFlow Lite (که معمولاً به .tflite یا .lite ختم می‌شود) را آپلود کنید.

پس از استقرار مدل، می‌توانید آن را در صفحه سفارشی‌سازی (Custom) پیدا کنید. از آنجا می‌توانید کارهایی مانند به‌روزرسانی مدل با یک فایل جدید، دانلود مدل و حذف مدل از پروژه خود را انجام دهید.

استقرار و مدیریت مدل‌ها با Firebase Admin SDK

این بخش نشان می‌دهد که چگونه می‌توانید وظایف رایج استقرار و مدیریت مدل را با Admin SDK انجام دهید. برای کمک بیشتر به مرجع SDK برای پایتون یا Node.js مراجعه کنید.

برای نمونه‌هایی از SDK مورد استفاده، به نمونه شروع سریع پایتون و نمونه شروع سریع Node.js مراجعه کنید.

قبل از اینکه شروع کنی

  1. اگر از قبل پروژه Firebase ندارید، یک پروژه جدید در کنسول Firebase ایجاد کنید. سپس پروژه خود را باز کنید و موارد زیر را انجام دهید:

    1. در صفحه تنظیمات ، یک حساب کاربری سرویس ایجاد کنید و فایل کلید حساب کاربری سرویس را دانلود کنید. این فایل را ایمن نگه دارید، زیرا به شما امکان دسترسی مدیر به پروژه‌تان را می‌دهد.

    2. در صفحه ذخیره‌سازی، Cloud Storage فعال کنید. نام باکت خود را یادداشت کنید.

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

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

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

  3. 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',
      })
    

    نود جی اس

    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)

نود جی اس

// 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

با استفاده از 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 شناسه مدل، که از API AutoML Cloud دریافت کرده‌اید.

پایتون

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

نود جی اس

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

نود جی اس

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

نود جی اس

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

مدل‌ها را از حالت انتشار خارج یا حذف کنید

برای لغو انتشار یا حذف یک مدل، شناسه مدل را به متدهای unpublish یا delete ارسال کنید. وقتی یک مدل را لغو انتشار می‌کنید، در پروژه شما باقی می‌ماند، اما برای دانلود برنامه‌های شما در دسترس نیست. وقتی یک مدل را حذف می‌کنید، به طور کامل از پروژه شما حذف می‌شود. (لغو انتشار یک مدل در یک گردش کار استاندارد انتظار نمی‌رود، اما می‌توانید از آن برای لغو انتشار فوری مدل جدیدی که به طور تصادفی منتشر کرده‌اید و هنوز در هیچ کجا استفاده نمی‌شود، یا در مواردی که دانلود یک مدل "بد" برای کاربران بدتر از دریافت خطاهای "مدل پیدا نشد" است، استفاده کنید.)

اگر هنوز به شیء 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)

نود جی اس

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