您可以使用下列兩種方式部署及管理自訂模型和 AutoML 訓練的模型: Firebase 控制台,或是 Firebase Admin Python 和 Node.js SDK。如果發生以下情況: 只想部署模型並不定期更新時,最簡單的方式就是 請使用 Firebase 控制台。Admin SDK 可有效整合 建構管線、使用 Colab 或 Jupyter 筆記本和其他工作流程
在 Firebase 控制台中部署及管理模型
TensorFlow Lite 模型
如何使用 Firebase 控制台部署 TensorFlow Lite 模型:
- 在「自訂模型」頁面中開啟Firebase ML「自訂模型」頁面, Firebase 控制台。
- 按一下「新增自訂模式」或「新增其他模式」。
- 指定在 Firebase 專案中用於識別模型的名稱,然後上傳 TensorFlow Lite 模型檔案 (通常結尾為
.tflite
或.lite
)。
部署模型後,您可以在「自訂」頁面中找到該模型。接下來 像是用新檔案更新模型、下載 並從專案中刪除模型
使用 Firebase Admin SDK 部署及管理模型
本節說明如何完成常見的模型部署與管理作業 運用 Admin SDK 完成任務請參閱 Python 的 SDK 參考資料 或 Node.js 來取得其他說明。
如需使用中 SDK 的範例,請參閱 Python 快速入門導覽課程範例和 Node.js 快速入門導覽課程範例。
事前準備
如果您還沒有 Firebase 專案,請在 Firebase 控制台。接著,請開啟專案並執行下列操作:
在 Google API 控制台中,開啟 Firebase ,並啟用 Firebase ML API
-
初始化 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 並上傳 通常只要一個步驟就能完成您可以使用儲存至 HDF5 檔案的 Keras 模型:
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 訓練 Edge 模型 或透過 Google Cloud 控制台 UI,您可以使用以下方法將模型部署至 Firebase: Admin SDK
您必須指定模型的資源 ID,該 ID 是 如下所示:
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 取得的模型 ID。 |
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);
取消發布或刪除模型
如要取消發布或刪除模型,請將模型 ID 傳送至取消發布或刪除動作 方法。取消發布的模型會保留在專案中,但不會 供您的應用程式下載刪除模型後,系統會從專案中完全移除該模型。(一般而言,模型不得取消發布模型 但可以用來立即取消發布新模型 並且並未在任何地方使用,或在某些情況下 會降低使用者下載「不良」模型先前提過模型 錯誤)。
如果您目前沒有 Model 物件的參照,則可能需要 使用篩選器列出專案的模型,以便取得模型 ID舉例來說 刪除所有標記為「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);