یک شغل یادگیری فدرال ایجاد کنید

این صفحه نحوه کار با APIهای یادگیری فدرال ارائه شده توسط On-Device Personalization برای آموزش مدلی با فرآیند یادگیری میانگین‌گیری فدرال و نویز گوسی ثابت را شرح می‌دهد.

قبل از شروع

قبل از شروع، مراحل زیر را در دستگاه آزمایشی خود انجام دهید:

  1. مطمئن شوید که ماژول OnDevicePersonalization نصب شده باشد. این ماژول به عنوان یک به روز رسانی خودکار در آوریل 2024 در دسترس قرار گرفت.

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

    مطمئن شوید که ماژول زیر با کد نسخه 341717000 یا بالاتر فهرست شده است:

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

    اگر آن ماژول در لیست نیست، به تنظیمات > امنیت و حریم خصوصی > به‌روزرسانی‌ها > به‌روزرسانی سیستم Google Play بروید تا مطمئن شوید دستگاهتان به‌روز است. در صورت لزوم Update را انتخاب کنید.

  2. همه ویژگی‌های جدید مرتبط با یادگیری فدرال را فعال کنید.

    # 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
    

یک وظیفه یادگیری فدرال ایجاد کنید

توپولوژی Ferted Learning Client-Server با هشت مرحله برجسته.
نمودار توپولوژی مشتری-سرور یادگیری فدرال با هشت مرحله برجسته.

اعداد در نمودار با جزئیات بیشتر در هشت مرحله زیر توضیح داده شده است.

یک سرور محاسباتی فدرال را پیکربندی کنید

آموزش فدرال یک کاهش نقشه است که بر روی سرور محاسباتی فدرال (کاهش کننده) و مجموعه ای از کلاینت ها (نقشه نگاران) اجرا می شود. سرور محاسبات فدرال، فراداده‌های در حال اجرا و اطلاعات مدل هر وظیفه یادگیری فدرال را حفظ می‌کند. در سطح بالا:

  • یک توسعه‌دهنده آموزش فدرال یک کار جدید ایجاد می‌کند و هم ابرداده‌های در حال اجرا و هم اطلاعات مدل را روی سرور آپلود می‌کند.
  • هنگامی که یک سرویس گیرنده محاسباتی فدرال درخواست انتساب وظیفه جدیدی را به سرور آغاز می کند، سرور واجد شرایط بودن کار را بررسی می کند و اطلاعات وظیفه واجد شرایط را برمی گرداند.
  • هنگامی که یک سرویس گیرنده محاسبات فدرال محاسبات محلی را به پایان رساند، این نتایج محاسباتی را به سرور ارسال می کند. سپس سرور تجمیع و نویز را روی این نتایج محاسباتی انجام می دهد و نتیجه را در مدل نهایی اعمال می کند.

برای آشنایی بیشتر با این مفاهیم، ​​بررسی کنید:

ODP از یک نسخه بهبودیافته از یادگیری فدرال استفاده می کند، که در آن نویز کالیبره شده (متمرکز) قبل از اعمال بر روی مدل به مجموعه ها اعمال می شود. مقیاس نویز تضمین می کند که سنگدانه ها حریم خصوصی دیفرانسیل را حفظ می کنند.

مرحله 1. یک سرور محاسباتی فدرال ایجاد کنید

دستورالعمل های پروژه محاسبات فدرال را دنبال کنید تا سرور محاسباتی فدرال خود را راه اندازی کنید.

مرحله 2. یک FunctionalModel ذخیره شده را آماده کنید

یک فایل "FunctionalModel" ذخیره شده را آماده کنید. می‌توانید از «functional_model_from_keras» برای تبدیل «Model» به «FunctionalModel» و از «save_functional_model» برای سریال‌سازی این «FunctionalModel» به‌عنوان «SavedModel» استفاده کنید.

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

مرحله 3. یک پیکربندی فدرال محاسبات سرور ایجاد کنید

