Desdobramento, desenvolvimento

Além de definir cálculos, o TFF fornece ferramentas para executá-los. Embora o foco principal esteja nas simulações, as interfaces e ferramentas que fornecemos 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:

  • Back-ends nativos . Iremos nos referir a um backend como nativo se ele for capaz de interpretar a estrutura sintática dos cálculos TFF conforme definido em computation.proto . Um back-end nativo não precisa necessariamente oferecer suporte a todas as construções ou intrínsecos da linguagem. Os back-ends nativos devem implementar uma das interfaces de executor TFF padrão, como tff.framework.Executor para consumo por código Python ou a versão independente de linguagem definida em executor.proto exposta como um endpoint gRPC.

    Back-ends nativos que suportam as interfaces acima podem ser usados ​​interativamente no lugar 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ão operar no modo interpretado , ou seja, eles irão processar a definição de computação conforme ela é definida, e executá-la de forma incremental, mas isso nem sempre precisa ser o caso. Um back-end nativo também pode transformar ( compilar ou compilar JIT) uma parte da computação para melhor desempenho ou para simplificar sua estrutura. Um exemplo de uso comum disso seria reduzir o conjunto de operadores federados que aparecem em uma computação, de modo que partes do fluxo de back-end da transformação não precisem ser expostas ao conjunto completo.

  • Back-ends não nativos . Os backends não nativos, em contraste com os nativos, não podem interpretar diretamente a estrutura de computação do TFF e exigem que ela seja convertida em uma representação de destino diferente compreendida pelo backend. 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 seja implantada em tal back-end, ela deve primeiro ser transformada (ou compilada ). Dependendo da configuração, isso pode ser feito de forma transparente para o usuário (ou seja, um back-end não nativo pode ser encapsulado em uma interface de executor padrão, como tff.framework.Executor , que executa transformações nos bastidores), ou pode ser exposto 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 compreendida pela classe específica de back-ends. O código que oferece suporte a tipos específicos de back-ends não nativos pode ser encontrado no namespace tff.backends . No momento em que este livro foi escrito, o único tipo de suporte de back-ends não nativos era uma classe de sistemas capaz de executar MapReduce de rodada única.

Back-ends nativos

Mais detalhes em breve.

Back-ends não nativos

MapaReduzir

Mais detalhes em breve.