Además de definir cálculos, TFF proporciona herramientas para ejecutarlos. Mientras que el enfoque principal está en las simulaciones, las interfaces y las herramientas que ofrecemos son más generales. Este documento describe las opciones de implementación en varios tipos de plataforma.
Descripción general
Hay dos modos principales de implementación para los cálculos TFF:
Backends nativas. Vamos a hacer referencia a un backend como nativo si es capaz de interpretar la estructura sintáctica de los cálculos de FFT como se define en
computation.proto
. Un backend nativo no necesariamente tiene que admitir todas las construcciones o elementos intrínsecos del lenguaje. Backends nativos deben poner en práctica una de las interfaces estándar TFF ejecutor, comotff.framework.Executor
para el consumo por código Python, o la versión independiente del lenguaje de la misma se definen enexecutor.proto
expuesto como un punto final GRPC.Los backends nativos que admiten las interfaces anteriores se pueden usar de forma interactiva en lugar del tiempo de ejecución de referencia predeterminado, por ejemplo, para ejecutar cuadernos o scripts de experimentos. La mayoría de los backends nativos funcionarán en el modo interpretado, es decir, van a procesar la definición de cálculo tal como se define, y ejecutarlo de forma incremental, pero esto no siempre tiene que ser el caso. Un soporte nativo también puede transformar (compilación, o JIT-compilación) una parte del cálculo para un mejor rendimiento, o para simplificar su estructura. Un ejemplo de uso común de esto sería reducir el conjunto de operadores federados que aparecen en un cálculo, de modo que las partes del back-end aguas abajo de la transformación no tengan que estar expuestas al conjunto completo.
Backends no nativos. Backends no nativos, en contraste con los nativos, no pueden interpretar directamente la estructura de cálculo TFF, y requieren que sea convertido en una representación objetivo diferente entendido por el backend. Un ejemplo notable de dicho backend sería un clúster de Hadoop o una plataforma similar para canalizaciones de datos estáticos. Para que un cálculo para ser desplegado a tal un backend, primero debe ser transformado (o compilado). Dependiendo de la configuración, esto se puede hacer transparente para el usuario (es decir, un backend no nativo podría ser envuelto en un ejecutor estándar de interfaz tales como
tff.framework.Executor
que realiza transformaciones bajo el capó), o puede ser expuesto como una herramienta que permite al usuario convertir manualmente un cómputo, o un conjunto de cómputos, en la representación de destino apropiada entendida por la clase particular de backends. Código que los tipos de soportes específicos de backends no nativos se pueden encontrar en eltff.backends
espacio de nombres. En el momento de escribir este artículo, el único tipo de soporte de backends no nativos es una clase de sistemas capaces de ejecutar MapReduce de una sola ronda.
Servidores nativos
Más detalles próximamente.
Backends no nativos
Mapa reducido
Más detalles próximamente.