Mengelola model yang dihosting

Anda dapat mengelola model project yang dihosting menggunakan Firebase console atau Firebase Admin Python dan Node.js SDK. Jika Anda hanya ingin mengupload model dan sesekali mengupdatenya, cara termudah biasanya menggunakan Firebase console. Admin SDK dapat membantu saat mengintegrasikan pipeline build, bekerja dengan notebook Colab atau Jupyter, dan alur kerja lainnya.

Mengelola model di Firebase console

Untuk menghosting dan memublikasikan model TensorFlow Lite menggunakan Firebase console:

  1. Buka halaman model Kustom ML Kit di Firebase console.
  2. Klik Tambahkan model kustom (atau Tambahkan model lain).
  3. Tentukan nama yang akan digunakan untuk mengidentifikasi model Anda di project Firebase, lalu upload file model TensorFlow Lite (biasanya diakhiri dengan .tflite atau .lite).

Setelah menghosting model, Anda dapat menemukannya di halaman Kustom. Setelah itu, Anda dapat menyelesaikan tugas seperti mengupdate model dengan file baru, mendownload model, dan menghapus model dari project Anda.

Mengelola model dengan Firebase Admin SDK

Bagian ini menunjukkan cara menyelesaikan tugas pengelolaan model umum dengan Admin SDK. Lihat referensi SDK untuk Python atau Node.js untuk mendapatkan bantuan tambahan.

Untuk contoh penggunaan SDK, lihat contoh berikut:

Sebelum memulai

  1. Jika Anda belum memiliki project Firebase, buat project baru di Firebase console. Kemudian, buka project Anda dan lakukan hal berikut:

    1. Di halaman Setelan, buat akun layanan dan download file kunci akun layanan. Pastikan agar file ini tetap aman, karena file tersebut memberi administrator akses ke project Anda.

    2. Pada halaman Storage, aktifkan Cloud Storage. Catat nama bucket Anda.

      Anda memerlukan bucket Storage untuk menyimpan file model secara sementara sekaligus menambahkannya ke project Firebase Anda. Jika Anda menggunakan paket Blaze, Anda dapat membuat dan menggunakan bucket selain default untuk tujuan ini.

    3. Di halaman ML Kit, klik Mulai jika Anda belum mengaktifkan ML Kit.

  2. Di konsol API Google, buka project Firebase Anda dan aktifkan Firebase ML API.

  3. Instal dan inisialisasi Admin SDK.

    Saat Anda melakukan inisialisasi SDK, tentukan kredensial akun layanan dan bucket Storage yang ingin digunakan untuk menyimpan model Anda:

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

Mengupload dan memublikasikan model

Untuk menghosting dan memublikasikan model 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(tflite_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)

Jika model Anda menggunakan format model tersimpan TensorFlow, Anda dapat mengubahnya menjadi TensorFlow Lite dan menguploadnya ke bucket Cloud Storage dalam satu langkah:

# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_saved_model('./model_directory')

# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...

Jika memiliki model Keras, Anda juga dapat mengonversinya menjadi TensorFlow Lite dan menguploadnya dalam satu langkah. Anda dapat menggunakan model Keras yang disimpan ke file HDF5:

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

Atau, Anda dapat mengonversi dan mengupload model Keras langsung dari skrip pelatihan:

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

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

Mencantumkan model project Anda

Anda dapat mencantumkan model project Anda, yang secara opsional memfilter hasilnya:

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

Anda dapat memfilternya berdasarkan kolom berikut:

Kolom Contoh
display_name display_name = example_model
display_name != example_model

Semua nama tampilan dengan awalan experimental_:

display_name : experimental_*

Perlu diperhatikan bahwa hanya pencocokan awalan yang didukung.

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

Gabungkan filter dengan operator AND, OR, dan NOT serta tanda kurung ((, )).

Memperbarui model

Setelah menambahkan model ke project, Anda dapat memperbarui nama tampilan, tag, dan file model tflite-nya:

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.
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example_v2.tflite')
model.model_format = ml.TFLiteFormat(tflite_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);

Membatalkan publikasi atau menghapus model

Untuk membatalkan publikasi atau menghapus model, teruskan ID model ke metode batalkan publikasi atau hapus. Saat Anda membatalkan publikasi model, model tersebut tetap ada di project Anda, tetapi tidak tersedia untuk didownload oleh aplikasi Anda. Saat Anda menghapus model, model tersebut akan dihapus sepenuhnya dari project Anda. (Membatalkan publikasi model tidak diharapkan dalam alur kerja standar, tetapi Anda dapat menggunakannya untuk segera membatalkan publikasi model baru yang dipublikasi tanpa sengaja dan belum digunakan di mana pun, atau dalam kasus terburuknya bagi pengguna jika mendownload model yang "buruk" daripada mendapatkan error model tidak ditemukan.)

Jika tidak memiliki referensi ke objek Model, Anda mungkin perlu mendapatkan ID model dengan mencantumkan model project Anda dengan filter. Misalnya, untuk menghapus semua model yang diberi tag "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);