نشر النماذج المخصصة وإدارتها

يمكنك نشر وإدارة النماذج المخصصة والنماذج المدربة على AutoML باستخدام إما وحدة تحكم Firebase أو Firebase Admin Python وNode.js SDK. إذا كنت تريد فقط نشر نموذج وتحديثه أحيانًا، فمن الأسهل عادةً استخدام وحدة تحكم Firebase. يمكن أن تكون Admin SDK مفيدة عند التكامل مع مسارات البناء، والعمل مع دفاتر ملاحظات Colab أو Jupyter، ومهام سير العمل الأخرى.

نشر النماذج وإدارتها في وحدة تحكم Firebase

نماذج TensorFlow لايت

لنشر نموذج 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 الخاص بك. إذا كنت مشتركًا في خطة 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 لايت

لنشر نموذج 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);

نماذج TensorFlow و Keras

باستخدام Python SDK، يمكنك تحويل نموذج من تنسيق النموذج المحفوظ TensorFlow إلى TensorFlow Lite وتحميله إلى مجموعة التخزين السحابي الخاصة بك في خطوة واحدة. ثم قم بنشره بنفس الطريقة التي تنشر بها ملف 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، فيمكنك نشر النموذج إلى Firebase باستخدام Admin SDK.

ستحتاج إلى تحديد معرف مورد النموذج، وهو عبارة عن سلسلة تشبه المثال التالي:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER رقم مشروع مجموعة Cloud Storage التي تحتوي على النموذج. قد يكون هذا مشروع Firebase الخاص بك أو مشروع Google Cloud آخر. يمكنك العثور على هذه القيمة في صفحة الإعدادات بوحدة تحكم Firebase أو لوحة معلومات وحدة تحكم Google Cloud.
STORAGE_LOCATION موقع المورد لحاوية التخزين السحابي التي تحتوي على النموذج. هذه القيمة دائمًا 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);

إلغاء نشر النماذج أو حذفها

لإلغاء نشر نموذج أو حذفه، قم بتمرير معرف النموذج إلى أساليب إلغاء النشر أو الحذف. عندما تقوم بإلغاء نشر نموذج، فإنه يظل موجودًا في مشروعك، ولكنه غير متاح لتطبيقاتك لتنزيله. عندما تقوم بحذف نموذج، تتم إزالته بالكامل من مشروعك. (لا يُتوقع إلغاء نشر نموذج في سير عمل قياسي، ولكن يمكنك استخدامه لإلغاء نشر نموذج جديد قمت بنشره عن طريق الخطأ على الفور ولم يتم استخدامه في أي مكان حتى الآن، أو في الحالات التي يكون فيها من الأسوأ أن يقوم المستخدمون بتنزيل نموذج "سيء" نموذج بدلاً من الحصول على أخطاء لم يتم العثور على النموذج.)

إذا لم يكن لديك مرجع لكائن النموذج، فربما تحتاج إلى الحصول على معرف النموذج عن طريق إدراج نماذج مشروعك باستخدام مرشح. على سبيل المثال، لحذف جميع النماذج التي تحمل علامة "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);