Simulasi Performa Tinggi dengan Kubernetes

Tutorial ini akan menjelaskan cara menyiapkan simulasi performa tinggi menggunakan runtime TFF yang berjalan di Kubernetes. Model ini sama seperti pada tutorial sebelumnya, simulasi Kinerja tinggi dengan TFF. Satu-satunya perbedaan adalah bahwa di sini kami menggunakan kumpulan pekerja alih-alih pelaksana lokal.

Tutorial ini mengacu pada Google Cloud GKE untuk membuat cluster Kubernetes, tapi semua langkah setelah cluster dibuat dapat digunakan dengan instalasi Kubernetes.

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub Unduh buku catatan

Luncurkan Pekerja TFF di GKE

Buat Cluster Kubernetes

Langkah selanjutnya hanya perlu dilakukan sekali. Cluster dapat digunakan kembali untuk beban kerja di masa mendatang.

Ikuti petunjuk GKE untuk membuat cluster kontainer . Sisa dari tutorial ini mengasumsikan bahwa cluster bernama tff-cluster , tapi nama sebenarnya tidak penting. Berhenti mengikuti petunjuk ketika Anda mendapatkan ke "Langkah 5: Deploy aplikasi Anda".

Terapkan Aplikasi Pekerja TFF

Perintah untuk berinteraksi dengan GCP dapat dijalankan secara lokal atau di Google Cloud Shell . Kami merekomendasikan Google Cloud Shell karena tidak memerlukan penyiapan tambahan.

  1. Jalankan perintah berikut untuk meluncurkan aplikasi Kubernetes.
$ kubectl create deployment tff-workers --image=gcr.io/tensorflow-federated/remote-executor-service:latest
  1. Tambahkan penyeimbang beban untuk aplikasi.
$ kubectl expose deployment tff-workers --type=LoadBalancer --port 80 --target-port 8000

Cari alamat IP loadbalancer di Google Cloud Console. Anda akan membutuhkannya nanti untuk menghubungkan loop pelatihan ke aplikasi pekerja.

(Bergantian) Luncurkan Docker Container Secara Lokal

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

Siapkan Lingkungan TFF

!pip install --quiet --upgrade tensorflow-federated-nightly
!pip install --quiet --upgrade nest-asyncio

import nest_asyncio
nest_asyncio.apply()

Tentukan Model yang Akan Dilatih

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

Siapkan Pelaksana Jarak Jauh

Secara default, TFF mengeksekusi semua komputasi secara lokal. Pada langkah ini kami memberi tahu TFF untuk terhubung ke layanan Kubernetes yang kami siapkan di atas. Pastikan untuk menyalin alamat IP layanan Anda di sini.

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)

Jalankan Pelatihan

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