TFF এর সাথে উচ্চ-কর্মক্ষমতা সিমুলেশন

এই টিউটোরিয়ালটি বর্ণনা করবে কিভাবে TFF এর সাথে বিভিন্ন সাধারণ পরিস্থিতিতে উচ্চ-পারফরম্যান্স সিমুলেশন সেটআপ করা যায়।

TODO(b/134543154): বিষয়বস্তু পূরণ করুন, এখানে কভার করার কিছু জিনিস:

  • একটি একক-মেশিন সেটআপে GPU ব্যবহার করে,
  • GCP/GKE-তে মাল্টি-মেশিন সেটআপ, TPU সহ এবং ছাড়া,
  • ইন্টারফেসিং MapReduce-এর মত ব্যাকএন্ড,
  • বর্তমান সীমাবদ্ধতা এবং কখন/কীভাবে সেগুলি শিথিল করা হবে।
TensorFlow.org এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

আমরা শুরু করার আগে

প্রথমে, নিশ্চিত করুন যে আপনার নোটবুকটি এমন একটি ব্যাকএন্ডের সাথে সংযুক্ত রয়েছে যাতে প্রাসঙ্গিক উপাদানগুলি (মাল্টি-মেশিন পরিস্থিতিগুলির জন্য gRPC নির্ভরতা সহ) সংকলিত রয়েছে৷

এখন, TFF ওয়েবসাইট থেকে MNIST উদাহরণ লোড করে শুরু করা যাক, এবং Python ফাংশন ঘোষণা করে যা 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

জিসিপি/জিকেই, জিপিইউ, টিপিইউ এবং এর বাইরে মাল্টি-মেশিন সিমুলেশন...

খুব তাড়াতাড়ি আসছে.