Deployment

Oltre a definire i calcoli, TFF fornisce gli strumenti per eseguirli. Mentre l'attenzione principale è rivolta alle simulazioni, le interfacce e gli strumenti che forniamo sono più generali. Questo documento delinea le opzioni per la distribuzione su vari tipi di piattaforma.

Panoramica

Esistono due modalità principali di distribuzione per i calcoli TFF:

  • Backend nativi . Faremo riferimento a un backend come nativo se è in grado di interpretare la struttura sintattica dei calcoli TFF come definito in computation.proto . Un backend nativo non deve necessariamente supportare tutti i costrutti o gli elementi intrinseci del linguaggio. I backend nativi devono implementare una delle interfacce dell'esecutore TFF standard, ad esempio tff.framework.Executor per l'utilizzo da parte del codice Python o la sua versione indipendente dal linguaggio definita in executor.proto esposta come endpoint gRPC.

    I backend nativi che supportano le interfacce di cui sopra possono essere utilizzati in modo interattivo al posto del runtime di riferimento predefinito, ad esempio per eseguire notebook o script di esperimenti. La maggior parte dei backend nativi funzioneranno in modalità interpretata , ovvero elaboreranno la definizione di calcolo così come è definita e la eseguiranno in modo incrementale, ma non deve essere sempre così. Un backend nativo può anche trasformare ( compilare , o JIT-compile) una parte del calcolo per migliorare le prestazioni o per semplificarne la struttura. Un esempio di utilizzo comune di questo potrebbe essere quello di ridurre l'insieme di operatori federati che compaiono in un calcolo, in modo che parti del backend a valle della trasformazione non debbano essere esposte all'intero set.

  • Backend non nativi . I backend non nativi, a differenza di quelli nativi, non possono interpretare direttamente la struttura di calcolo del TFF e richiedono che venga convertita in una diversa rappresentazione target compresa dal backend. Un esempio notevole di tale backend sarebbe un cluster Hadoop o una piattaforma simile per pipeline di dati statici. Affinché un calcolo possa essere distribuito su tale backend, deve prima essere trasformato (o compilato ). A seconda della configurazione, ciò può essere fatto in modo trasparente per l'utente (ovvero, un backend non nativo potrebbe essere racchiuso in un'interfaccia di esecutore standard come tff.framework.Executor che esegue trasformazioni dietro le quinte), oppure può essere esposto come uno strumento che consente all'utente di convertire manualmente un calcolo, o un insieme di calcoli, nella rappresentazione target appropriata compresa dalla particolare classe di backend. Il codice che supporta tipi specifici di backend non nativi può essere trovato nello spazio dei nomi tff.backends . Al momento in cui scrivo, l'unico tipo di supporto di backend non nativi è una classe di sistemi in grado di eseguire MapReduce a round singolo.

Backend nativi

Maggiori dettagli in arrivo.

Backend non nativi

Riduci mappa

Maggiori dettagli in arrivo.