Birleşik öğrenim işi oluşturma

Bu sayfada, On-Device Personalization tarafından sağlanan birleşik öğrenim API'leriyle nasıl çalışılacağı ve birleşik ortalama öğrenme süreci ve sabit Gauss gürültüsü ile bir modelin nasıl eğitileceği açıklanmaktadır.

Başlamadan önce

Başlamadan önce test cihazınızda aşağıdaki adımları tamamlayın:

  1. OnDevicePersonalization modülünün yüklendiğinden emin olun. Modül, Nisan 2024'te otomatik güncelleme olarak kullanıma sunuldu.

    # List the modules installed on the device
    adb shell pm list packages --apex-only --show-versioncode
    

    Aşağıdaki modülün 341717000 veya daha yüksek bir sürüm koduyla listelendiğinden emin olun:

    package:com.google.android.ondevicepersonalization versionCode:341717000

    Bu modül listede yoksa cihazınızın güncel olduğundan emin olmak için Ayarlar > Güvenlik ve gizlilik > Güncellemeler > Google Play sistem güncellemesi'ne gidin. Gerekirse Güncelle'yi seçin.

  2. Federated Learning ile ilgili tüm yeni özellikleri etkinleştirin.

    # Enable On-Device Personalization apk.
    adb shell device_config put on_device_personalization global_kill_switch false
    # Enable On-Device Personalization APIs.
    adb shell device_config put on_device_personalization enable_ondevicepersonalization_apis true
    # Enable On-Device Personalization overriding.
    adb shell device_config put on_device_personalization enable_personalization_status_override true
    adb shell device_config put on_device_personalization personalization_status_override_value true
    # Enable Federated Compute apk.
    adb shell device_config put on_device_personalization federated_compute_kill_switch false
    

Birleşik öğrenim görevi oluşturma

Sekiz adımın vurgulandığı birleştirilmiş öğrenme istemci-sunucu topolojisi.
Sekiz adımın vurgulandığı birleşik öğrenim istemci-sunucu topolojisinin diyagramı.

Şemadaki sayılar, aşağıdaki sekiz adımda daha ayrıntılı olarak açıklanmıştır.

Birleşik Hesaplama Sunucusu yapılandırma

Birleşik Öğrenim, Birleşik Hesaplama Sunucusu'nda (indirgeyici) ve bir dizi istemcide (eşleyiciler) çalışan bir map-reduce işlemidir. Birleşik bilgi işlem sunucusu, her bir birleşik öğrenme görevinin çalışan meta verilerini ve model bilgilerini korur. Özetle:

  • Birleşik öğrenim geliştiricisi yeni bir görev oluşturur ve hem görevi çalıştırma meta verilerini hem de model bilgilerini sunucuya yükler.
  • Bir Federated Compute istemcisi sunucuya yeni bir görev atama isteği başlattığında sunucu, görevin uygunluğunu kontrol eder ve uygun görev bilgilerini döndürür.
  • Bir Federated Compute istemcisi yerel hesaplamaları tamamladığında bu hesaplama sonuçlarını sunucuya gönderir. Ardından sunucu, bu hesaplama sonuçları üzerinde toplama ve gürültü ekleme işlemlerini gerçekleştirir ve sonucu nihai modele uygular.

Bu kavramlar hakkında daha fazla bilgi edinmek için şu makaleleri inceleyebilirsiniz:

ODP, birleşik öğrenimin geliştirilmiş bir sürümünü kullanır. Bu sürümde, modele uygulanmadan önce toplamalara kalibre edilmiş (merkezi) gürültü uygulanır. Gürültünün ölçeği, toplu verilerin diferansiyel gizliliğini korumasını sağlar.

1. Adım: Federated Compute Server oluşturma

Kendi Federated Compute sunucunuzu oluşturmak için Federated Compute projesindeki talimatları uygulayın.

2. adım: Kaydedilmiş bir FunctionalModel hazırlama

Kaydedilmiş bir "FunctionalModel" dosyası hazırlayın. 'functional_model_from_keras' işlevini kullanarak "Model" öğesini "FunctionalModel" öğesine dönüştürebilir ve "save_functional_model" işlevini kullanarak bu "FunctionalModel" öğesini "SavedModel" olarak serileştirebilirsiniz.

