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 :
- mengeksekusi komputasi
- menggunakan logika program
- dengan komponen khusus platform
- dan komponen platform-agnostik
- parameter tertentu yang ditetapkan oleh program
- dan parameter yang ditetapkan oleh pelanggan
- ketika pelanggan menjalankan program
- dan dapat mewujudkan data dalam penyimpanan platform untuk:
- digunakan dalam logika Python
- menerapkan toleransi kesalahan
- dan mungkin merilis data ke penyimpanan pelanggan
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:
- mendefinisikan parameter (misalnya bendera)
- membangun komponen khusus platform dan komponen platform-agnostik
- 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:
- parameter yang ditetapkan oleh pelanggan dan program
- komponen khusus platform
- komponen platform-agnostik
- perhitungan
dan melakukan beberapa operasi, yang biasanya meliputi:
- mengeksekusi komputasi
- mengeksekusi logika Python
- mewujudkan data dalam penyimpanan platform untuk:
- digunakan dalam logika Python
- menerapkan toleransi kesalahan
dan mungkin menghasilkan beberapa keluaran, yang biasanya meliputi:
- merilis data ke penyimpanan pelanggan sebagai metrik
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:
- memiliki penyimpanan pelanggan
- meluncurkan program
tapi mungkin:
- menulis programnya
- memenuhi setiap kemampuan platform
Platform
Platform biasanya:
- memiliki penyimpanan platform
- komponen khusus platform penulis
tapi mungkin:
- menulis programnya
- memenuhi setiap kemampuan perpustakaan
Perpustakaan
Sebuah perpustakaan biasanya:
- komponen platform-agnostik penulis
- perhitungan penulis
- logika program penulis
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?