यह ट्यूटोरियल वर्णन करेगा कि विभिन्न सामान्य परिदृश्यों में 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
जीसीपी/जीकेई, जीपीयू, टीपीयू, और अन्य पर मल्टी-मशीन सिमुलेशन...
बहुत जल्द ही आ रहा है।