functional_model = tff.learning.models.functional_model_from_keras(keras_model=model)
tff.learning.models.save_functional_model(functional_model, saved_model_path)

3. Adım: Federated Compute Server yapılandırması oluşturma

Politikaları, birleşik öğrenim kurulumunu ve diferansiyel gizlilik kurulumunu içeren bir fcp_server_config.json hazırlayın. Örnek:

  # Identifies the set of client devices that will participate.
  population_name: "my_new_population"
  # Options you can choose:
  # * TRAINING_ONLY: Only one training task will be generated under this
  #                  population.
  # * TRAINING_AND_EVAL: One training task and one evaluation task will be
  #                      generated under this population.
  # * EVAL_ONLY: Only one evaluation task will be generated under this
  #              population.
  mode: TRAINING_AND_EVAL
  policies {
    # Policy for sampling on-device examples. It is checked every time a
    # device attempts to start a new training.
    min_separation_policy {
      # The minimum number of rounds before the same client participated.
      minimum_separation: 3
    }
    # Policy for releasing training results to developers. It is checked
    # when uploading a new task to the Federated Compute Server.
    model_release_policy {
      # Server stops training when number of training rounds reaches this
      # number.
      num_max_training_rounds: 1000
    }
  }
  # Federated learning setups. They are applied inside Task Builder.
  federated_learning {
    learning_process {
      # Use FED_AVG to build federated learning process. Options you can
      # choose:
      # * FED_AVG: Federated Averaging algorithm
      #            (https://arxiv.org/abs/2003.00295)
      # * FED_SDG: Federated SGD algorithm
      #            (https://arxiv.org/abs/1602.05629)
      type: FED_AVG
      # Optimizer used at client side training. Options you can choose:
      # * ADAM
      # * SGD
      client_optimizer: SGD
      # Learning rate used at client side training.
      client_learning_rate: 0.01
      # Optimizer used at server side training. Options you can choose:
      # * ADAM
      # * SGD
      server_optimizer: ADAM
      # Learning rate used at server side training.
      sever_learning_rate: 1
      runtime_config {
        # Number of participating devices for each round of training.
        report_goal: 2000
      }
      # List of metrics to be evaluated by the model during training and
      # evaluation. Federated Compute Server provides a list of allowed
      # metrics.
      metrics {
        name: "auc-roc"
      }
      metrics {
        name: "binary_accuracy"
      }
    }
    # Whether or not to generate a corresponding evaluation task under the same
    # population. If this field isn't set, only one training task is
    # generated under this population.
    evaluation {
      # The task id under the same population of the source training task that
      # this evaluation task evaluates.
      source_training_task_id: 1
      # Decides how checkpoints from the training task are chosen for
      # evaluation.
      # * every_k_round: the evaluation task randomly picks one checkpoint
      #                  from the past k rounds of training task checkpoints.
      # * every_k_hour: the evaluation task randomly picks one checkpoint
      #                 from the past k hours of training task checkpoints.
      checkpoint_selector: "every_1_round"
      # The traffic of this evaluation task in this population.
      evaluation_traffic: 0.1
      # Number of participating devices for each round of evaluation.
      report_goal: 200
    }
  }
  # Differential Privacy setups. They are applied inside the Task Builder.
  differential_privacy {
    # The DP aggregation algorithm you want to use. Options you can choose:
    # * FIXED_GAUSSIAN: Federated Learning DP-SGD with fixed clipping norm
    #                   described in "Learning Differentially Private Recurrent
    #                   Language Models" (https://arxiv.org/abs/1710.06963).
    # * ADAPTIVE_GAUSSIAN: Federated Learning DP-SGD with quantile-based clip
    #                      norm estimation described in "Differentially Private
    #                      Learning with Adaptive Clipping"
    #                      (https://arxiv.org/abs/1905.03871).
    # * TREE: DP-FTRL algorithm described in "Practical and Private (Deep)
    #         Learning without Sampling or Shuffling"
    #         (https://arxiv.org/abs/2103.00039).
    # * ADADPTIVE_TREE: DP-FTRL with adaptive clipping norm descirbed in
    #                  "Differentially Private Learning with Adaptive Clipping"
    #                  (https://arxiv.org/abs/1905.03871).
    type: FIXED_GAUSSIAN
    # Noise multiplier for the Gaussian noise.
    noise_multiplier: 0.1
    #   The value of the clipping norm.
    clip_norm: 0.1
  }

