Tạo công việc học liên kết

Trang này mô tả cách làm việc với các API Học liên kết do tính năng Cá nhân hoá trên thiết bị cung cấp để huấn luyện một mô hình bằng quy trình học liên kết trung bình và nhiễu Gaussian cố định.

Trước khi bắt đầu

Trước khi bắt đầu, hãy hoàn thành các bước sau trên thiết bị thử nghiệm:

  1. Đảm bảo mô-đun OnDevicePersonalization đã được cài đặt. Mô-đun này đã được cung cấp dưới dạng bản cập nhật tự động vào tháng 4 năm 2024.

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

    Đảm bảo mô-đun sau được liệt kê có mã phiên bản là 341717000 trở lên:

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

    Nếu mô-đun đó không có trong danh sách, hãy chuyển đến phần Cài đặt > Bảo mật và quyền riêng tư > Bản cập nhật > Bản cập nhật hệ thống Google Play để đảm bảo thiết bị của bạn đang dùng phiên bản mới nhất. Chọn Cập nhật nếu cần.

  2. Bật tất cả tính năng mới liên quan đến tính năng Học liên kết.

    # 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
    

Tạo tác vụ Học liên kết

Cấu trúc máy khách-máy chủ của Học liên kết với 8 bước được làm nổi bật.
Sơ đồ về cấu trúc máy khách-máy chủ của công nghệ học liên kết, trong đó có 8 bước được làm nổi bật.

Các con số trong sơ đồ được giải thích chi tiết hơn trong 8 bước sau.

Định cấu hình Máy chủ điện toán liên kết

Học liên kết là một tính năng rút gọn bản đồ chạy trên Máy chủ điện toán liên kết (trình rút gọn) và một nhóm ứng dụng khách (trình lập bản đồ). Máy chủ Điện toán liên kết duy trì siêu dữ liệu và thông tin về mô hình đang chạy của từng tác vụ Học liên kết. Ở cấp độ cao:

  • Nhà phát triển Học liên kết tạo một tác vụ mới và tải cả siêu dữ liệu đang chạy tác vụ và thông tin mô hình lên máy chủ.
  • Khi ứng dụng Federated Compute bắt đầu một yêu cầu chỉ định tác vụ mới cho máy chủ, máy chủ sẽ kiểm tra xem tác vụ có đủ điều kiện hay không và trả về thông tin về tác vụ đủ điều kiện.
  • Sau khi ứng dụng Điện toán liên kết hoàn tất các phép tính cục bộ, ứng dụng đó sẽ gửi kết quả tính toán này đến máy chủ. Sau đó, máy chủ sẽ thực hiện tổng hợp và tạo nhiễu trên các kết quả tính toán này rồi áp dụng kết quả cho mô hình cuối cùng.

Để tìm hiểu thêm về các khái niệm này, hãy xem:

ODP sử dụng phiên bản nâng cao của công nghệ Học liên kết, trong đó áp dụng độ nhiễu được hiệu chỉnh (tập trung) cho dữ liệu tổng hợp trước khi áp dụng cho mô hình. Phạm vi độ nhiễu đảm bảo dữ liệu tổng hợp bảo vệ sự riêng tư biệt lập.

Bước 1. Tạo Máy chủ điện toán liên kết

Làm theo hướng dẫn trong dự án Điện toán liên kết để thiết lập Máy chủ điện toán liên kết của riêng bạn.

Bước 2. Chuẩn bị FunctionalModel đã lưu

Chuẩn bị tệp 'FunctionalModel' đã lưu. Bạn có thể sử dụng 'functional_model_from_keras' để chuyển đổi 'Mô hình' thành 'FunctionalModel' và sử dụng 'save_functional_model' để chuyển đổi tuần tự 'FunctionalModel' này dưới dạng 'SavedModel'.

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

Bước 3. Tạo cấu hình Máy chủ điện toán liên kết

