Cette documentation s'adresse à toute personne intéressée par une présentation générale des concepts des programmes fédérés. Cela suppose une connaissance de TensorFlow Federated, notamment de son système de types.
Pour plus d’informations sur le programme fédéré, voir :
Qu'est-ce qu'un programme fédéré ?
Un programme fédéré est un programme qui exécute des calculs et d'autres logiques de traitement dans un environnement fédéré.
Plus spécifiquement un programme fédéré :
- exécute des calculs
- utiliser la logique du programme
- avec des composants spécifiques à la plateforme
- et composants indépendants de la plate-forme
- paramètres donnés définis par le programme
- et paramètres définis par le client
- lorsque le client exécute le programme
- et peut matérialiser des données dans le stockage de la plateforme pour :
- utiliser dans la logique Python
- mettre en œuvre la tolérance aux pannes
- et peut divulguer des données vers le stockage du client
La définition de ces concepts et abstractions permet de décrire les relations entre les composants d'un programme fédéré et permet à ces composants d'être détenus et créés par différents rôles . Ce découplage permet aux développeurs de composer un programme fédéré à l'aide de composants partagés avec d'autres programmes fédérés, ce qui signifie généralement exécuter la même logique de programme sur de nombreuses plates-formes différentes.
La bibliothèque de programmes fédérés de TFF ( tff.program ) définit les abstractions requises pour créer un programme fédéré et fournit des composants indépendants de la plate-forme .
Composants
<!--#include file="components.dot"-->
Les composants de la bibliothèque de programmes fédérés de TFF sont conçus de manière à pouvoir appartenir et être créés par différents rôles .
Programme
Le programme est un binaire Python qui :
- définit les paramètres (par exemple les drapeaux)
- construit des composants spécifiques à la plate-forme et des composants indépendants de la plate-forme
- exécute des calculs en utilisant la logique du programme dans un contexte fédéré
Par exemple:
# 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,
)
)
Paramètres
Les paramètres sont les entrées du programme , ces entrées peuvent être définies par le client , si elles sont exposées sous forme d'indicateurs, ou elles peuvent être définies par le programme. Dans l'exemple ci-dessus, output_dir
est un paramètre défini par le client , et total_rounds
et num_clients
sont des paramètres définis par le programme.
Composants spécifiques à la plate-forme
Les composants spécifiques à la plateforme sont les composants fournis par une plateforme implémentant les interfaces abstraites définies par la bibliothèque de programmes fédérés de TFF.
Composants indépendants de la plate-forme
Les composants indépendants de la plate-forme sont les composants fournis par une bibliothèque (par exemple TFF) implémentant les interfaces abstraites définies par la bibliothèque de programmes fédérés de TFF.
Calculs
Les calculs sont des implémentations de l'interface abstraite tff.Computation
.
Par exemple, dans la plateforme TFF, vous pouvez utiliser les décorateurs tff.tensorflow.computation
ou tff.federated_computation
pour créer un tff.framework.ConcreteComputation
:
Voir durée de vie d'un calcul pour plus d'informations.
Logique du programme
La logique du programme est une fonction Python qui prend en entrée :
- paramètres définis par le client et le programme
- composants spécifiques à la plate-forme
- composants indépendants de la plate-forme
- calculs
et effectue certaines opérations, qui comprennent généralement :
- exécuter des calculs
- exécuter la logique Python
- matérialiser les données dans le stockage de la plateforme pour :
- utiliser dans la logique Python
- mettre en œuvre la tolérance aux pannes
et peut produire certains résultats, qui comprennent généralement :
- publier des données sur le stockage du client en tant que métriques
Par exemple:
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)
Rôles
Il existe trois rôles qu'il est utile de définir lors de l'examen des programmes fédérés : le client , la plateforme et la bibliothèque . Chacun de ces rôles possède et crée certains des composants utilisés pour créer un programme fédéré. Cependant, il est possible qu’une seule entité ou un seul groupe remplisse plusieurs rôles.
Client
Le client :
- possède le stockage du client
- lance le programme
mais peut :
- créer le programme
- remplir toutes les capacités de la plateforme
Plate-forme
La plateforme généralement :
- possède une plate-forme de stockage
- auteurs de composants spécifiques à la plate-forme
mais peut :
- créer le programme
- remplir toutes les capacités de la bibliothèque
Bibliothèque
Une bibliothèque généralement :
- auteurs de composants indépendants de la plate-forme
- calculs des auteurs
- logique du programme des auteurs
Concepts
<!--#include file="concepts.dot"-->
Il est utile de définir quelques concepts lors de l'examen des programmes fédérés.
Stockage client
Le stockage client est un stockage auquel le client a accès en lecture et en écriture et auquel la plateforme a accès en écriture.
Stockage de plate-forme
Le stockage de plate-forme est un stockage auquel seule la plate-forme a accès en lecture et en écriture.
Libérer
La publication d'une valeur rend la valeur disponible pour le stockage du client (par exemple, publier la valeur sur un tableau de bord, enregistrer la valeur ou écrire la valeur sur le disque).
Se concrétiser
La matérialisation d' une référence de valeur rend la valeur référencée disponible au programme . Il est souvent nécessaire de matérialiser une référence de valeur pour libérer la valeur ou pour rendre la logique du programme tolérante aux pannes .
Tolérance aux pannes
La tolérance aux pannes est la capacité de la logique du programme à se remettre d'un échec lors de l'exécution d'un calcul. Par exemple, si vous entraînez avec succès les 90 premiers tours sur 100 et que vous rencontrez ensuite un échec, la logique du programme est-elle capable de reprendre l'entraînement à partir du tour 91 ou l'entraînement doit-il être redémarré au tour 1 ?