Despliegue

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, como tff.framework.Executor para el consumo por código Python, o la versión independiente del lenguaje de la misma se definen en executor.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 el tff.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.