Chuẩn bị fcp_server_config.json bao gồm các chính sách, chế độ thiết lập học liên kết và chế độ thiết lập quyền riêng tư biệt lập. Ví dụ:

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

Bước 4. Gửi cấu hình zip đến máy chủ Điện toán liên kết.

Gửi tệp zip và fcp_server_config.json đến máy chủ Điện toán liên kết.

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

Điểm cuối của Máy chủ điện toán liên kết là máy chủ bạn thiết lập ở bước 1.

Thư viện toán tử tích hợp LiteRT chỉ hỗ trợ một số toán tử TensorFlow (Chọn toán tử TensorFlow). Tập hợp toán tử được hỗ trợ có thể khác nhau giữa các phiên bản của mô-đun OnDevicePersonalization. Để đảm bảo khả năng tương thích, quy trình xác minh nhà vận hành sẽ được thực hiện trong trình tạo công việc trong quá trình tạo công việc.

  • Phiên bản mô-đun OnDevicePersonalization tối thiểu được hỗ trợ sẽ được đưa vào siêu dữ liệu tác vụ. Bạn có thể tìm thấy thông tin này trong thông báo thông tin của trình tạo công việc.

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

    Máy chủ Điện toán liên kết sẽ chỉ định nhiệm vụ này cho tất cả thiết bị có mô-đun OnDevicePersonalization phiên bản cao hơn 341812000.

  • Nếu mô hình của bạn bao gồm các thao tác không được mô-đun OnDevicePersonalization hỗ trợ, thì thông báo lỗi sẽ được tạo trong quá trình tạo tác vụ.

    common.TaskBuilderException: Cannot build the ClientOnlyPlan: Please contact Google to register these ops: {'L2Loss': 'L2LossOp<CPUDevice, float>'}
    . Stop building remaining artifacts.
    
  • Bạn có thể tìm thấy danh sách chi tiết về các hoạt động linh hoạt được hỗ trợ trong GitHub.

Tạo APK điện toán liên kết cho Android

Để tạo tệp APK Android Federated Compute, bạn cần chỉ định điểm cuối URL Máy chủ tính toán liên kết trong AndroidManifest.xml mà Ứng dụng tính toán liên kết kết nối với.

Bước 5. Chỉ định điểm cuối URL của Máy chủ điện toán liên kết

Chỉ định điểm cuối URL của Máy chủ điện toán liên kết (mà bạn đã thiết lập ở Bước 1) trong AndroidManifest.xml mà Ứng dụng điện toán liên kết sẽ kết nối.

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

Tệp tài nguyên XML được chỉ định trong thẻ <property> cũng phải khai báo lớp dịch vụ trong thẻ <service> và chỉ định điểm cuối URL của Máy chủ điện toán liên kết mà Ứng dụng điện toán liên kết sẽ kết nối:

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

Bước 6. Triển khai API IsolatedWorker#onTrainingExample

Triển khai IsolatedWorker#onTrainingExample API công khai của hoạt động Cá nhân hoá trên thiết bị để tạo dữ liệu huấn luyện.

Mã chạy trong IsolatedProcess không có quyền truy cập trực tiếp vào mạng, ổ đĩa cục bộ hoặc các dịch vụ khác chạy trên thiết bị; tuy nhiên, bạn có thể sử dụng các API sau:

  • 'getRemoteData' – Dữ liệu khoá-giá trị không thể thay đổi được tải xuống từ các phần phụ trợ từ xa do nhà phát triển vận hành, nếu có.
  • 'getLocalData' – Dữ liệu khoá-giá trị có thể thay đổi do nhà phát triển lưu giữ cục bộ, nếu có.
  • "UserData" – Dữ liệu người dùng do nền tảng cung cấp.
  • 'getLogReader' – Trả về DAO cho các bảng YÊU CẦU và SỰ KIỆN.

Ví dụ:

@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());
    }
}

Bước 7. Lên lịch cho một nhiệm vụ đào tạo định kỳ.

