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:
Đả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.
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á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:
- Học liên kết: Học máy cộng tác mà không cần dữ liệu huấn luyện tập trung
- Hướng tới Học liên kết trên quy mô lớn: Thiết kế hệ thống (SysML 2019)
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
trongIsolatedWorker#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
trongIsolatedWorker#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()
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), )
- 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:
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ạn sẽ thấy
dp_target_epsilon
hoặcnoise_mulitipiler
để vượt qua quy trình xác thực: (noise_to_epsilon
epislon_to_noise
). - Bạn có thể tìm thấy các chế độ cài đặt mặc định này trong kho lưu trữ GitHub của chúng tôi.
- Bạn sẽ thấy
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_check
và skip_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
- Triển khai API công khai ODP
IsolatedWorker#onTrainingExamples
để tạo dữ liệu huấn luyện. - Gọi
FederatedComputeScheduler#schedule
. - Hãy xem một số ví dụ trong kho lưu trữ nguồn Android của chúng tôi.
Bước 7. Giám sát
Chỉ số máy chủ
Xem hướng dẫn thiết lập trong kho lưu trữ GitHub của chúng tôi.
- Chỉ số mô hình
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