4. Adım. Zip yapılandırmasını Federated Compute sunucusuna gönderin.

Zip dosyasını ve fcp_server_config.json öğesini Federated Compute sunucusuna gönderin.

task_builder_client --task_builder_server='http://{federated_compute_server_endpoint}' --saved_model='saved_model' --task_config='fcp_server_config.json'

Federated Compute Server uç noktası, 1. adımda ayarladığınız sunucudur.

LiteRT'nin yerleşik operatör kitaplığı yalnızca sınırlı sayıda TensorFlow operatörünü (TensorFlow operatörlerini seçin) destekler. Desteklenen operatör grubu, OnDevicePersonalization modülünün farklı sürümlerinde değişiklik gösterebilir. Uyumluluğu sağlamak için görev oluşturma sırasında görev oluşturucuda operatör doğrulama işlemi yapılır.

  • Desteklenen en eski OnDevicePersonalization modülü sürümü, görev meta verilerine dahil edilecektir. Bu bilgilere, görev oluşturucunun bilgi mesajından ulaşabilirsiniz.

    I1023 22:16:53.058027 139653371516736 task_builder_client.py:109] Success! Tasks are built, and artifacts are uploaded to the cloud.
    I1023 22:16:53.058399 139653371516736 task_builder_client.py:112] applied_algorithms {
      learning_algo: FED_AVG
      client_optimizer: SGD
      server_optimizer: SGD
      dp_aggregator: FIXED_GAUSSIAN
    }
    metric_results {
      accepted_metrics: "binary_accuracy, binary_crossentropy, recall, precision, auc-roc, auc-pr"
    }
    dp_hyperparameters {
      dp_delta: 0.000001
      dp_epsilon: 6.4
      noise_multiplier: 1.0
      dp_clip_norm: 1.0
      num_training_rounds: 10000
    }
    
    I1023 22:16:53.058594 139653371516736 task_builder_client.py:113] training_task {
      min_client_version: "341912000"
    }
    eval_task {
      min_client_version: "341812000"
    }
    

    Federated Compute sunucusu bu görevi, 341812000'den yüksek bir sürüme sahip OnDevicePersonalization modülüyle donatılmış tüm cihazlara atar.

  • Modeliniz, OnDevicePersonalization modüllerinin hiçbirinde desteklenmeyen işlemler içeriyorsa görev oluşturma sırasında bir hata mesajı oluşturulur.

    common.TaskBuilderException: Cannot build the ClientOnlyPlan: Please contact Google to register these ops: {'L2Loss': 'L2LossOp<CPUDevice, float>'}
    . Stop building remaining artifacts.
    
  • Desteklenen esnek işlemlerin ayrıntılı listesini GitHub'da bulabilirsiniz.

Android Federated Compute APK'sı oluşturma

Android Federated Compute APK'sı oluşturmak için AndroidManifest.xml uygulamanızda Federated Compute Server URL uç noktasını belirtmeniz gerekir. Federated Compute Client'ınız bu uç noktaya bağlanır.

5. Adım: Federated Compute Server URL uç noktasını belirtin.

AndroidManifest.xml dosyanızda, Federated Compute Client'ınızın bağlandığı Federated Compute Server URL uç noktasını (1. adımda ayarladığınız) belirtin.

<!-- Contents of AndroidManifest.xml -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.odpsample" >
    <application android:label="OdpSample">
        <!-- XML resource that contains other ODP settings. -->
        <property android:name="android.ondevicepersonalization.ON_DEVICE_PERSONALIZATION_CONFIG"
                  android:resource="@xml/OdpSettings"></property>
        <!-- The service that ODP will bind to. -->
        <service android:name="com.example.odpsample.SampleService"
                android:exported="true" android:isolatedProcess="true" />
    </application>
</manifest>

<property> etiketinde belirtilen XML kaynak dosyasının, hizmet sınıfını <service> etiketinde de bildirmesi ve birleşik bilgi işlem istemcisinin bağlanacağı birleşik bilgi işlem sunucusu URL uç noktasını belirtmesi gerekir:

