Kubernetes সঙ্গে উচ্চ কর্মক্ষমতা সিমুলেশন

এই টিউটোরিয়ালটি Kubernetes-এ চলমান একটি TFF রানটাইম ব্যবহার করে কীভাবে উচ্চ-পারফরম্যান্স সিমুলেশন সেট আপ করতে হয় তা বর্ণনা করবে। মডেল পূর্ববর্তী টিউটোরিয়াল, TFF সঙ্গে উচ্চ ক্ষমতা সম্পন্ন সিমিউলেশন মধ্যে সমান। শুধুমাত্র পার্থক্য হল এখানে আমরা স্থানীয় নির্বাহকের পরিবর্তে একটি কর্মী পুল ব্যবহার করি।

এই টিউটোরিয়ালটি Google মেঘ এর বোঝায় GKE Kubernetes ক্লাস্টার তৈরি করতে, কিন্তু ক্লাস্টার তৈরি করা হয় পরে সমস্ত ধাপ কোনো Kubernetes ইনস্টলেশন ব্যবহার করা যাবে।

TensorFlow.org এ দেখুন Google Colab-এ চালান GitHub-এ উৎস দেখুন নোটবুক ডাউনলোড করুন

GKE-তে TFF কর্মীদের চালু করুন

একটি কুবারনেটস ক্লাস্টার তৈরি করুন

নিম্নলিখিত পদক্ষেপ শুধুমাত্র একবার করা প্রয়োজন. ক্লাস্টারটি ভবিষ্যতের কাজের চাপের জন্য পুনরায় ব্যবহার করা যেতে পারে।

থেকে GKE নির্দেশাবলী অনুসরণ করুন একটি ধারক ক্লাস্টার তৈরি । এই টিউটোরিয়াল বাকি ধরে নেয় যে ক্লাস্টার নামকরণ করা হয় tff-cluster কিন্তু প্রকৃত নাম গুরুত্বপূর্ণ নয়। স্টপ নির্দেশাবলী অনুসরণ যখন আপনার সাথে যোগাযোগ "পদক্ষেপ 5: স্থাপন আপনার আবেদন"।

TFF কর্মী অ্যাপ্লিকেশন স্থাপন করুন

GCP সাথে যোগাযোগ করার জন্য কমান্ড চালানো যেতে পারে স্থানীয়ভাবে বা Google মেঘ শেল । আমরা Google ক্লাউড শেল সুপারিশ করি কারণ এটির অতিরিক্ত সেটআপের প্রয়োজন নেই৷

  1. Kubernetes অ্যাপ্লিকেশন চালু করতে নিম্নলিখিত কমান্ডটি চালান।
$ kubectl create deployment tff-workers --image=gcr.io/tensorflow-federated/remote-executor-service:latest
  1. অ্যাপ্লিকেশনের জন্য একটি লোড ব্যালেন্সার যোগ করুন।
$ kubectl expose deployment tff-workers --type=LoadBalancer --port 80 --target-port 8000

গুগল ক্লাউড কনসোলে লোডব্যালেন্সারের আইপি ঠিকানাটি দেখুন। কর্মী অ্যাপের সাথে ট্রেনিং লুপ কানেক্ট করতে পরে আপনার এটির প্রয়োজন হবে।

(পর্যায়ক্রমে) স্থানীয়ভাবে ডকার কন্টেইনার চালু করুন

$ docker run --rm -p 8000:8000 gcr.io/tensorflow-federated/remote-executor-service:latest

TFF এনভায়রনমেন্ট সেট আপ করুন

!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).batch(20).map(map_fn)


train_data = [client_data(n) for n in range(10)]
input_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=input_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 round in range(num_rounds):
    t1 = time.time()
    state, metrics = trainer.next(state, train_data)
    t2 = time.time()
    print('Round {}: loss {}, round time {}'.format(round, metrics.loss, t2 - t1))

রিমোট এক্সিকিউটর সেট আপ করুন

ডিফল্টরূপে, TFF স্থানীয়ভাবে সমস্ত গণনা চালায়। এই ধাপে আমরা TFF কে আমরা উপরে সেট করা Kubernetes পরিষেবাগুলির সাথে সংযোগ করতে বলি। এখানে আপনার পরিষেবার আইপি ঠিকানা কপি করতে ভুলবেন না।

import grpc

ip_address = '0.0.0.0' 
port = 80 

channels = [grpc.insecure_channel(f'{ip_address}:{port}') for _ in range(10)]

tff.backends.native.set_remote_execution_context(channels)

প্রশিক্ষণ চালান

evaluate()
Round 0: loss 4.370407581329346, round time 4.201097726821899
Round 1: loss 4.1407670974731445, round time 3.3283166885375977
Round 2: loss 3.865147590637207, round time 3.098310947418213
Round 3: loss 3.534019708633423, round time 3.1565616130828857
Round 4: loss 3.272688388824463, round time 3.175067663192749
Round 5: loss 2.935391664505005, round time 3.008434534072876
Round 6: loss 2.7399251461029053, round time 3.31435227394104
Round 7: loss 2.5054931640625, round time 3.4411356449127197
Round 8: loss 2.290508985519409, round time 3.158798933029175
Round 9: loss 2.1194536685943604, round time 3.1348156929016113