این آموزش نحوه راه اندازی شبیه سازی با کارایی بالا با استفاده از زمان اجرا TFF در Kubernetes را توضیح می دهد. مدل همان است که در آموزش قبلی، شبیه سازی عملکرد بالا با TFF است. تنها تفاوت این است که در اینجا ما به جای یک مجری محلی از یک worker pool استفاده می کنیم.
این آموزش اشاره به Google Cloud را GKE به ایجاد خوشه Kubernetes، اما تمام مراحل پس از خوشه ایجاد شده است می تواند با هر نصب و راه اندازی Kubernetes استفاده می شود.
مشاهده در TensorFlow.org | در Google Colab اجرا شود | مشاهده منبع در GitHub | دانلود دفترچه یادداشت |
TFF Workers را در GKE راه اندازی کنید
یک خوشه Kubernetes ایجاد کنید
مرحله زیر فقط یک بار باید انجام شود. این خوشه را می توان برای بارهای کاری آینده مجدداً استفاده کرد.
دستورالعمل GKE را دنبال به ایجاد یک خوشه ظرف . بقیه این آموزش فرض بر این است که خوشه به نام tff-cluster
، اما نام واقعی مهم نیست. توقف دستورالعمل وقتی که شما برای به دست آوردن "مرحله 5: استقرار برنامه خود را".
برنامه TFF Worker را مستقر کنید
دستورات به تعامل با GCP می تواند اجرا شود به صورت محلی و یا در ابر شل گوگل . ما Google Cloud Shell را توصیه می کنیم زیرا به تنظیمات اضافی نیاز ندارد.
- دستور زیر را برای راه اندازی اپلیکیشن Kubernetes اجرا کنید.
$ kubectl create deployment tff-workers --image=gcr.io/tensorflow-federated/remote-executor-service:latest
- یک متعادل کننده بار برای برنامه اضافه کنید.
$ kubectl expose deployment tff-workers --type=LoadBalancer --port 80 --target-port 8000
آدرس IP loadbalancer را در Google Cloud Console جستجو کنید. بعداً برای اتصال حلقه آموزشی به برنامه worker به آن نیاز خواهید داشت.
(به طور متناوب) Docker Container را به صورت محلی راه اندازی کنید
$ 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 که در بالا تنظیم کردیم متصل شود. حتما آدرس IP سرویس خود را اینجا کپی کنید.
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