Tính năng Cá nhân hoá trên thiết bị cung cấp FederatedComputeScheduler để nhà phát triển lên lịch hoặc huỷ các công việc tính toán liên kết. Có nhiều tuỳ chọn để gọi thông qua IsolatedWorker, theo lịch biểu hoặc khi quá trình tải xuống không đồng bộ hoàn tất. Sau đây là ví dụ về cả hai cách.

  • Tuỳ chọn dựa trên lịch biểu. Gọi FederatedComputeScheduler#schedule trong 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);
        }
    }
    
  • Tuỳ chọn Tải xuống xong. Gọi FederatedComputeScheduler#schedule trong IsolatedWorker#onDownloadCompleted nếu việc lên lịch cho một tác vụ huấn luyện phụ thuộc vào bất kỳ quy trình hoặc dữ liệu không đồng bộ nào.

Xác thực

Các bước sau đây mô tả cách xác thực xem tác vụ Học liên kết có đang chạy đúng cách hay không.

Bước 8. Xác thực xem tác vụ Học liên kết có đang chạy đúng cách hay không.

Một điểm kiểm tra mô hình mới và một tệp chỉ số mới sẽ được tạo ở mỗi vòng tổng hợp phía máy chủ.

Các chỉ số này nằm trong một tệp có định dạng JSON gồm các cặp khoá-giá trị. Tệp này được tạo bằng danh sách Metrics mà bạn đã xác định ở Bước 3. Sau đây là ví dụ về tệp JSON chứa các chỉ số đại diện:

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

Bạn có thể sử dụng tập lệnh tương tự như sau để lấy các chỉ số mô hình và theo dõi hiệu suất huấn luyện:

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()
Biểu đồ ví dụ về giao diện của chỉ số auc-roc khi được lập biểu đồ.

Lưu ý rằng trong biểu đồ ví dụ trước:

  • Trục x là số vòng huấn luyện.
  • Trục y là giá trị auc-roc của mỗi vòng.

Đào tạo mô hình phân loại hình ảnh về tính năng Cá nhân hoá trên thiết bị

Trong hướng dẫn này, tập dữ liệu EMNIST được dùng để minh hoạ cách chạy một tác vụ học liên kết trên ODP.

Bước 1. Tạo 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)
  • Bạn có thể tìm thông tin chi tiết về mô hình emnist keras trong emnist_models.
  • TfLite chưa hỗ trợ tốt cho tf.sparse.SparseTensor hoặc tf.RaggedTensor. Cố gắng sử dụng tf.Tensor nhiều nhất có thể khi tạo mô hình.
  • Trình tạo tác vụ ODP sẽ ghi đè tất cả các chỉ số khi tạo quy trình học tập, bạn không cần chỉ định bất kỳ chỉ số nào. Chúng ta sẽ đề cập thêm về chủ đề đó trong Bước 2. Tạo cấu hình trình tạo tác vụ.
  • Hệ thống hỗ trợ hai loại dữ liệu đầu vào của mô hình:

    • Loại 1. Một bộ dữ liệu(features_tensor, label_tensor).

      • Khi tạo mô hình, input_spec sẽ có dạng như sau:
      def get_input_spec():
        return (
            tf.TensorSpec([None, 28, 28, 1], tf.float32),
            tf.TensorSpec([None, 1], tf.int64),
        )
      
      • Ghép nối phần trước với cách triển khai API công khai ODP IsolatedWorker#onTrainingExamples sau đây để tạo dữ liệu huấn luyện trên thiết bị:
      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()
      
    • Loại 2. Tuple(Dict[feature_name, feature_tensor], label_tensor)

      • Khi tạo mô hình, input_spec sẽ có dạng như sau:
      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),
        )
      
      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()
      
      • Đừng quên đăng ký label_name trong cấu hình trình tạo tác vụ.
      mode: TRAINING_AND_EVAL  # Task execution mode
      population_name: "my_example_model"
      label_name: "my_label"
      
  • ODP tự động xử lý DP khi xây dựng quy trình học. Vì vậy, bạn không cần thêm bất kỳ yếu tố gây nhiễu nào khi tạo mô hình chức năng.

  • Kết quả của mô hình chức năng đã lưu này sẽ giống như mẫu trong kho lưu trữ GitHub của chúng tôi.

