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.