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

يمكنك نشر وإدارة النماذج المخصّصة والنماذج المُدرَّبة على AutoML باستخدام وحدة تحكُّم Firebase أو حزم تطوير البرامج (SDK) بكل من Python وNode.js لمشرف Firebase. إذا كنت تريد فقط نشر نموذج وتعديله من حين لآخر، من الأسهل عادةً استخدام وحدة تحكّم Firebase. يمكن أن تكون "حزمة تطوير البرامج (SDK) للمشرف" مفيدة عند الدمج مع مسارات الإنشاء والعمل باستخدام أوراق ملاحظات Colab أو Jupyter وغيرها من مهام سير العمل.

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

نماذج TensorFlow Lite

لنشر نموذج TensorFlow Lite باستخدام وحدة تحكّم Firebase:

  1. افتح صفحة النموذج المخصّص Firebase ML في وحدة تحكّم Firebase.
  2. انقر على إضافة نموذج مخصّص (أو إضافة نموذج آخر).
  3. حدِّد اسمًا سيتم استخدامه لتحديد النموذج في مشروعك على Firebase، ثم حمِّل ملف نموذج TensorFlow Lite (ينتهي عادةً بحرف .tflite أو .lite).

بعد نشر النموذج، يمكنك العثور عليه في صفحة "مخصّص". من هناك، يمكنك إكمال مهام، مثل تعديل النموذج باستخدام ملف جديد وتنزيل النموذج وحذفه من مشروعك.

نشر النماذج وإدارتها باستخدام حزمة تطوير البرامج (SDK) للمشرف في Firebase

يوضّح هذا القسم كيفية إكمال المهام الشائعة لإدارة النماذج ونشرها باستخدام حزمة Admin SDK. يمكنك الاطّلاع على مرجع حزمة تطوير البرامج (SDK) لـ Python أو Node.js للحصول على مساعدة إضافية.

للاطّلاع على أمثلة عن حزمة SDK قيد الاستخدام، يمكنك الاطّلاع على نموذج البدء السريع في Python ونموذج Node.js Quickstart.

قبل البدء

  1. إذا لم يكن لديك مشروع على Firebase، يمكنك إنشاء مشروع جديد في وحدة تحكُّم Firebase. بعد ذلك، افتح مشروعك و نفِّذ ما يلي:

    1. في صفحة الإعدادات، أنشئ حساب خدمة و نزِّل ملف مفتاح حساب الخدمة. يجب الاحتفاظ بهذا الملف بأمان، لأنّه يمنح المشرف إذن الوصول إلى مشروعك.

    2. في صفحة "مساحة التخزين"، فعِّل Cloud Storage. دوِّن اسم الحزمة.

      تحتاج إلى حزمة Cloud Storage لتخزين ملفات النماذج مؤقتًا أثناء إضافتها إلى مشروعك على Firebase. إذا كنت تستخدم خطة Blaze، يمكنك إنشاء حزمة غير الحزمة التلقائية واستخدامها لهذا الغرض.

    3. في صفحة Firebase ML، انقر على البدء في حال عدم تفعيل Firebase ML بعد.

  2. في وحدة تحكُّم Google APIs، افتح مشروعك على 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

باستخدام حزمة تطوير البرامج (SDK) لـ Python، يمكنك تحويل نموذج من تنسيق النموذج المحفوظ في 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 باستخدام حزمة تطوير البرامج (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 رقم تعريف النموذج، الذي حصلت عليه من 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

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