یک fcp_server_config.json که شامل خط‌مشی‌ها، راه‌اندازی یادگیری فدرال و تنظیم حریم خصوصی متفاوت است، آماده کنید. مثال:

  # 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. پیکربندی zip را به سرور محاسباتی فدرال ارسال کنید.

فایل فشرده و fcp_server_config.json را به سرور محاسبات فدراسیونی ارسال کنید.

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

نقطه پایانی سرور محاسباتی فدرال سروری است که در مرحله 1 راه اندازی کرده اید.

کتابخانه اپراتور داخلی LiteRT فقط از تعداد محدودی از اپراتورهای TensorFlow پشتیبانی می کند (اپراتورهای TensorFlow را انتخاب کنید). مجموعه اپراتور پشتیبانی شده ممکن است در نسخه های مختلف ماژول OnDevicePersonalization متفاوت باشد. برای اطمینان از سازگاری، یک فرآیند تأیید اپراتور در هنگام ایجاد کار در سازنده وظیفه انجام می شود.

  • حداقل نسخه ماژول OnDevicePersonalization پشتیبانی شده در فراداده کار گنجانده خواهد شد. این اطلاعات را می توان در پیام اطلاعات سازنده وظیفه یافت.

    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"
    }
    

    سرور محاسبات فدرال این وظیفه را به تمام دستگاه های مجهز به ماژول OnDevicePersonalization با نسخه بالاتر از 341812000 اختصاص می دهد.

  • اگر مدل شما شامل عملیاتی باشد که توسط هیچ ماژول OnDevicePersonalization پشتیبانی نمی شود، در حین ایجاد کار، یک پیام خطا ایجاد می شود.

    common.TaskBuilderException: Cannot build the ClientOnlyPlan: Please contact Google to register these ops: {'L2Loss': 'L2LossOp<CPUDevice, float>'}
    . Stop building remaining artifacts.
    
  • می‌توانید فهرست دقیقی از عملیات انعطاف‌پذیر پشتیبانی شده را در GitHub پیدا کنید.

یک APK محاسباتی فدرال اندروید ایجاد کنید

برای ایجاد یک APK محاسباتی فدرال اندروید، باید نقطه پایانی URL سرور محاسباتی فدرال را در AndroidManifest.xml خود که Federated Compute Client به آن متصل می شود، مشخص کنید.

مرحله 5. نقطه پایانی URL سرور محاسبه فدرال را مشخص کنید

در AndroidManifest.xml خود، که Federated Compute Client به آن متصل می شود، نقطه پایان URL سرور محاسباتی فدرال را (که در مرحله 1 تنظیم کردید) مشخص کنید.

<!-- 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>

فایل منبع XML مشخص شده در تگ <property> نیز باید کلاس سرویس را در تگ <service> اعلام کند، و نقطه پایانی URL سرور محاسباتی فدرال را مشخص کند که Client محاسباتی فدرال به آن متصل خواهد شد:

<!-- 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. API IsolatedWorker#onTrainingExample را پیاده سازی کنید

برای تولید داده های آموزشی، API عمومی IsolatedWorker#onTrainingExample برای شخصی سازی روی دستگاه اجرا کنید.

کد در حال اجرا در IsolatedProcess هیچ دسترسی مستقیمی به شبکه، دیسک های محلی یا سایر سرویس های در حال اجرا بر روی دستگاه ندارد. با این حال، API های زیر در دسترس هستند:

  • 'getRemoteData' - داده‌های کلید-مقدار غیرقابل تغییر که در صورت وجود از راه‌دورهایی که توسط توسعه‌دهنده کار می‌کنند دانلود می‌شوند.
  • 'getLocalData' - داده‌های متغیر کلید-مقدار که به صورت محلی توسط توسعه‌دهندگان حفظ می‌شوند، در صورت وجود.
  • 'UserData' - داده های کاربر ارائه شده توسط پلت فرم.
  • 'getLogReader' - یک DAO را برای جداول REQUESTS و EVENTS برمی‌گرداند.

مثال:

@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. یک کار آموزشی تکراری را برنامه ریزی کنید.

شخصی‌سازی روی دستگاه یک FederatedComputeScheduler را برای توسعه‌دهندگان فراهم می‌کند تا کارهای محاسباتی فدرال را زمان‌بندی یا لغو کنند. گزینه‌های مختلفی برای فراخوانی آن از طریق IsolatedWorker وجود دارد، چه بر اساس یک برنامه زمان‌بندی یا زمانی که دانلود async کامل شود. نمونه هایی از هر دو در ادامه می آید.

  • گزینه مبتنی بر زمانبندی FederatedComputeScheduler#schedule در IsolatedWorker#onExecute فراخوانی کنید.

    @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);
        }
    }
    
  • دانلود گزینه کامل. فراخوانی FederatedComputeScheduler#schedule در IsolatedWorker#onDownloadCompleted اگر زمان‌بندی یک کار آموزشی به داده‌ها یا فرآیندهای ناهمزمان بستگی داشته باشد.

اعتبار سنجی

مراحل زیر نحوه اعتبار سنجی اگر وظیفه یادگیری فدرال به درستی اجرا می شود را شرح می دهد.

مرحله 8. اگر وظیفه یادگیری فدرال به درستی اجرا می شود، اعتبارسنجی کنید.

یک نقطه بازرسی مدل جدید و یک فایل متریک جدید در هر دور از تجمع سمت سرور ایجاد می شود.

معیارها در یک فایل با فرمت JSON از جفت های کلید-مقدار هستند. فایل توسط لیست Metrics که در مرحله 3 تعریف کردید تولید می شود. نمونه ای از فایل JSON معیارهای نماینده به شرح زیر است:

{"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}

می توانید از چیزی شبیه به اسکریپت زیر برای دریافت معیارهای مدل و نظارت بر عملکرد آموزش استفاده کنید:

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 هنگام ترسیم.

توجه داشته باشید که در نمودار مثال قبل:

  • محور x تعداد تمرینات دور است.
  • محور y مقدار auc-roc هر دور است.

آموزش یک مدل طبقه بندی تصویر در شخصی سازی روی دستگاه

در این آموزش، از مجموعه داده EMNIST برای نشان دادن نحوه اجرای یک وظیفه یادگیری فدرال در ODP استفاده می شود.

مرحله 1. یک tff.learning.models.FunctionalModel ایجاد کنید

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 را می توانید در emnist_models بیابید.
  • TfLite هنوز از tf.sparse.SparseTensor یا tf.RaggedTensor پشتیبانی خوبی ندارد. سعی کنید در ساخت مدل تا حد امکان از tf.Tensor استفاده کنید.
  • ODP Task Builder تمام معیارها را هنگام ساخت فرآیند یادگیری بازنویسی می کند، نیازی به تعیین هیچ معیاری نیست. این موضوع در مرحله 2 بیشتر پوشش داده خواهد شد. پیکربندی سازنده وظیفه را ایجاد کنید .
  • دو نوع ورودی مدل پشتیبانی می شود:

    • نوع 1. یک تاپل (features_tensor, label_tensor).

      • هنگام ایجاد مدل، input_spec به نظر می رسد:
      def get_input_spec():
        return (
            tf.TensorSpec([None, 28, 28, 1], tf.float32),
            tf.TensorSpec([None, 1], tf.int64),
        )
      
      • موارد قبلی را با اجرای زیر از API عمومی ODP IsolatedWorker#onTrainingExamples برای تولید داده های آموزشی در دستگاه جفت کنید:
      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()
      
    • نوع 2. A Tuple(Dict[feature_name, feature_tensor], label_tensor)

      • هنگام ایجاد مدل، input_spec به نظر می رسد:
      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),
        )
      
      • موارد قبلی را با اجرای زیر از API عمومی ODP IsolatedWorker#onTrainingExamples برای تولید داده های آموزشی جفت کنید:
      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()
      
      • فراموش نکنید که label_name را در پیکربندی task builder ثبت کنید.
      mode: TRAINING_AND_EVAL  # Task execution mode
      population_name: "my_example_model"
      label_name: "my_label"
      
  • ODP به طور خودکار DP را هنگام ساخت فرآیند یادگیری کنترل می کند. بنابراین نیازی به اضافه کردن نویز در هنگام ایجاد مدل عملکردی نیست.

  • خروجی این مدل عملکردی ذخیره شده باید مانند نمونه موجود در مخزن GitHub ما باشد.

