Triển khai và quản lý các mô hình tuỳ chỉnh

Bạn có thể triển khai và quản lý các mô hình tuỳ chỉnh và mô hình được huấn luyện bằng AutoML bằng cách sử dụng bảng điều khiển Firebase hoặc Firebase Admin SDK cho Python và Node.js. Nếu chỉ muốn triển khai một mô hình và thỉnh thoảng cập nhật mô hình đó, thì cách đơn giản nhất thường là sử dụng bảng điều khiển Firebase. Admin SDK có thể hữu ích khi tích hợp với các quy trình xây dựng, làm việc với Colab hoặc sổ tay Jupyter và các quy trình khác.

Triển khai và quản lý các mô hình trong bảng điều khiển Firebase

Mô hình TensorFlow Lite

Cách triển khai mô hình TensorFlow Lite bằng bảng điều khiển Firebase:

  1. Mở trang Firebase ML Mô hình tuỳ chỉnh trong bảng điều khiển Firebase.
  2. Nhấp vào Thêm mô hình tuỳ chỉnh (hoặc Thêm mô hình khác).
  3. Chỉ định tên sẽ được dùng để xác định mô hình của bạn trong dự án Firebase, sau đó tải tệp mô hình TensorFlow Lite lên (thường có đuôi .tflite hoặc .lite).

Sau khi triển khai mô hình, bạn có thể tìm thấy mô hình đó trên trang Tuỳ chỉnh. Từ đó, bạn có thể hoàn thành các việc như cập nhật mô hình bằng một tệp mới, tải mô hình xuống và xoá mô hình khỏi dự án của mình.

Triển khai và quản lý các mô hình bằng Firebase Admin SDK

Phần này cho biết cách hoàn tất các tác vụ triển khai và quản lý mô hình phổ biến bằng Admin SDK. Hãy xem tài liệu tham khảo về SDK cho Python hoặc Node.js để được trợ giúp thêm.

Để biết ví dụ về cách sử dụng SDK, hãy xem mẫu bắt đầu nhanh bằng Pythonmẫu bắt đầu nhanh bằng Node.js.

Trước khi bắt đầu

  1. Nếu bạn chưa có dự án Firebase, hãy tạo một dự án mới trong Firebasebảng điều khiển. Sau đó, hãy mở dự án của bạn và làm như sau:

    1. Trên trang Cài đặt, hãy tạo một tài khoản dịch vụ và tải tệp khoá tài khoản dịch vụ xuống. Hãy giữ tệp này an toàn vì tệp này cấp quyền truy cập của quản trị viên vào dự án của bạn.

    2. Trên trang Bộ nhớ, hãy bật Cloud Storage. Ghi lại tên nhóm của bạn.

      Bạn cần một vùng chứa Cloud Storage để tạm thời lưu trữ các tệp mô hình trong khi thêm các tệp đó vào dự án Firebase. Nếu đang sử dụng gói Blaze, bạn có thể tạo và sử dụng một vùng chứa khác ngoài vùng chứa mặc định cho mục đích này.

    3. Trên trang Firebase ML, hãy nhấp vào Bắt đầu nếu bạn chưa bật Firebase ML.

  2. Trong Google API Console, hãy mở dự án Firebase của bạn rồi bật Firebase ML API.

  3. Cài đặt và khởi chạy Admin SDK.

    Khi bạn khởi động SDK, hãy chỉ định thông tin đăng nhập tài khoản dịch vụ và vùng chứa Cloud Storage mà bạn muốn dùng để lưu trữ các mô hình:

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

Triển khai mô hình

Tệp TensorFlow Lite

Để triển khai mô hình TensorFlow Lite từ một tệp mô hình, hãy tải tệp đó lên dự án của bạn rồi xuất bản:

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

Mô hình TensorFlow và Keras

Với Python SDK, bạn có thể chuyển đổi mô hình từ định dạng mô hình đã lưu của TensorFlow sang TensorFlow Lite và tải mô hình đó lên vùng chứa Cloud Storage chỉ trong một bước. Sau đó, hãy triển khai tệp này theo cách tương tự như cách bạn triển khai tệp 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)

Nếu có mô hình Keras, bạn cũng có thể chuyển đổi mô hình đó sang TensorFlow Lite và tải lên trong một bước. Bạn có thể sử dụng một mô hình Keras được lưu vào tệp 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.)
# ...

Hoặc bạn có thể chuyển đổi và tải mô hình Keras lên ngay từ tập lệnh huấn luyện:

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.)
# ...

Mô hình AutoML TensorFlow Lite

Nếu đã huấn luyện một mô hình Edge bằng AutoML Cloud API hoặc bằng giao diện người dùng bảng điều khiển Google Cloud, bạn có thể triển khai mô hình đó lên Firebase bằng Admin SDK.

Bạn sẽ cần chỉ định giá trị nhận dạng tài nguyên của mô hình. Đây là một chuỗi có dạng như ví dụ sau:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER Số dự án của nhóm Cloud Storage chứa mô hình. Đây có thể là dự án Firebase của bạn hoặc một dự án Google Cloud khác. Bạn có thể tìm thấy giá trị này trên trang Cài đặt của bảng điều khiển Firebase hoặc trang tổng quan bảng điều khiển Google Cloud.
STORAGE_LOCATION Vị trí tài nguyên của nhóm Cloud Storage chứa mô hình. Giá trị này luôn là us-central1.
MODEL_ID Mã nhận dạng của mô hình mà bạn nhận được từ 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);

Liệt kê các mô hình của dự án

Bạn có thể liệt kê các mô hình của dự án, đồng thời lọc kết quả (không bắt buộc):

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

Bạn có thể lọc theo các trường sau:

Trường Ví dụ
display_name display_name = example_model
display_name != example_model

Tất cả tên hiển thị có tiền tố experimental_:

display_name : experimental_*

Xin lưu ý rằng chỉ có tính năng so khớp tiền tố được hỗ trợ.

tags tags: face_detector
tags: face_detector AND tags: experimental
state.published state.published = true
state.published = false

Kết hợp các bộ lọc bằng toán tử AND, ORNOT cũng như dấu ngoặc đơn ((, )).

Cập nhật mô hình

Sau khi thêm một mô hình vào dự án, bạn có thể cập nhật tên hiển thị, thẻ và tệp mô hình tflite của mô hình đó:

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

Huỷ xuất bản hoặc xoá mô hình

Để huỷ xuất bản hoặc xoá một mô hình, hãy truyền mã mô hình đến các phương thức huỷ xuất bản hoặc xoá. Khi bạn huỷ xuất bản một mô hình, mô hình đó vẫn nằm trong dự án của bạn nhưng không có sẵn để các ứng dụng tải xuống. Khi bạn xoá một mô hình, mô hình đó sẽ bị xoá hoàn toàn khỏi dự án của bạn. (Việc huỷ xuất bản một mô hình không được mong đợi trong quy trình làm việc tiêu chuẩn, nhưng bạn có thể sử dụng quy trình này để huỷ xuất bản ngay một mô hình mới mà bạn vô tình xuất bản và chưa được sử dụng ở bất kỳ đâu, hoặc trong trường hợp người dùng tải xuống một mô hình "xấu" sẽ tệ hơn so với việc gặp lỗi không tìm thấy mô hình.)

Nếu vẫn không có thông tin tham chiếu đến đối tượng Mô hình, có thể bạn sẽ cần lấy mã mô hình bằng cách liệt kê các mô hình của dự án bằng một bộ lọc. Ví dụ: để xoá tất cả các mô hình được gắn thẻ "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);