Mô phỏng hiệu suất cao với TFF

Hướng dẫn này sẽ mô tả cách thiết lập mô phỏng hiệu suất cao với TFF trong nhiều tình huống phổ biến khác nhau.

VIỆC CẦN LÀM (b / 134543154): Điền nội dung, một số điều cần đề cập ở đây:

  • sử dụng GPU trong thiết lập một máy,
  • thiết lập nhiều máy trên GCP / GKE, có và không có TPU,
  • giao diện các phụ trợ giống như MapReduce,
  • những hạn chế hiện tại và khi nào / như thế nào chúng sẽ được nới lỏng.
Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub Tải xuống sổ ghi chép

Trước khi chúng tôi bắt đầu

Trước tiên, hãy đảm bảo rằng sổ ghi chép của bạn được kết nối với một chương trình phụ trợ có các thành phần liên quan (bao gồm cả phần phụ thuộc gRPC cho các tình huống nhiều máy) được biên dịch.

Bây giờ, hãy bắt đầu bằng cách tải ví dụ MNIST từ trang web TFF và khai báo hàm Python sẽ chạy một vòng thử nghiệm nhỏ trên một nhóm 10 khách hàng.

!pip install --quiet --upgrade tensorflow-federated-nightly
!pip install --quiet --upgrade nest-asyncio

import nest_asyncio
nest_asyncio.apply()
import collections
import time

import tensorflow as tf

import tensorflow_federated as tff

source, _ = tff.simulation.datasets.emnist.load_data()


def map_fn(example):
  return collections.OrderedDict(
      x=tf.reshape(example['pixels'], [-1, 784]), y=example['label'])


def client_data(n):
  ds = source.create_tf_dataset_for_client(source.client_ids[n])
  return ds.repeat(10).shuffle(500).batch(20).map(map_fn)


train_data = [client_data(n) for n in range(10)]
element_spec = train_data[0].element_spec


def model_fn():
  model = tf.keras.models.Sequential([
      tf.keras.layers.InputLayer(input_shape=(784,)),
      tf.keras.layers.Dense(units=10, kernel_initializer='zeros'),
      tf.keras.layers.Softmax(),
  ])
  return tff.learning.from_keras_model(
      model,
      input_spec=element_spec,
      loss=tf.keras.losses.SparseCategoricalCrossentropy(),
      metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])


trainer = tff.learning.build_federated_averaging_process(
    model_fn, client_optimizer_fn=lambda: tf.keras.optimizers.SGD(0.02))


def evaluate(num_rounds=10):
  state = trainer.initialize()
  for _ in range(num_rounds):
    t1 = time.time()
    state, metrics = trainer.next(state, train_data)
    t2 = time.time()
    print('metrics {m}, round time {t:.2f} seconds'.format(
        m=metrics, t=t2 - t1))

Mô phỏng một máy

Bây giờ được bật theo mặc định.

evaluate()
metrics <sparse_categorical_accuracy=0.13858024775981903,loss=3.0073554515838623>, round time 3.59 seconds
metrics <sparse_categorical_accuracy=0.1796296238899231,loss=2.749046802520752>, round time 2.29 seconds
metrics <sparse_categorical_accuracy=0.21656379103660583,loss=2.514779567718506>, round time 2.33 seconds
metrics <sparse_categorical_accuracy=0.2637860178947449,loss=2.312587261199951>, round time 2.06 seconds
metrics <sparse_categorical_accuracy=0.3334362208843231,loss=2.068122386932373>, round time 2.00 seconds
metrics <sparse_categorical_accuracy=0.3737654387950897,loss=1.9268712997436523>, round time 2.42 seconds
metrics <sparse_categorical_accuracy=0.4296296238899231,loss=1.7216310501098633>, round time 2.20 seconds
metrics <sparse_categorical_accuracy=0.4655349850654602,loss=1.6489890813827515>, round time 2.18 seconds
metrics <sparse_categorical_accuracy=0.5048353672027588,loss=1.5485210418701172>, round time 2.16 seconds
metrics <sparse_categorical_accuracy=0.5564814805984497,loss=1.4140453338623047>, round time 2.41 seconds

Mô phỏng nhiều máy trên GCP / GKE, GPU, TPU và hơn thế nữa ...

Đến rất sớm.