Panduan Pengembang Program Federasi

Dokumentasi ini ditujukan bagi siapa saja yang tertarik untuk membuat logika program gabungan atau program gabungan . Ini mengasumsikan pengetahuan tentang TensorFlow Federated, terutama sistem tipenya, dan program federasinya .

Logika Program

Bagian ini mendefinisikan pedoman bagaimana logika program harus dibuat.

Lihat contoh program_logic.py untuk informasi lebih lanjut.

Tanda Tangan Jenis Dokumen

Dokumentasikan tanda tangan tipe TFF untuk setiap parameter yang diberikan ke logika program yang memiliki tanda tangan tipe.

async def program_logic(
    train: tff.Computation,
    data_source: tff.program.FederatedDataSource,
    ...
) -> None:
  """Trains a federated model for some number of rounds.

  The following types signatures are required:

  1.  `train`:       `(<S@SERVER, D@CLIENTS> -> <S@SERVER, M@SERVER>)`
  2.  `data_source`: `D@CLIENTS`

  Where:

  *   `S`: The server state.
  *   `M`: The train metrics.
  *   `D`: The train client data.
  """

Periksa Jenis Tanda Tangan

Periksa tanda tangan tipe TFF (saat runtime) untuk setiap parameter yang diberikan ke logika program yang memiliki tanda tangan tipe.

def _check_program_logic_type_signatures(
    train: tff.Computation,
    data_source: tff.program.FederatedDataSource,
    ...
) -> None:
  ...

async def program_logic(
    train: tff.Computation,
    data_source: tff.program.FederatedDataSource,
    ...
) -> None:
  _check_program_logic_type_signatures(
      train=train,
      data_source=data_source,
  )
  ...

Ketik Anotasi

Berikan tipe Python yang terdefinisi dengan baik untuk setiap parameter tff.program.ReleaseManager yang disertakan ke logika program.

async def program_logic(
    metrics_manager: Optional[
        tff.program.ReleaseManager[tff.program.ReleasableStructure, int]
    ] = None,
    ...
) -> None:
  ...

Bukan

async def program_logic(
    metrics_manager,
    ...
) -> None:
  ...
async def program_logic(
    metrics_manager: Optional[tff.program.ReleaseManager] = None,
    ...
) -> None:
  ...

Status Program

Berikan struktur terdefinisi dengan baik yang menggambarkan keadaan program dari logika program.

class _ProgramState(NamedTuple):
  state: object
  round_num: int

async def program_loic(...) -> None:
  initial_state = ...

  # Load the program state
  if program_state_manager is not None:
    structure = _ProgramState(initial_state, round_num=0)
    program_state, version = await program_state_manager.load_latest(structure)
  else:
    program_state = None
    version = 0

  # Assign state and round_num
  if program_state is not None:
    state = program_state.state
    start_round = program_state.round_num + 1
  else:
    state = initial_state
    start_round = 1

  for round_num in range(start_round, ...):
    state, _ = train(state, ...)

    # Save the program state
    program_state = _ProgramState(state, round_num)
    version = version + 1
    program_state_manager.save(program_state, version)

Nilai Dokumen yang Dirilis

Dokumentasikan nilai-nilai yang dikeluarkan dari logika program.

async def program_logic(
    metrics_manager: Optional[tff.program.ReleaseManager] = None,
    ...
) -> None:
  """Trains a federated model for some number of rounds.

  Each round, `loss` is released to the `metrics_manager`.
  """

Rilis Nilai Tertentu

Jangan melepaskan nilai lebih dari logika program daripada yang diperlukan.

async def program_logic(...) -> None:

  for round_number in range(...):
    state, metrics = train(state, ...)

    _, metrics_type = train.type_signature.result
    loss = metrics['loss']
    loss_type = metrics_type['loss']
    metrics_manager.release(loss, loss_type, round_number)

Bukan

async def program_loic(...) -> None:

  for round_number in range(...):
    state, metrics = train(state, ...)

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

Fungsi Asinkron

Definisikan logika program sebagai fungsi asinkron . Komponen perpustakaan program gabungan TFF menggunakan asyncio untuk mengeksekusi Python secara bersamaan dan mendefinisikan logika program sebagai fungsi asinkron membuatnya lebih mudah untuk berinteraksi dengan komponen tersebut.

async def program_logic(...) -> None:
  ...

Bukan

def program_logic(...) -> None:
  ...

Tes

Berikan pengujian unit untuk logika program (misalnya program_logic_test.py ).

Program

Bagian ini mendefinisikan pedoman bagaimana suatu program harus ditulis.

Lihat contoh program.py untuk informasi lebih lanjut.

Dokumentasikan Programnya

Dokumentasikan detail program kepada pelanggan di docstring modul (misalnya program.py ):

  • Cara menjalankan program secara manual.
  • Platform, komputasi, dan sumber data apa yang digunakan dalam program ini.
  • Bagaimana pelanggan harus mengakses informasi yang dirilis dari program ke penyimpanan pelanggan.

Terlalu Banyak Parameter

Jangan membuat parameter program sedemikian rupa sehingga ada kumpulan parameter yang saling eksklusif. Misalnya, jika foo disetel ke X maka Anda juga diharuskan menyetel parameter bar , baz , jika tidak, parameter ini harus None . Ini menunjukkan bahwa Anda dapat membuat dua program berbeda untuk nilai foo yang berbeda.

Parameter Grup

Gunakan proto untuk mendefinisikan parameter terkait namun kompleks atau verbose daripada mendefinisikan banyak BENDERA (go/absl.flags).

with tf.io.gfile.GFile(config_path) as f:
  proto = text_format.Parse(f.read(), vizier_pb2.StudyConfig())
return pyvizier.StudyConfig.from_proto(proto)

Logika Python

Jangan menulis logika (misalnya aliran kontrol, menjalankan komputasi, apa pun yang perlu diuji) dalam program. Sebagai gantinya, pindahkan logika ke perpustakaan pribadi yang dapat diuji atau ke dalam logika program yang dipanggil oleh program.

Fungsi Asinkron

Jangan menulis fungsi asinkron dalam program ini. Sebagai gantinya, pindahkan fungsi tersebut ke perpustakaan pribadi yang dapat diuji atau ke dalam logika program yang dipanggil oleh program.

Tes

Jangan menulis pengujian unit untuk program tersebut, jika pengujian program berguna, tulis pengujian tersebut dalam bentuk pengujian integrasi.