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

يمكنك نشر النماذج المخصّصة والنماذج المدرَّبة باستخدام AutoML وإدارتها باستخدام إما وحدة تحكّم Firebase أو حِزم تطوير البرامج (SDK) الخاصة بمشرف Firebase بلغة 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).

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

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

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

للاطّلاع على أمثلة على استخدام حزمة تطوير البرامج (SDK)، راجِع نموذج البدء السريع في Python و نموذج البدء السريع في 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 التي تريد استخدامها لتخزين نماذجك:

    PythonNode.js
    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 من ملف نموذج، عليك تحميله إلى مشروعك ثم نشره:

PythonNode.js
# 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) الخاصة بلغة 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

إذا درّبت نموذجًا على الجهاز باستخدام 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
PythonNode.js
# 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);

إدراج نماذج مشروعك

يمكنك إدراج نماذج مشروعك، مع إمكانية فلترة النتائج:

PythonNode.js
# 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 النموذج باتّباع الخطوات التالية:

PythonNode.js
# 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);

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

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

إذا لم يكن لديك مرجع إلى عنصر Model، من المحتمل أن تحتاج إلى الحصول على معرّف النموذج من خلال إدراج نماذج مشروعك باستخدام فلتر. على سبيل المثال، لحذف جميع النماذج التي تم تصنيفها بالعلامة "face_detector"، اتّبِع الخطوات التالية:

PythonNode.js
# 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);