مرحله 2. پیکربندی task builder را ایجاد کنید

می توانید نمونه هایی از پیکربندی سازنده وظیفه را در مخزن GitHub ما بیابید.

  • معیارهای آموزش و ارزیابی

    با توجه به اینکه معیارها ممکن است داده‌های کاربر را درز کنند، Task Builder فهرستی از معیارهایی دارد که فرآیند یادگیری می‌تواند تولید و منتشر کند. شما می توانید لیست کامل را در مخزن GitHub ما بیابید.

    در اینجا یک لیست متریک نمونه هنگام ایجاد یک پیکربندی سازنده وظیفه جدید آمده است:

    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"
        }
      }
    }
    

اگر معیارهای مورد نظر شما در لیست حاضر نیستند، با ما تماس بگیرید.

  • تنظیمات DP

    چند پیکربندی مرتبط با DP وجود دارد که باید مشخص شود:

    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. مدل ذخیره شده و پیکربندی سازنده وظیفه را در فضای ذخیره سازی ابری هر توسعه دهنده آپلود کنید

به یاد داشته باشید که هنگام آپلود پیکربندی سازنده وظیفه، فیلدهای artifact_building را به روز کنید.

مرحله 4. (اختیاری) ساخت مصنوع را بدون ایجاد یک کار جدید آزمایش کنید

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}

مدل نمونه از طریق بررسی flex ops و بررسی dp اعتبار سنجی می شود. می توانید skip_flex_ops_check و skip_dp_check برای دور زدن در طول اعتبارسنجی اضافه کنید (این مدل به دلیل چند عملیات فلکس از دست رفته نمی تواند در نسخه فعلی مشتری ODP مستقر شود).

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 فقط از تعداد محدودی از اپراتورهای TensorFlow پشتیبانی می کند ( سازگاری اپراتور TensorFlow Lite و TensorFlow ). همه عملیات تنسورفلو ناسازگار باید با استفاده از نماینده flex ( Android.bp ) نصب شوند. اگر مدلی دارای عملیات پشتیبانی نشده است، برای ثبت آن با ما تماس بگیرید:

    Cannot build the ClientOnlyPlan: Please contact Google to register these ops: {...}
    
  • بهترین راه برای رفع اشکال یک Task Builder این است که آن را به صورت محلی شروع کنید:

    # 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
    

می توانید مصنوعات حاصل را در فضای ذخیره سازی ابری مشخص شده در پیکربندی پیدا کنید. باید چیزی شبیه به مثال موجود در مخزن GitHub ما باشد.

مرحله 5. ساخت مصنوعات و ایجاد یک جفت جدید از وظایف آموزشی و ارزیابی در سرور FCP.

پرچم build_artifact_only را حذف کنید و مصنوعات ساخته شده در سرور FCP آپلود خواهند شد. باید بررسی کنید که یک جفت کار آموزشی و ارزیابی با موفقیت ایجاد شده است

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. سمت کلاینت FCP را آماده کنید

مرحله 7. نظارت

نمودار تکالیف در دقیقه
نمودار زمان پردازش تکرار.
نمودار تکرارها در طول زمان
  • معیارهای مدل
نموداری که مقایسه معیارهای اجراهای مختلف را نشان می دهد.

امکان مقایسه معیارهای اجراهای مختلف در یک نمودار وجود دارد. به عنوان مثال:

  • خط بنفش با noise_multiplier 0.1 است
  • خط صورتی با noise_multipiler 0.3 است