Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

사용자 지정 모델 배포 및 관리

Firebase 콘솔 또는 Firebase Admin Python 및 Node.js SDK를 사용하여 커스텀 모델과 AutoML 학습 모델을 배포하고 관리할 수 있습니다. 모델을 배포하고 가끔 업데이트하려는 경우 일반적으로 Firebase 콘솔을 사용하는 것이 가장 간단합니다. Admin SDK는 빌드 파이프라인과 통합할 때, Colab 또는 Jupyter 노트북으로 작업하는 경우 및 기타 워크플로에 유용할 수 있습니다.

Firebase 콘솔에서 모델 배포 및 관리

TensorFlow Lite 모델

Firebase 콘솔을 사용하여 TensorFlow Lite 모델을 배포하려면 다음 안내를 따르세요.

  1. 오픈 중포 기지 ML 사용자 정의 모델 페이지를 중포 기지 콘솔에서.
  2. 클릭 사용자 정의 모델을 추가 (또는 다른 모델을 추가).
  3. (일반적으로 끝나는 TensorFlow 라이트 모델 파일을 한 후, 당신의 중포 기지 프로젝트에서 모델을 식별 업로드하는 데 사용되는 이름 지정 .tflite 또는 .lite ).

모델을 배포한 후 사용자 지정 페이지에서 찾을 수 있습니다. 여기에서 새 파일로 모델 업데이트, 모델 다운로드, 프로젝트에서 모델 삭제와 같은 작업을 완료할 수 있습니다.

Firebase Admin SDK로 모델 배포 및 관리

이 섹션에서는 Admin SDK를 사용하여 일반 모델 배포 및 관리 작업을 완료하는 방법을 보여줍니다. 용 SDK 참조 참조 파이썬 또는 Node.js를 추가로 도움을.

사용중인 SDK의 예를 들어, 참조 파이썬 퀵 스타트 샘플Node.js를 빠른 시작 샘플을 .

시작하기 전에

  1. 이미 중포 기지 프로젝트가없는 경우에서 새 프로젝트 생성 중포 기지 콘솔 . 그런 다음 프로젝트를 열고 다음을 수행합니다.

    1. 설정 페이지에서 서비스 계정을 생성하고 서비스 계정 키 파일을 다운로드합니다. 이 파일은 프로젝트에 대한 관리자 액세스 권한을 부여하므로 안전하게 보관하십시오.

    2. 스토리지 페이지에서 Cloud Storage를 활성화합니다. 버킷 이름을 기록해 둡니다.

      Firebase 프로젝트에 모델 파일을 추가하는 동안 임시로 저장하려면 Cloud Storage 버킷이 필요합니다. Blaze 요금제를 사용 중인 경우 이 용도로 기본값이 아닌 버킷을 생성하여 사용할 수 있습니다.

    3. 아직 중포 기지 ML을 설정하지 않은 경우 중포 기지 ML 페이지에서 클릭 시작.

  2. 에서 구글 API를 콘솔 , 당신의 중포 기지 프로젝트를 열고 중포 기지 ML API를 할 수 있습니다.

  3. 설치 및 관리 SDK를 초기화 .

    SDK를 초기화할 때 모델을 저장하는 데 사용할 서비스 계정 사용자 인증 정보와 Cloud Storage 버킷을 지정합니다.

    파이썬

    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',
      })
    

    노드.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 모델을 배포하려면 프로젝트에 업로드한 다음 게시합니다.

파이썬

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

노드.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 파일을 배포하는 것과 동일한 방식으로 배포합니다.

파이썬

# 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 모델을 사용할 수 있습니다.

파이썬

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 모델을 변환하고 업로드할 수 있습니다.

파이썬

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 클라우드 콘솔 UI와 함께, 당신은 관리자 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에서 가져온 모델의 ID입니다.

파이썬

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

노드.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);

프로젝트 모델 나열

선택적으로 결과를 필터링하여 프로젝트의 모델을 나열할 수 있습니다.

파이썬

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

노드.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 , ORNOT 연산자와 괄호 ( ( , ) ).

모델 업데이트

프로젝트에 모델을 추가 한 후에는 표시 이름, 태그 및 업데이트 할 수 있습니다 tflite 모델 파일을 :

파이썬

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

노드.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-not-found 오류를 얻는 것보다 모델을 사용하십시오.)

아직 Model 개체에 대한 참조가 없는 경우 필터를 사용하여 프로젝트의 모델을 나열하여 모델 ID를 가져와야 할 것입니다. 예를 들어 "face_detector" 태그가 지정된 모든 모델을 삭제하려면 다음을 수행합니다.

파이썬

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

노드.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);