Além de definir cálculos, o TFF fornece ferramentas para executá-los. Considerando que o foco principal são as simulações, as interfaces e ferramentas que oferecemos são mais gerais. Este documento descreve as opções de implantação em vários tipos de plataforma.
Visão geral
Existem dois modos principais de implantação para cálculos TFF:
Backends nativa. Nós estamos indo para se referir a um backend como nativo se for capaz de interpretar a estrutura sintática de computações TFF conforme definido no
computation.proto
. Um back-end nativo não precisa necessariamente suportar todas as construções ou intrínsecos de linguagem. Backends nativas deve implementar uma das interfaces padrão TFF executor, comotff.framework.Executor
para consumo por código Python, ou a versão independente de linguagem dele definidos noexecutor.proto
exposto como um endpoint gRPC.Back-ends nativos que suportam as interfaces acima podem ser usados interativamente em vez do tempo de execução de referência padrão, por exemplo, para executar notebooks ou scripts de experimentos. A maioria dos backends nativos irá operar no modo interpretado, isto é, eles vão processar a definição de computação como é definido, e executá-lo de forma incremental, mas isso nem sempre tem que ser o caso. A infra-estrutura nativa também pode transformar (compilação, ou JIT-compilação) uma parte da computação para melhor desempenho, ou para simplificar a sua estrutura. Um exemplo de uso comum disso seria reduzir o conjunto de operadores federados que aparecem em um cálculo, de forma que partes do dowstream de back-end da transformação não precisem ser expostas ao conjunto completo.
Backends não-nativos. Infra- estruturas não-nativo, em contraste com os nativos, não é possível interpretar directamente a estrutura de computação da TFF, e obrigá-la a ser convertido em uma representação alvo diferente compreendido pela infra-estrutura. Um exemplo notável de tal back-end seria um cluster Hadoop ou uma plataforma semelhante para pipelines de dados estáticos. Para que uma computação a ser implantado para tal uma infra-estrutura, ele deve primeiro ser transformado (ou compilada). Dependendo da configuração, isso pode ser feito de forma transparente para o utilizador (ou seja, uma parte posterior não nativo pode ser envolto em um executor padrão de interface, tais como
tff.framework.Executor
que executa transformações sob a capa), ou pode ser exposta como uma ferramenta que permite ao usuário converter manualmente um cálculo, ou um conjunto de cálculos, na representação de destino apropriada entendida pela classe particular de back-ends. Código que tipos de apoios específicos de backends não-nativas podem ser encontradas notff.backends
namespace. No momento em que este artigo foi escrito, o único tipo de suporte de back-ends não nativos é uma classe de sistemas capaz de executar MapReduce de rodada única.
Back-ends nativos
Mais detalhes em breve.
Back-ends não nativos
MapReduce
Mais detalhes em breve.