<!-- Contents of res/xml/OdpSettings.xml -->
<on-device-personalization>
   <!-- Name of the service subclass -->
   <service name="com.example.odpsample.SampleService">
     <!-- If you want to use federated compute feature to train a model,
          specify this tag. -->
     <federated-compute-settings url="https://fcpserver.com/" />
   </service>
</on-device-personalization>

6. Adım: IsolatedWorker#onTrainingExample API'sini uygulama

Eğitim verileri oluşturmak için cihaz üzerinde kişiselleştirme herkese açık API'sini IsolatedWorker#onTrainingExample uygulayın.

IsolatedProcess içinde çalışan kodun ağa, yerel disklere veya cihazda çalışan diğer hizmetlere doğrudan erişimi yoktur. Ancak aşağıdaki API'ler kullanılabilir:

  • "getRemoteData": Geçerliyse geliştirici tarafından işletilen uzak arka uçlardan indirilen, değiştirilemez anahtar/değer çifti verileri.
  • "getLocalData": Geçerliyse geliştiriciler tarafından yerel olarak kalıcı hale getirilen, değiştirilebilir anahtar/değer verileri.
  • "UserData": Platform tarafından sağlanan kullanıcı verileri.
  • "getLogReader": REQUESTS ve EVENTS tabloları için bir DAO döndürür.

Örnek:

