Birleşik Program

Bu belge, birleştirilmiş program kavramlarına üst düzey bir genel bakışla ilgilenen herkes içindir. TensorFlow Federated, özellikle de tip sistemi hakkında bilgi sahibi olduğunu varsayar.

Birleşik program hakkında daha fazla bilgi için bkz.:

Birleştirilmiş program nedir?

Birleştirilmiş program, birleştirilmiş bir ortamda hesaplamaları ve diğer işleme mantığını yürüten bir programdır.

Daha fazlası, özellikle birleştirilmiş bir program :

Bu kavramların ve soyutlamaların tanımlanması, birleştirilmiş bir programın bileşenleri arasındaki ilişkilerin tanımlanmasını mümkün kılar ve bu bileşenlerin farklı roller tarafından sahiplenilmesine ve yazılmasına olanak tanır. Bu ayırma, geliştiricilerin diğer birleştirilmiş programlarla paylaşılan bileşenleri kullanarak birleştirilmiş program oluşturmasına olanak tanır; bu, genellikle aynı program mantığını birçok farklı platformda yürütmek anlamına gelir.

TFF'nin federe program kütüphanesi ( tff.program ), federe bir program oluşturmak için gereken soyutlamaları tanımlar ve platformdan bağımsız bileşenler sağlar.

Bileşenler

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

TFF'nin federe program kütüphanesinin bileşenleri , farklı rollerin sahiplenebileceği ve yazılabileceği şekilde tasarlanmıştır.

programı

Program aşağıdaki özelliklere sahip bir Python ikili dosyasıdır:

  1. parametreleri tanımlar (örn. bayraklar)
  2. platforma özgü bileşenler ve platformdan bağımsız bileşenler oluşturur
  3. birleşik bir bağlamda program mantığını kullanarak hesaplamaları yürütür

Örneğin:

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

Parametreler

Parametreler programın girdileridir, bu girdiler bayrak olarak gösterilmişse müşteri tarafından ayarlanabilir veya program tarafından ayarlanabilir. Yukarıdaki örnekte, output_dir müşteri tarafından ayarlanan bir parametredir ve total_rounds ve num_clients program tarafından ayarlanan parametrelerdir.

Platforma Özel Bileşenler

Platforma özel bileşenler, TFF'nin federe program kütüphanesi tarafından tanımlanan soyut arayüzleri uygulayan bir platform tarafından sağlanan bileşenlerdir.

Platformdan Bağımsız Bileşenler

Platformdan bağımsız bileşenler, TFF'nin federe program kütüphanesi tarafından tanımlanan soyut arayüzleri uygulayan bir kütüphane (örn. TFF) tarafından sağlanan bileşenlerdir.

Hesaplamalar

Hesaplamalar tff.Computation soyut arayüzünün uygulamalarıdır.

Örneğin, TFF platformunda bir tff.framework.ConcreteComputation oluşturmak için tff.tensorflow.computation veya tff.federated_computation dekoratörlerini kullanabilirsiniz:

Daha fazla bilgi için bir hesaplamanın ömrüne bakın.

Program Mantığı

Program mantığı, girdi olarak alan bir Python işlevidir:

ve genellikle aşağıdakileri içeren bazı işlemleri gerçekleştirir:

ve genellikle aşağıdakileri içeren bazı çıktılar sağlayabilir:

Örneğin:

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)

Roller

Birleştirilmiş programları tartışırken tanımlanması yararlı olan üç rol vardır: müşteri , platform ve kitaplık . Bu rollerin her biri, birleştirilmiş bir program oluşturmak için kullanılan bazı bileşenlerin sahibidir ve yazar. Ancak tek bir varlığın veya grubun birden fazla rolü yerine getirmesi mümkündür.

Müşteri

Müşteri genellikle:

ancak şunları yapabilir:

platformu

Platform genellikle:

ancak şunları yapabilir:

Kütüphane

Bir kütüphane genellikle:

Kavramlar

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

Birleşik programları tartışırken tanımlanması yararlı olan birkaç kavram vardır.

Müşteri Depolama Alanı

Müşteri depolaması, müşterinin okuma ve yazma erişimine sahip olduğu ve platformun yazma erişimine sahip olduğu depolamadır.

Platform Depolama

Platform depolama, yalnızca platformun okuma ve yazma erişimine sahip olduğu depolamadır.

Serbest bırakmak

Bir değerin serbest bırakılması, değerin müşteri deposunda kullanılabilir olmasını sağlar (örneğin, değerin bir kontrol panelinde yayınlanması, değerin günlüğe kaydedilmesi veya değerin diske yazılması).

Gerçekleştir

Bir değer referansının gerçekleştirilmesi, referans verilen değerin program tarafından kullanılabilir olmasını sağlar. Genellikle değeri serbest bırakmak veya program mantığını hataya dayanıklı hale getirmek için bir değer referansının gerçekleştirilmesi gerekir.

Hata Toleransı

Hata toleransı, program mantığının bir hesaplamayı yürütürken bir hatadan kurtulma yeteneğidir. Örneğin, 100 turun ilk 90'ını başarıyla eğitirseniz ve ardından bir başarısızlıkla karşılaşırsanız, program mantığı eğitimi 91. turdan devam ettirebilecek kapasitede midir yoksa eğitimin 1. turda yeniden başlatılması gerekir mi?