Déploiement

En plus de définir les calculs, TFF fournit des outils pour les exécuter. Alors que l’accent est mis principalement sur les simulations, les interfaces et outils que nous proposons sont plus généraux. Ce document décrit les options de déploiement sur différents types de plates-formes.

Aperçu

Il existe deux principaux modes de déploiement pour les calculs TFF :

  • Backends natifs . Nous allons qualifier un backend de natif s'il est capable d'interpréter la structure syntaxique des calculs TFF telle que définie dans computation.proto . Un backend natif ne doit pas nécessairement prendre en charge toutes les constructions ou intrinsèques du langage. Les backends natifs doivent implémenter l'une des interfaces d'exécution TFF standard, telles que tff.framework.Executor pour la consommation par le code Python, ou la version indépendante du langage définie dans executor.proto exposée en tant que point de terminaison gRPC.

    Les backends natifs prenant en charge les interfaces ci-dessus peuvent être utilisés de manière interactive à la place du runtime de référence par défaut, par exemple pour exécuter des blocs-notes ou des scripts d'expérimentation. La plupart des backends natifs fonctionneront en mode interprété , c'est-à-dire qu'ils traiteront la définition de calcul telle qu'elle est définie et l'exécuteront de manière incrémentielle, mais cela ne doit pas toujours être le cas. Un backend natif peut également transformer ( compiler , ou JIT-compile) une partie du calcul pour de meilleures performances, ou pour simplifier sa structure. Un exemple d'utilisation courante consisterait à réduire l'ensemble des opérateurs fédérés qui apparaissent dans un calcul, de sorte que des parties du backend en aval de la transformation n'aient pas besoin d'être exposées à l'ensemble complet.

  • Backends non natifs . Les backends non natifs, contrairement aux backends natifs, ne peuvent pas interpréter directement la structure de calcul TFF et nécessitent qu'elle soit convertie en une représentation cible différente comprise par le backend. Un exemple notable d'un tel backend serait un cluster Hadoop ou une plate-forme similaire pour les pipelines de données statiques. Pour qu'un calcul soit déployé sur un tel backend, il doit d'abord être transformé (ou compilé ). En fonction de la configuration, cela peut être fait de manière transparente pour l'utilisateur (c'est-à-dire qu'un backend non natif peut être enveloppé dans une interface d'exécution standard telle que tff.framework.Executor qui effectue des transformations sous le capot), ou il peut être exposé comme un outil qui permet à l'utilisateur de convertir manuellement un calcul, ou un ensemble de calculs, en la représentation cible appropriée comprise par la classe particulière de backends. Le code qui prend en charge des types spécifiques de backends non natifs peut être trouvé dans l'espace de noms tff.backends . Au moment d'écrire ces lignes, le seul type de support de backends non natifs est une classe de systèmes capables d'exécuter MapReduce en un seul tour.

Backends natifs

Plus de détails à venir.

Backends non natifs

CarteRéduire

Plus de détails à venir.