Bu eğitici, Kubernetes üzerinde çalışan bir TFF çalışma zamanı kullanılarak yüksek performanslı simülasyonun nasıl kurulacağını açıklayacaktır. Model önceki öğretici, TFF ile Yüksek performanslı simulasyonlarda aynıdır. Tek fark, burada yerel bir yürütücü yerine bir çalışan havuzu kullanmamızdır.
Bu eğitici, Google Cloud'un atıfta GKE Kubernetes küme oluşturmak için, ancak oluşturulan küme sonra tüm adımları herhangi Kubernetes yüklemesiyle kullanılabilir.
TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir |
GKE'de TFF Workers'ı başlatın
Kubernetes Kümesi Oluşturun
Aşağıdaki adımın yalnızca bir kez yapılması gerekir. Küme, gelecekteki iş yükleri için yeniden kullanılabilir.
İçin GKE talimatları izleyin bir kap küme oluşturmak . Bu eğitimde geri kalanı küme adlı varsayar tff-cluster
, ancak gerçek adı önemli değildir. Eğer vardığımızda Dur talimatları uygulayarak "Adım 5: dağıtın başvurunuz".
TFF Çalışan Uygulamasını Dağıtın
GSO ile etkileştiği için komutlar çalıştırılabilir lokal veya Google Bulut Shell . Ek kurulum gerektirmediğinden Google Cloud Shell'i öneririz.
- Kubernetes uygulamasını başlatmak için aşağıdaki komutu çalıştırın.
$ kubectl create deployment tff-workers --image=gcr.io/tensorflow-federated/remote-executor-service:latest
- Uygulama için bir yük dengeleyici ekleyin.
$ kubectl expose deployment tff-workers --type=LoadBalancer --port 80 --target-port 8000
Google Cloud Console'da yük dengeleyicinin IP adresine bakın. Eğitim döngüsünü çalışan uygulamasına bağlamak için daha sonra ihtiyacınız olacak.
(Alternatif olarak) Docker Konteynerini Yerel Olarak Başlatın
$ docker run --rm -p 8000:8000 gcr.io/tensorflow-federated/remote-executor-service:latest
TFF Ortamını Kurun
!pip install --quiet --upgrade tensorflow-federated-nightly
!pip install --quiet --upgrade nest-asyncio
import nest_asyncio
nest_asyncio.apply()
Eğitilecek Modeli Tanımlayın
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))
Uzak Yürütücüleri Ayarlayın
Varsayılan olarak, TFF tüm hesaplamaları yerel olarak yürütür. Bu adımda TFF'ye yukarıda kurduğumuz Kubernetes servislerine bağlanmasını söylüyoruz. Hizmetinizin IP adresini buraya kopyaladığınızdan emin olun.
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)
Koşu Eğitimi
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