Özel modelleri dağıtma ve yönetme

Özel modelleri ve AutoML ile eğitilmiş modelleri dağıtıp yönetmek için Firebase konsolunu veya Firebase Admin Python ve Node.js SDK'larını kullanabilirsiniz. Yalnızca bir modeli dağıtmak ve ara sıra güncellemek istiyorsanız genellikle Firebase konsolunu kullanmak en kolay yöntemdir. Admin SDK, derleme işlem hatlarıyla entegrasyon yaparken, Colab veya Jupyter not defterleriyle çalışırken ve diğer iş akışlarında faydalı olabilir.

Firebase konsolunda modelleri dağıtma ve yönetme

TensorFlow Lite modelleri

Firebase konsolunu kullanarak TensorFlow Lite modeli dağıtmak için:

  1. Firebase konsolunda Firebase ML Özel model sayfasını açın.
  2. Özel model ekle'yi (veya Başka bir model ekle'yi) tıklayın.
  3. Firebase projenizde modelinizi tanımlamak için kullanılacak bir ad belirtin, ardından TensorFlow Lite model dosyasını (genellikle .tflite veya .lite ile biter) yükleyin.

Modelinizi dağıttıktan sonra Özel sayfasında bulabilirsiniz. Buradan modeli yeni bir dosyayla güncelleme, modeli indirme ve modeli projenizden silme gibi görevleri tamamlayabilirsiniz.

Firebase Admin SDK ile modelleri dağıtma ve yönetme

Bu bölümde, Admin SDK ile yaygın model dağıtımı ve yönetimi görevlerini nasıl tamamlayabileceğiniz gösterilmektedir. Daha fazla yardım için Python veya Node.js için SDK referansına bakın.

SDK'nın kullanımına ilişkin örnekler için Python hızlı başlangıç örneği ve Node.js hızlı başlangıç örneği başlıklı makalelere bakın.

Başlamadan önce

  1. Henüz bir Firebase projeniz yoksa Firebase konsolunda yeni bir proje oluşturun. Ardından projenizi açıp şunları yapın:

    1. Ayarlar sayfasında bir hizmet hesabı oluşturun ve hizmet hesabı anahtarı dosyasını indirin. Bu dosya, projenize yönetici erişimi sağladığından güvenli bir şekilde saklayın.

    2. Depolama alanı sayfasında Cloud Storage seçeneğini etkinleştirin. Paketinizin adını not edin.

      Model dosyalarını Firebase projenize eklerken geçici olarak depolamak için Cloud Storage paketine ihtiyacınız vardır. Blaze planındaysanız bu amaç için varsayılan dışında bir paket oluşturup kullanabilirsiniz.

    3. Firebase ML sayfasında, Firebase ML'yı henüz etkinleştirmediyseniz Başlayın'ı tıklayın.

  2. Google API'leri konsolunda Firebase projenizi açın ve Firebase ML API'yi etkinleştirin.

  3. Admin SDK'yı yükleyin ve başlatın.

    SDK'yı başlatırken hizmet hesabı kimlik bilgilerinizi ve modellerinizi depolamak için kullanmak istediğiniz Cloud Storage paketini belirtin:

    PythonNode.js
    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',
      })
    
    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();
    

Modelleri dağıtma

TensorFlow Lite dosyaları

Bir model dosyasından TensorFlow Lite modeli dağıtmak için modeli projenize yükleyip yayınlayın:

PythonNode.js
# 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)
// 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 ve Keras modelleri

Python SDK'sı ile bir modeli TensorFlow kaydedilmiş model biçiminden TensorFlow Lite'a dönüştürebilir ve tek bir adımda Cloud Storage paketinize yükleyebilirsiniz. Ardından, TensorFlow Lite dosyasını dağıttığınız şekilde dağıtın.

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 modeliniz varsa bunu TensorFlow Lite'a dönüştürüp tek adımda yükleyebilirsiniz. HDF5 dosyasına kaydedilmiş bir Keras modeli kullanabilirsiniz:

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

Alternatif olarak, doğrudan eğitim komut dosyanızdan bir Keras modelini dönüştürüp yükleyebilirsiniz:

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 modelleri

AutoML Cloud API veya Google Cloud konsol kullanıcı arayüzü ile bir Edge modeli eğittiyseniz modeli Admin SDK'yı kullanarak Firebase'e dağıtabilirsiniz.

Modelin kaynak tanımlayıcısını belirtmeniz gerekir. Bu, aşağıdaki örneğe benzeyen bir dizedir:

projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
PROJECT_NUMBER Modeli içeren Cloud Storage paketinin proje numarası. Bu, Firebase projeniz veya başka bir Google Cloud proje olabilir. Bu değeri Firebase konsolunun veya Google Cloud konsol kontrol panelinin Ayarlar sayfasında bulabilirsiniz.
STORAGE_LOCATION Modeli içeren Cloud Storage paketinin kaynak konumu. Bu değer her zaman us-central1 olur.
MODEL_ID Modelin kimliği (AutoML Cloud API'den alınır).
PythonNode.js
# 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)
// 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);

Projenizin modellerini listeleme

Projenizin modellerini listeleyebilir ve isteğe bağlı olarak sonuçları filtreleyebilirsiniz:

PythonNode.js
# 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))
// 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);

Aşağıdaki alanlara göre filtre uygulayabilirsiniz:

Alan Örnekler
display_name display_name = example_model
display_name != example_model

experimental_ ön ekine sahip tüm görünen adlar:

display_name : experimental_*

Yalnızca ön ek eşleşmesinin desteklendiğini unutmayın.

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

Filtreleri AND, OR ve NOT operatörleri ve parantezlerle ((, )) birleştirin.

Modelleri güncelleme

Projenize bir model ekledikten sonra görünen adını, etiketlerini ve tflite model dosyasını güncelleyebilirsiniz:

PythonNode.js
# 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)
// 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);

Modelleri yayından kaldırma veya silme

Bir modeli yayından kaldırmak veya silmek için model kimliğini unpublish veya delete yöntemlerine iletin. Yayından kaldırdığınız modeller projenizde kalır ancak uygulamalarınız tarafından indirilemez. Sildiğiniz modeller projenizden tamamen kaldırılır. (Bir modelin yayından kaldırılması standart iş akışında beklenmez ancak yanlışlıkla yayınladığınız ve henüz hiçbir yerde kullanılmayan yeni bir modeli hemen yayından kaldırmak için veya kullanıcıların "kötü" bir modeli indirmesinin model bulunamadı hataları almaktan daha kötü olduğu durumlarda bu özelliği kullanabilirsiniz.)

Model nesnesine hâlâ bir referansınız yoksa büyük olasılıkla projenizin modellerini filtreyle listeleyerek model kimliğini almanız gerekir. Örneğin, "face_detector" etiketli tüm modelleri silmek için:

PythonNode.js
# 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)
// 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);