Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ปรับใช้และจัดการโมเดลที่กำหนดเอง

คุณทำให้ใช้งานได้และจัดการโมเดลที่กำหนดเองและโมเดลที่ได้รับการฝึกด้วย AutoML โดยใช้คอนโซล Firebase หรือ Firebase Admin Python และ Node.js SDK หากคุณต้องการปรับใช้โมเดลและอัปเดตเป็นครั้งคราว โดยทั่วไปแล้วจะเป็นวิธีที่ง่ายที่สุดในการใช้คอนโซล Firebase Admin SDK มีประโยชน์เมื่อผสานรวมกับไปป์ไลน์ของบิลด์ ทำงานกับโน้ตบุ๊ก Colab หรือ Jupyter และเวิร์กโฟลว์อื่นๆ

ปรับใช้และจัดการโมเดลในคอนโซล Firebase

รุ่น TensorFlow Lite

ในการปรับใช้โมเดล TensorFlow Lite โดยใช้คอนโซล Firebase:

  1. เปิด หน้ารุ่น ML Firebase กำหนดเอง ในคอนโซล Firebase
  2. คลิกที่รูปแบบที่กำหนดเองเพิ่ม (หรือเพิ่มรูปแบบอื่น)
  3. ระบุชื่อที่จะใช้ในการระบุรุ่นของผลิตภัณฑ์ในโครงการ Firebase ของคุณแล้วอัปโหลดไฟล์รูปแบบ TensorFlow Lite (มักจะลงท้ายด้วย .tflite หรือ .lite )

หลังจากที่คุณปรับใช้โมเดลของคุณ คุณจะพบได้ในหน้ากำหนดเอง จากที่นั่น คุณสามารถทำงานต่างๆ เช่น อัปเดตโมเดลด้วยไฟล์ใหม่ ดาวน์โหลดโมเดล และลบโมเดลออกจากโปรเจ็กต์ของคุณ

ปรับใช้และจัดการโมเดลด้วย Firebase Admin SDK

ส่วนนี้แสดงวิธีที่คุณสามารถทำงานการปรับใช้โมเดลทั่วไปและการจัดการให้เสร็จสมบูรณ์ด้วย Admin SDK ดูอ้างอิง SDK สำหรับ งูหลาม หรือ Node.js สำหรับความช่วยเหลือเพิ่มเติม

สำหรับตัวอย่างของ SDK ในการใช้งานให้ดู ตัวอย่าง QuickStart งูหลาม และ ตัวอย่าง QuickStart Node.js

ก่อนจะเริ่ม

  1. หากคุณไม่ได้มีโครงการ Firebase สร้างโครงการใหม่ใน คอนโซล Firebase จากนั้น เปิดโปรเจ็กต์ของคุณแล้วทำดังต่อไปนี้:

    1. ใน การตั้งค่า หน้าสร้างบัญชีผู้ใช้บริการและดาวน์โหลดไฟล์กุญแจบัญชีบริการ รักษาไฟล์นี้ให้ปลอดภัย เนื่องจากให้สิทธิ์ผู้ดูแลระบบในการเข้าถึงโปรเจ็กต์ของคุณ

    2. ในหน้า Storage ให้เปิดใช้งาน Cloud Storage จดชื่อถังของคุณ

      คุณต้องมีที่เก็บข้อมูล Cloud Storage เพื่อจัดเก็บไฟล์โมเดลชั่วคราวในขณะที่เพิ่มไปยังโปรเจ็กต์ Firebase หากคุณใช้แผน Blaze คุณสามารถสร้างและใช้บัคเก็ตอื่นที่ไม่ใช่ค่าเริ่มต้นเพื่อจุดประสงค์นี้ได้

    3. บนหน้า Firebase ML คลิกเริ่มต้นถ้าคุณยังไม่ได้เปิดใช้งาน Firebase ML

  2. ใน คอนโซล Google APIs , เปิดโครงการ Firebase ของคุณและเปิดใช้งาน Firebase ML API

  3. ติดตั้งและเริ่มต้น 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

หากคุณได้รับการฝึกฝนรูปแบบขอบกับ AutoML เมฆ API หรือกับ Google Cloud Console UI คุณสามารถปรับใช้แบบจำลองเพื่อ Firebase ใช้ SDK ผู้ดูแลระบบ

คุณจะต้องระบุตัวระบุทรัพยากรของโมเดล ซึ่งเป็นสตริงที่ดูเหมือนตัวอย่างต่อไปนี้:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER หมายเลขโปรเจ็กต์ของที่เก็บข้อมูล Cloud Storage ที่มีโมเดล นี่อาจเป็นโปรเจ็กต์ Firebase ของคุณหรือโปรเจ็กต์ Google Cloud อื่น คุณค้นหาค่านี้ได้ในหน้าการตั้งค่าของคอนโซล Firebase หรือแดชบอร์ด Google Cloud Console
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

ทุกชื่อที่แสดงกับ 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 ไฟล์รูปแบบ:

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 กว่าที่จะได้รับข้อผิดพลาดไม่พบโมเดล)

หากคุณยังไม่มีการอ้างอิงถึงออบเจ็กต์ 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);