@Override public void onTrainingExample(
            @NonNull TrainingExampleInput input,
            @NonNull Consumer<TrainingExampleOutput> consumer) {
    // Check if the incoming training task is the task we want.
    if (input.getPopulationName() == "my_new_population") {
        TrainingExampleOutput result = new TrainingExampleOutput.Builder():
        RequestLogRecord record = this.getLogReader().getRequestLogRecord(1);
        int count = 1;
        // Iterate logging event table.
        for (ContentValues contentValues: record.rows()) {
            Features features = Features.newBuilder()
                // Retrieve carrier from user info.
                .putFeature("carrier", buildFeature(mUserData.getCarrier()))
                // Retrieve features from logging info.
                .putFeature("int_feature_1",
                    buildFeature(contentValues.get("int_feature_1")
            result.addTrainingExample(
                    Example.newBuilder()
                        .setFeatures(features).build().toByteArray())
                .addResumptionToken(
                    String.format("token%d", count).getBytes()))
                .build();
            count++;
        }
        consumer.accept(result.build());
    }
}

7. Adım: Yinelenen bir eğitim görevi planlayın.

Cihaz Üzerinde Kişiselleştirme, geliştiricilerin birleştirilmiş bilgi işlem işlerini planlaması veya iptal etmesi için FederatedComputeScheduler sağlar. IsolatedWorker üzerinden, planlı olarak veya asenkron indirme işlemi tamamlandığında bu işlevi çağırmak için farklı seçenekler vardır. Her ikisiyle ilgili örnekleri aşağıda bulabilirsiniz.

  • Programa dayalı seçenek. IsolatedWorker#onExecute Bölgesinde FederatedComputeScheduler#schedule Aranjmanları İçin Arayın.

    @Override public void onExecute(
                @NonNull ExecuteInput input,
                @NonNull Consumer<ExecuteOutput> consumer
        ) {
        if (input != null && input.getAppParams() != null
            && input.getAppParams().getString("schedule_training") != null) {
            if (input.getAppParams().getString("schedule_training").isEmpty()) {
                consumer.accept(null);
                return;
            }
            TrainingInterval interval = new TrainingInterval.Builder()
                .setMinimumInterval(Duration.ofSeconds(10))
                .setSchedulingMode(2)
                .build();
            FederatedComputeScheduler.Params params = new FederatedComputeScheduler
                .Params(interval);
            FederatedComputeInput fcInput = new FederatedComputeInput.Builder()
                .setPopulationName(
                    input.getAppParams().getString("schedule_training")).build();
            mFCScheduler.schedule(params, fcInput);
    
            ExecuteOutput result = new ExecuteOutput.Builder().build();
            consumer.accept(result);
        }
    }
    
  • İndirme Tamamlandı Seçeneği Eğitim görevi planlama işlemi herhangi bir eşzamansız veriye veya sürece bağlıysa IsolatedWorker#onDownloadCompleted'daki FederatedComputeScheduler#schedule ile iletişime geçin.

Doğrulama

Aşağıdaki adımlarda, birleşik öğrenme görevinin düzgün şekilde çalışıp çalışmadığını nasıl doğrulayacağınız açıklanmaktadır.

8. adım. Birleştirilmiş öğrenme görevinin düzgün şekilde çalışıp çalışmadığını doğrulayın.

Sunucu tarafı toplama işleminin her turunda yeni bir model kontrol noktası ve yeni bir metrik dosyası oluşturulur.

Metrikler, anahtar/değer çiftlerinden oluşan JSON biçimli bir dosyada yer alır. Dosya, 3. adımda tanımladığınız Metrics listesiyle oluşturulur. Temsili metrikler JSON dosyası örneği aşağıda verilmiştir:

{"server/client_work/train/binary_accuracy":0.5384615659713745, "server/client_work/train/binary_crossentropy":0.694046676158905, "server/client_work/train/recall":0.20000000298023224, "server/client_work/train/precision":0.3333333432674408, "server/client_work/train/auc-roc":0.3500000238418579, "server/client_work/train/auc-pr":0.44386863708496094, "server/finalizer/update_non_finite":0.0}

Model metriklerini almak ve eğitim performansını izlemek için aşağıdaki komut dosyasına benzer bir komut dosyası kullanabilirsiniz:

import collections
import json
import matplotlib.pyplot as plt
from google.cloud import storage

# The population_name you set in fcp_server_config.json in Step 3.
POPULATION_NAME = 'my_new_population'
# The Google Cloud storage you set in Step 1.
GCS_BUCKET_NAME = 'fcp-gcs'
NUM_TRAINING_ROUND = 1000

storage_client = storage.Client()
bucket = storage_client.bucket(GCS_BUCKET_NAME)

metrics = collections.defaultdict(list)
for i in range(NUM_TRAINING_ROUND):
    blob = bucket.blob('{}/{}/1/{}/s/0/metrics'.format(GCS_BUCKET_NAME, POPULATION_NAME, i+1))
    with blob.open("r") as f:
                     metric = json.loads(f.read())
                    for metric_name in metric.keys():
                             metrics[metric_name].append(metric[metric_name])

for metric_name in metrics:
         print(metric_name)
         plt.plot(metrics[metric_name])
         plt.show()
auc-roc metriği işaretlendiğinde nasıl göründüğünü gösteren örnek grafik.

Yukarıdaki örnek grafikte şunlara dikkat edin:

  • X ekseni, yuvarlak eğitim sayısıdır.
  • Y ekseni, her turun auc-roc değeridir.

Cihaz Üzerinde Kişiselleştirme ile Görüntü Sınıflandırma Modeli Eğitme

Bu eğitimde, ODP'de birleşik öğrenim görevinin nasıl çalıştırılacağını göstermek için EMNIST veri kümesi kullanılmaktadır.

1. Adım: tff.learning.models.FunctionalModel oluşturma

def get_image_classification_input_spec():
  return (
      tf.TensorSpec([None, 28, 28, 1], tf.float32),
      tf.TensorSpec([None, 1], tf.int64),
  )

def create_and_save_image_classification_functional_model(
    model_path: str,
) -> None:
  keras_model =  emnist_models.create_original_fedavg_cnn_model(
      only_digits=True
  )
  functional_model = tff.learning.models.functional_model_from_keras(
      keras_model=keras_model,
      input_spec=get_image_classification_input_spec(),
      loss_fn=tf.keras.losses.SparseCategoricalCrossentropy(),
  )
  tff.learning.models.save_functional_model(functional_model, model_path)
  • Emnist keras model ayrıntılarını emnist_models içinde bulabilirsiniz.
  • TfLite, henüz tf.sparse.SparseTensor veya tf.RaggedTensor için iyi bir destek sunmuyor. Modeli oluştururken mümkün olduğunca tf.Tensor kullanmaya çalışın.
  • ODP Görev Oluşturucu, öğrenme süreci oluşturulurken tüm metriklerin üzerine yazar. Bu nedenle herhangi bir metrik belirtmeniz gerekmez. Bu konu, 2. adımda daha ayrıntılı olarak ele alınacaktır. Görev oluşturucu yapılandırmasını oluşturun.
  • İki tür model girişi desteklenir:

    • Tür 1. Bir demet(features_tensor, label_tensor).

      • Model oluşturulurken input_spec şu şekilde görünür:
      def get_input_spec():
        return (
            tf.TensorSpec([None, 28, 28, 1], tf.float32),
            tf.TensorSpec([None, 1], tf.int64),
        )
      
      • Cihazda eğitim verileri oluşturmak için yukarıdakileri ODP genel API'sinin IsolatedWorker#onTrainingExamples işlevinin aşağıdaki uygulamasıyla eşleştirin:
      return tf.train.Example(
          features=tf.train.Features(
              feature={
                  'x': tf.train.Feature(
                      float_list=tf.train.FloatList(value=[1.0] * 784)
                  ),
                  'y': tf.train.Feature(
                      int64_list=tf.train.Int64List(
                          value=[1]
                      )
                  ),
              }
          )
      ).SerializeToString()
      
    • Tür 2 Tuple(Dict[feature_name, feature_tensor], label_tensor)

      • Model oluşturulurken input_spec şu şekilde görünür:
      def get_input_spec() -> (
          Tuple[collections.OrderedDict[str, tf.TensorSpec], tf.TensorSpec]
      ):
        return (
            collections.OrderedDict(
                [('feature-1', tf.TensorSpec([None, 1], tf.float32)),
                ('feature-2', tf.TensorSpec([None, 1], tf.float32))]
            ),
            tf.TensorSpec([None, 1], tf.int64),
        )
      
      • Eğitim verileri oluşturmak için yukarıdaki bilgileri ODP genel API'sinin IsolatedWorker#onTrainingExamples işlevinin aşağıdaki uygulamasıyla eşleştirin:
      return tf.train.Example(
          features=tf.train.Features(
              feature={
                  'feature-1': tf.train.Feature(
                      float_list=tf.train.FloatList(value=[1.0])
                  ),
                  'feature-2': tf.train.Feature(
                      float_list=tf.train.FloatList(value=[2.0])
                  ),
                  'my_label': tf.train.Feature(
                      int64_list=tf.train.Int64List(
                          value=[1]
                      )
                  ),
              }
          )
      ).SerializeToString()
      
      • Görev oluşturucu yapılandırmasında label_name'i kaydetmeyi unutmayın.
      mode: TRAINING_AND_EVAL  # Task execution mode
      population_name: "my_example_model"
      label_name: "my_label"
      
  • Öğrenme süreci oluşturulurken ODP, DP'yi otomatik olarak işler. Bu nedenle, işlevsel modeli oluştururken gürültü eklemenize gerek yoktur.

  • Bu kaydedilmiş işlevsel modelin çıkışı, GitHub depomuzdaki örneğe benzemelidir.

2. adım: Görev oluşturucu yapılandırmasını oluşturma

GitHub depomuzda görev oluşturucu yapılandırması örneklerini bulabilirsiniz.

  • Eğitim ve değerlendirme metrikleri

    Metrikler kullanıcı verilerini sızdırabileceğinden, Görev Oluşturucu'da öğrenme sürecinin oluşturup yayınlayabileceği metriklerin bir listesi bulunur. Tam listeyi GitHub depomuzda bulabilirsiniz.

    Yeni bir görev oluşturucu yapılandırması oluştururken kullanabileceğiniz örnek metrik listesini aşağıda bulabilirsiniz:

    federated_learning {
      learning_process {
        metrics {
          name: "binary_accuracy"
        }
        metrics {
          name: "binary_crossentropy"
        }
        metrics {
          name: "recall"
        }
        metrics {
          name: "precision"
        }
        metrics {
          name: "auc-roc"
        }
        metrics {
          name: "auc-pr"
        }
      }
    }
    

İlgilendiğiniz metrikler bu listede yer almıyorsa bize ulaşın.

  • DP yapılandırmaları

    DP ile ilgili olarak belirtilmesi gereken birkaç yapılandırma vardır:

    policies {
      min_separation_policy {
        minimum_separation: 1
      }
      model_release_policy {
        num_max_training_rounds: 1000
        dp_target_epsilon: 10
        dp_delta: 0.000001
      }
    }
    differential_privacy {
      type: FIXED_GAUSSIAN
      clip_norm: 0.1
      noise_multiplier: 0.1
    }
    

3. Adım: Kayıtlı modeli ve görev oluşturucu yapılandırmasını herhangi bir geliştiricinin bulut depolama alanına yükleyin.

Görev oluşturucu yapılandırmasını yüklerken artifact_building alanlarını güncellemeyi unutmayın.

4. Adım. (İsteğe bağlı) Yeni bir görev oluşturmadan yapay ürün oluşturmayı test etme

cd ${odp_fcp_github_repo}/python
bazel run //python/taskbuilder:task_builder_client -- --saved_model=${path_of_cloud_storage}/mnist_model/ --task_config=${path_of_cloud_storage}/mnist_cnn_task_config_build_artifact_only.pbtxt --build_artifact_only=true --task_builder_server=${task_builder_server_endpoint}

Örnek model hem esnek işlemler kontrolü hem de dp kontrolü aracılığıyla doğrulanır. Doğrulama sırasında atlamak için skip_flex_ops_check ve skip_dp_check ekleyebilirsiniz (Bu model, birkaç eksik esnek işlem nedeniyle ODP istemcisinin mevcut sürümüne dağıtılamaz).

cd ${odp_fcp_github_repo}/python
bazel run //python/taskbuilder:task_builder_client -- --saved_model=${path_of_cloud_storage}/mnist_model/ --task_config=${path_of_cloud_storage}/mnist_cnn_task_config_build_artifact_only.pbtxt --build_artifact_only=true --task_builder_server=${task_builder_server_endpoint} --skip_flex_ops_check=True --skip_dp_check=True
  • flex_ops_check: TensorFlow Lite yerleşik operatör kitaplığı yalnızca sınırlı sayıda TensorFlow operatörünü destekler (TensorFlow Lite ve TensorFlow operatör uyumluluğu). Tüm uyumsuz TensorFlow işlemleri, Flex temsilcisi (Android.bp) kullanılarak yüklenmelidir. Bir modelde desteklenmeyen işlemler varsa bunları kaydetmek için bizimle iletişime geçin:

    Cannot build the ClientOnlyPlan: Please contact Google to register these ops: {...}
    
  • Görev oluşturucunun hatalarını ayıklamanın en iyi yolu, yerel olarak bir görev oluşturucu başlatmaktır:

    # Starts a server at localhost:5000
    bazel run //python/taskbuilder:task_builder
    # Links to a server at localhost:5000 by removing task_builder_server flag
    bazel run //python/taskbuilder:task_builder_client -- --saved_model=${path_of_cloud_storage}/mnist_model/ --task_config=${path_of_cloud_storage}/mnist_cnn_task_config_build_artifact_only.pbtxt --build_artifact_only=true --skip_flex_ops_check=True --skip_dp_check=True
    

Elde edilen yapıları, yapılandırmada belirtilen bulut depolama alanında bulabilirsiniz. GitHub depomuzdaki örneğe benzer bir şey olmalıdır.

5. Adım: Yapılar oluşturun ve FCP sunucusunda yeni bir eğitim ve değerlendirme görevi çifti oluşturun.

build_artifact_only işaretini kaldırın. Oluşturulan yapılar, FCP sunucusuna yüklenir. Bir eğitim ve değerlendirme görevi çiftinin başarıyla oluşturulduğunu kontrol etmeniz gerekir.

cd ${odp_fcp_github_repo}/python
bazel run //python/taskbuilder:task_builder_client -- --saved_model=${path_of_cloud_storage}/mnist_model/ --task_config=${path_of_cloud_storage}/mnist_cnn_task_config.pbtxt --task_builder_server=${task_builder_server_endpoint}

6. Adım: FCP istemci tarafı için hazırlanın

7. Adım: İzleme

Dakikada ödev sayısını gösteren grafik.
İşlenen yineleme süresinin grafiği.
Zaman içindeki iterasyonların grafiği.
  • Model Metrikleri
Farklı çalıştırmalardaki metriklerin karşılaştırmasını gösteren grafik.

Farklı çalıştırmalardaki metrikleri tek bir şemada karşılaştırmak mümkündür. Örneğin:

  • Mor çizgi noise_multiplier 0,1 ile gösterilir.
  • Pembe çizgi noise_multipiler 0,3 ile gösterilir.