يمكنك نشر النماذج المخصّصة والنماذج المدربة باستخدام ميزة "التعلم الآلي التلقائي" وإدارتها باستخدام إما وحدة تحكّم Firebase أو حِزم تطوير البرامج (SDK) Firebase Admin Python وNode.js. إذا كنت تريد فقط نشر نموذج وتعديله من حين لآخر، من الأسهل عادةً استخدام وحدة تحكّم Firebase. يمكن أن تكون "حزمة تطوير البرامج (SDK) للمشرف" مفيدة عند الدمج مع مسارات الإنشاء والعمل باستخدام أوراق ملاحظات Colab أو Jupyter وغيرها من مهام سير العمل.
نشر النماذج وإدارتها في وحدة تحكّم Firebase
نماذج TensorFlow Lite
لنشر نموذج TensorFlow Lite باستخدام وحدة تحكّم Firebase:
- افتح Firebase ML صفحة النموذج المخصّص في وحدة تحكّم Firebase.
- انقر على إضافة نموذج مخصّص (أو إضافة نموذج آخر).
- حدِّد اسمًا سيتم استخدامه لتحديد النموذج في مشروعك على Firebase، ثم حمِّل ملف نموذج TensorFlow Lite (ينتهي عادةً بحرف
.tflite
أو.lite
).
بعد نشر النموذج، يمكنك العثور عليه في الصفحة المخصصة. من هناك، يمكنك إكمال مهام مثل تحديث النموذج بملف جديد وتنزيل النموذج وحذف النموذج من مشروعك.
نشر النماذج وإدارتها باستخدام حزمة تطوير البرامج (SDK) لمشرف Firebase
يوضّح هذا القسم كيفية إكمال المهام الشائعة لإدارة النماذج ونشرها باستخدام حزمة Admin SDK. يمكنك الاطّلاع على مرجع حزمة تطوير البرامج (SDK) لـ Python أو Node.js للحصول على مساعدة إضافية.
للاطّلاع على أمثلة على حزمة تطوير البرامج (SDK) المستخدَمة، يمكنك الاطّلاع على نموذج البدء السريع في Python ونموذج البدء السريع في Node.js.
قبل البدء
إذا لم يكن لديك مشروع على Firebase، أنشئ مشروعًا جديدًا في وحدة تحكّم Firebase. بعد ذلك، افتح مشروعك و نفِّذ ما يلي:
في صفحة الإعدادات، أنشئ حساب خدمة و نزِّل ملف مفتاح حساب الخدمة. يجب الاحتفاظ بهذا الملف بأمان، لأنّه يمنح المشرف إذن الوصول إلى مشروعك.
في صفحة "مساحة التخزين"، فعِّل "Cloud Storage". دوِّن اسم الحزمة.
تحتاج إلى حزمة Cloud Storage لتخزين ملفات النماذج مؤقتًا أثناء إضافتها إلى مشروعك على Firebase. إذا كنت تستخدم خطة Blaze، يمكنك إنشاء حزمة غير الحزمة التلقائية واستخدامها لهذا الغرض.
في صفحة Firebase ML، انقر على البدء إذا لم يسبق لك تفعيل Firebase ML.
في وحدة تحكُّم Google APIs، افتح مشروعك على Firebase وفعِّل واجهة برمجة التطبيقات Firebase ML API.
ثبِّت حزمة 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
باستخدام حزمة Python SDK، يمكنك تحويل نموذج من تنسيق النموذج المحفوظ من 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 جميع الأسماء المعروضة التي تبدأ بالبادئة 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);