TFF के साथ उच्च-प्रदर्शन सिमुलेशन

यह ट्यूटोरियल वर्णन करेगा कि विभिन्न सामान्य परिदृश्यों में TFF के साथ उच्च-प्रदर्शन सिमुलेशन कैसे सेट करें।

TODO(b/134543154): सामग्री, कुछ चीजों को यहां शामिल करें:

  • एकल-मशीन सेटअप में GPU का उपयोग करना,
  • टीपीयू के साथ और बिना जीसीपी/जीकेई पर मल्टी-मशीन सेटअप,
  • MapReduce जैसे बैकएंड को इंटरफेस करना,
  • वर्तमान सीमाएं और उन्हें कब/कैसे शिथिल किया जाएगा।
TensorFlow.org पर देखें Google Colab में चलाएं GitHub पर स्रोत देखें नोटबुक डाउनलोड करें

इससे पहले कि हम शुरू करें

सबसे पहले, सुनिश्चित करें कि आपकी नोटबुक एक बैकएंड से जुड़ी है जिसमें प्रासंगिक घटक (मल्टी-मशीन परिदृश्यों के लिए जीआरपीसी निर्भरता सहित) संकलित हैं।

अब, टीएफएफ वेबसाइट से एमएनआईएसटी उदाहरण लोड करके शुरू करते हैं, और पायथन फ़ंक्शन की घोषणा करते हैं जो 10 क्लाइंट के समूह पर एक छोटा प्रयोग लूप चलाएगा।

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

सिंगल-मशीन सिमुलेशन

अब डिफ़ॉल्ट रूप से चालू है।

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

जीसीपी/जीकेई, जीपीयू, टीपीयू, और अन्य पर मल्टी-मशीन सिमुलेशन...

बहुत जल्द ही आ रहा है।