Google I / O, 18-20 Mayıs'ta geri dönüyor! Yer ayırın ve programınızı oluşturun Şimdi kaydolun
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Kubernetes ile yüksek performanslı Simülasyon

Bu eğitici, Kubernetes üzerinde çalışan bir TFF çalışma zamanı kullanarak yüksek performanslı simülasyonun nasıl ayarlanacağını açıklayacaktır. Model, TFF ile yüksek performanslı simülasyonlar olan önceki eğitimdeki ile aynıdır. Tek fark, burada yerel bir uygulayı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

GKE'de TFF Çalışanlarını 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.

Kapsayıcı kümesi oluşturmak için GKE talimatlarını uygulayın. Bu öğreticinin geri kalanı, kümenin tff-cluster olarak adlandırıldığını varsayar, ancak gerçek ad önemli değildir. " Adım 5: Uygulamanızı dağıtın " a geldiğinizde talimatları izlemeyi bırakın.

TFF İşçi Uygulamasını dağıtın

GCP ile etkileşimde bulunma komutları yerel olarak veya Google Cloud Shell'de çalıştırılabilir . Ek kurulum gerektirmediği için Google Cloud Shell'i öneriyoruz.

  1. 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
  1. 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 adresini arayın. Eğitim döngüsünü çalışan uygulamasına bağlamak için daha sonra ihtiyacınız olacak.

(Alternatif olarak) Docker Container'ı Yerel Olarak Başlatın

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

TFF Ortamını Ayarlama

!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))

Uzaktan Yürütücüleri Kurun

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)

Eğitimi Çalıştır

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