Program Federasi

Dokumentasi ini diperuntukkan bagi siapa saja yang tertarik dengan gambaran umum tingkat tinggi tentang konsep program gabungan. Ini mengasumsikan pengetahuan tentang TensorFlow Federated, terutama sistem tipenya.

Untuk informasi lebih lanjut tentang program gabungan, lihat:

Apa itu program gabungan?

Program gabungan adalah program yang menjalankan komputasi dan logika pemrosesan lainnya dalam lingkungan gabungan.

Lebih lanjut, khususnya program gabungan :

Mendefinisikan konsep dan abstraksi ini memungkinkan untuk menggambarkan hubungan antara komponen program gabungan dan memungkinkan komponen ini dimiliki dan dibuat oleh peran yang berbeda. Pemisahan ini memungkinkan pengembang untuk membuat program gabungan menggunakan komponen yang digunakan bersama dengan program gabungan lainnya, biasanya ini berarti mengeksekusi logika program yang sama pada banyak platform berbeda.

Pustaka program gabungan TFF ( tff.program ) mendefinisikan abstraksi yang diperlukan untuk membuat program gabungan dan menyediakan komponen platform-agnostik .

Komponen

<!--#include file="components.dot"-->

Komponen perpustakaan program gabungan TFF dirancang sedemikian rupa sehingga dapat dimiliki dan dibuat oleh peran yang berbeda.

Program

Program ini adalah biner Python yang:

  1. mendefinisikan parameter (misalnya bendera)
  2. membangun komponen khusus platform dan komponen platform-agnostik
  3. mengeksekusi komputasi menggunakan logika program dalam konteks gabungan

Misalnya:

# Parameters set by the customer.
flags.DEFINE_string('output_dir', None, 'The output path.')

def main() -> None:

  # Parameters set by the program.
  total_rounds = 10
  num_clients = 3

  # Construct the platform-specific components.
  context = tff.program.NativeFederatedContext(...)
  data_source = tff.program.DatasetDataSource(...)

  # Construct the platform-agnostic components.
  summary_dir = os.path.join(FLAGS.output_dir, 'summary')
  metrics_manager = tff.program.GroupingReleaseManager([
      tff.program.LoggingReleaseManager(),
      tff.program.TensorBoardReleaseManager(summary_dir),
  ])
  program_state_dir = os.path.join(..., 'program_state')
  program_state_manager = tff.program.FileProgramStateManager(program_state_dir)

  # Define the computations.
  initialize = ...
  train = ...

  # Execute the computations using program logic.
  tff.framework.set_default_context(context)
  asyncio.run(
      train_federated_model(
          initialize=initialize,
          train=train,
          data_source=data_source,
          total_rounds=total_rounds,
          num_clients=num_clients,
          metrics_manager=metrics_manager,
          program_state_manager=program_state_manager,
      )
  )

Parameter

Parameternya adalah input ke program , input ini dapat diatur oleh pelanggan , jika diekspos sebagai flag, atau dapat diatur oleh program. Pada contoh di atas, output_dir merupakan parameter yang ditetapkan oleh pelanggan , dan total_rounds serta num_clients merupakan parameter yang ditetapkan oleh program.

Komponen Khusus Platform

Komponen khusus platform adalah komponen yang disediakan oleh platform yang mengimplementasikan antarmuka abstrak yang ditentukan oleh perpustakaan program gabungan TFF.

Komponen Platform-Agnostik

Komponen platform-agnostik adalah komponen yang disediakan oleh perpustakaan (misalnya TFF) yang mengimplementasikan antarmuka abstrak yang ditentukan oleh perpustakaan program gabungan TFF.

Perhitungan

Komputasinya merupakan implementasi antarmuka abstrak tff.Computation .

Misalnya, di platform TFF Anda dapat menggunakan dekorator tff.tensorflow.computation atau tff.federated_computation untuk membuat tff.framework.ConcreteComputation :

Lihat kehidupan komputasi untuk informasi lebih lanjut.

Logika Program

Logika program adalah fungsi Python yang mengambil input:

dan melakukan beberapa operasi, yang biasanya meliputi:

dan mungkin menghasilkan beberapa keluaran, yang biasanya meliputi:

Misalnya:

async def program_logic(
    initialize: tff.Computation,
    train: tff.Computation,
    data_source: tff.program.FederatedDataSource,
    total_rounds: int,
    num_clients: int,
    metrics_manager: tff.program.ReleaseManager[
        tff.program.ReleasableStructure, int
    ],
) -> None:
  state = initialize()
  start_round = 1

  data_iterator = data_source.iterator()
  for round_number in range(1, total_rounds + 1):
    train_data = data_iterator.select(num_clients)
    state, metrics = train(state, train_data)

    _, metrics_type = train.type_signature.result
    metrics_manager.release(metrics, metrics_type, round_number)

Peran

Ada tiga peran yang berguna untuk didefinisikan ketika mendiskusikan program gabungan: pelanggan , platform , dan perpustakaan . Masing-masing peran ini memiliki dan menulis beberapa komponen yang digunakan untuk membuat program gabungan. Namun, ada kemungkinan bagi satu entitas atau kelompok untuk menjalankan berbagai peran.

Pelanggan

Pelanggan biasanya:

tapi mungkin:

Platform

Platform biasanya:

tapi mungkin:

Perpustakaan

Sebuah perpustakaan biasanya:

Konsep

<!--#include file="concepts.dot"-->

Ada beberapa konsep yang berguna untuk didefinisikan ketika membahas program federasi.

Penyimpanan Pelanggan

Penyimpanan pelanggan adalah penyimpanan dimana pelanggan mempunyai akses baca dan tulis dan platform mempunyai akses tulis.

Penyimpanan Platform

Penyimpanan platform adalah penyimpanan yang hanya dimiliki oleh platform yang memiliki akses baca dan tulis.

Melepaskan

Melepaskan nilai akan membuat nilai tersedia di penyimpanan pelanggan (misalnya memublikasikan nilai ke dasbor, mencatat nilai, atau menulis nilai ke disk).

Mewujudkan

Mewujudkan referensi nilai membuat nilai referensi tersedia untuk program . Seringkali mewujudkan referensi nilai diperlukan untuk melepaskan nilai atau membuat logika program toleran terhadap kesalahan .

Toleransi Kesalahan

Toleransi kesalahan adalah kemampuan logika program untuk pulih dari kegagalan saat menjalankan komputasi. Misalnya, jika Anda berhasil melatih 90 putaran pertama dari 100 putaran dan kemudian mengalami kegagalan, apakah logika program mampu melanjutkan pelatihan dari putaran 91 atau apakah pelatihan perlu dimulai ulang pada putaran 1?