Bước 2. Tạo cấu hình trình tạo tác vụ

Bạn có thể tìm thấy các mẫu cấu hình trình tạo tác vụ trong kho lưu trữ GitHub của chúng tôi.

  • Chỉ số đào tạo và đánh giá

    Do các chỉ số có thể làm rò rỉ dữ liệu người dùng, Trình tạo tác vụ sẽ có một danh sách các chỉ số mà quá trình học có thể tạo và phát hành. Bạn có thể xem danh sách đầy đủ trong kho lưu trữ GitHub của chúng tôi.

    Dưới đây là danh sách chỉ số mẫu khi tạo một cấu hình trình tạo tác vụ mới:

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

Nếu các chỉ số bạn quan tâm không có trong danh sách hiện tại, hãy liên hệ với chúng tôi.

  • Cấu hình DP

    Có một số cấu hình liên quan đến DP cần chỉ định:

    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
    }
    

Bước 3. Tải mô hình đã lưu và cấu hình trình tạo tác vụ lên bộ nhớ trên đám mây của bất kỳ nhà phát triển nào

Hãy nhớ cập nhật các trường artifact_building khi tải cấu hình trình tạo tác vụ lên.

Bước 4. (không bắt buộc) Kiểm thử bản dựng cấu phần phần mềm mà không cần tạo tác vụ mới

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}

Mô hình mẫu được xác thực thông qua cả quy trình kiểm tra thao tác linh hoạt và kiểm tra dp; bạn có thể thêm skip_flex_ops_checkskip_dp_check để bỏ qua trong quá trình xác thực (không thể triển khai mô hình này cho phiên bản ứng dụng ODP hiện tại do thiếu một số thao tác linh hoạt).

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: thư viện toán tử tích hợp TensorFlow Lite chỉ hỗ trợ một số ít toán tử TensorFlow (tương thích với toán tử TensorFlow Lite và TensorFlow). Bạn cần cài đặt tất cả các toán tử tensorflow không tương thích bằng cách sử dụng trình uỷ quyền flex (Android.bp). Nếu một mô hình chứa các toán tử không được hỗ trợ, hãy liên hệ với chúng tôi để đăng ký các toán tử đó:

    Cannot build the ClientOnlyPlan: Please contact Google to register these ops: {...}
    
  • Cách tốt nhất để gỡ lỗi trình tạo tác vụ là bắt đầu một trình tạo tác vụ cục bộ:

    # 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
    

Bạn có thể tìm thấy các cấu phần phần mềm thu được tại bộ nhớ trên đám mây được chỉ định trong cấu hình. Tệp này phải giống như ví dụ trong kho lưu trữ GitHub của chúng tôi.

Bước 5. Tạo cấu phần phần mềm và tạo một cặp tác vụ huấn luyện và đánh giá mới trên máy chủ FCP.

Xoá cờ build_artifact_only và các cấu phần phần mềm đã tạo sẽ được tải lên máy chủ FCP. Bạn nên kiểm tra để đảm bảo rằng một cặp tác vụ huấn luyện và eval đã được tạo thành công

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}

Bước 6. Chuẩn bị sẵn sàng phía máy khách FCP

Bước 7. Giám sát

Biểu đồ số lần chỉ định mỗi phút.
Biểu đồ thời gian xử lý vòng lặp.
Biểu đồ số lần lặp lại theo thời gian.
  • Chỉ số mô hình
Biểu đồ minh hoạ việc so sánh các chỉ số từ nhiều lần chạy.

Bạn có thể so sánh các chỉ số từ nhiều lần chạy trong một sơ đồ. Ví dụ:

  • Đường màu tím có noise_multiplier là 0,1
  • Đường màu hồng có noise_multipiler là 0,3