Junte-se à comunidade SIG TFX-Addons e ajude a tornar o TFX ainda melhor!
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Arquitetura

O TensorFlow Serving é um sistema de serviço flexível e de alto desempenho para modelos de aprendizado de máquina, projetado para ambientes de produção. O TensorFlow Serving facilita a implantação de novos algoritmos e experimentos, mantendo a mesma arquitetura de servidor e APIs. O TensorFlow Serving fornece integração imediata com os modelos do TensorFlow, mas pode ser facilmente estendido para atender a outros tipos de modelos.

Conceitos chave

Para entender a arquitetura do TensorFlow Serving, você precisa entender os seguintes conceitos-chave:

Servables

Os serviços são a abstração central no TensorFlow Serving. Servables são os objetos subjacentes que os clientes usam para realizar cálculos (por exemplo, uma pesquisa ou inferência).

O tamanho e a granularidade de um servidor são flexíveis. Um único Servable pode incluir qualquer coisa, desde um único fragmento de uma tabela de pesquisa a um único modelo a uma tupla de modelos de inferência. Os servidores podem ser de qualquer tipo e interface, permitindo flexibilidade e melhorias futuras, como:

  • resultados de streaming
  • APIs experimentais
  • modos assíncronos de operação

Os serviços não gerenciam seu próprio ciclo de vida.

Servables típicos incluem o seguinte:

  • um TensorFlow SavedModelBundle ( tensorflow::Session )
  • uma tabela de pesquisa para pesquisas de incorporação ou vocabulário

Versões que podem ser veiculadas

O TensorFlow Serving pode lidar com uma ou mais versões de um serviço durante a vida útil de uma única instância do servidor. Isso permite que novas configurações de algoritmo, pesos e outros dados sejam carregados ao longo do tempo. As versões permitem que mais de uma versão de um serviço seja carregada simultaneamente, oferecendo suporte para implementação gradual e experimentação. No momento do atendimento, os clientes podem solicitar a versão mais recente ou um id de versão específico, para um determinado modelo.

Streams que podem ser veiculados

Um fluxo de serviço é a sequência de versões de um serviço, classificado por números de versão crescentes.

Modelos

O TensorFlow Serving representa um modelo como um ou mais servables. Um modelo aprendido por máquina pode incluir um ou mais algoritmos (incluindo pesos aprendidos) e tabelas de pesquisa ou incorporação.

Você pode representar um modelo composto da seguinte forma:

  • vários servables independentes
  • único composto servível

Um serviço também pode corresponder a uma fração de um modelo. Por exemplo, uma grande tabela de pesquisa pode ser fragmentada em muitas instâncias do TensorFlow Serving.

Carregadores

Os carregadores gerenciam o ciclo de vida de um serviço. A API Loader permite uma infraestrutura comum independente de algoritmos de aprendizagem específicos, dados ou casos de uso de produtos envolvidos. Especificamente, os carregadores padronizam as APIs para carregar e descarregar um servable.

Origens

Fontes são módulos de plug-ins que localizam e fornecem serviços. Cada fonte fornece zero ou mais fluxos de serviço. Para cada fluxo de serviço, um Source fornece uma instância do Loader para cada versão que disponibiliza para carregamento. (Na verdade, um Source é encadeado com zero ou mais SourceAdapters, e o último item da cadeia emite os Loaders.)

A interface do TensorFlow Serving para origens pode descobrir servables de sistemas de armazenamento arbitrários. O TensorFlow Serving inclui implementações de fontes de referência comuns. Por exemplo, as fontes podem acessar mecanismos como RPC e podem pesquisar um sistema de arquivos.

As origens podem manter o estado compartilhado entre vários servables ou versões. Isso é útil para serviços que usam atualizações delta (diff) entre as versões.

Versões Aspiradas

As versões aspiradas representam o conjunto de versões de serviço que devem ser carregadas e prontas. As origens comunicam esse conjunto de versões de serviço para um único fluxo de serviço por vez. Quando uma fonte fornece uma nova lista de versões aspiradas ao gerenciador, ela substitui a lista anterior para aquele fluxo de serviço. O gerenciador descarrega todas as versões carregadas anteriormente que não aparecem mais na lista.

Consulte o tutorial avançado para ver como o carregamento de versão funciona na prática.

Gerentes

Os gerentes lidam com todo o ciclo de vida dos Servables, incluindo:

  • carregando Servables
  • servindo serviços
  • descarregando Servables

Os gerentes ouvem as fontes e rastreiam todas as versões. O gerente tenta atender às solicitações das fontes, mas pode se recusar a carregar uma versão aspirada se, digamos, os recursos necessários não estiverem disponíveis. Os gerentes também podem adiar uma "descarga". Por exemplo, um gerente pode esperar para descarregar até que uma versão mais recente termine de carregar, com base em uma política para garantir que pelo menos uma versão seja carregada o tempo todo.

Os TensorFlow Serving Managers fornecem uma interface simples e estreita - GetServableHandle() - para que os clientes acessem as instâncias de serviço carregadas.

Testemunho

Usando o TensorFlow Serving APis, o TensorFlow Serving Core gerencia os seguintes aspectos dos servables:

  • ciclo da vida
  • Métricas

O TensorFlow Serving Core trata os servables e carregadores como objetos opacos.

Vida de um Serviço

diagrama de arquitetura de serviço tf

Em geral:

  1. As fontes criam carregadores para versões de serviço.
  2. Os carregadores são enviados como versões aspiradas ao gerente, que os carrega e os atende às solicitações do cliente.

Em mais detalhes:

  1. Um plugin de origem cria um carregador para uma versão específica. O Loader contém todos os metadados necessários para carregar o Servable.
  2. A Fonte usa um retorno de chamada para notificar o Gerente da Versão Aspirada.
  3. O gerenciador aplica a Política de Versão configurada para determinar a próxima ação a ser executada, que pode ser descarregar uma versão carregada anteriormente ou carregar a nova versão.
  4. Se o gerenciador determinar que é seguro, ele fornecerá ao carregador os recursos necessários e instruirá o carregador a carregar a nova versão.
  5. Os clientes solicitam o Serviço ao Gerente, especificando uma versão explicitamente ou apenas solicitando a versão mais recente. O gerente retorna um identificador para o servidor.

Por exemplo, digamos que uma Fonte represente um gráfico do TensorFlow com pesos de modelo atualizados com frequência. Os pesos são armazenados em um arquivo no disco.

  1. O Source detecta uma nova versão dos pesos do modelo. Ele cria um Loader que contém um ponteiro para os dados do modelo no disco.
  2. A fonte notifica o gerente dinâmico da versão aspirada.
  3. O Dynamic Manager aplica a Política de Versão e decide carregar a nova versão.
  4. O Dynamic Manager informa ao Loader que há memória suficiente. O Loader instancia o gráfico do TensorFlow com os novos pesos.
  5. Um cliente solicita um identificador para a versão mais recente do modelo e o Dynamic Manager retorna um identificador para a nova versão do Servable.

Extensibilidade

O TensorFlow Serving fornece vários pontos de extensão onde você pode adicionar novas funcionalidades.

Política de Versão

Políticas de versão especificam a sequência de carregamento e descarregamento de versão em um único fluxo de serviço.

O TensorFlow Serving inclui duas políticas que acomodam a maioria dos casos de uso conhecidos. São elas a Política de Preservação de Disponibilidade (evite deixar zero versões carregadas; normalmente carregue uma nova versão antes de descarregar uma antiga) e a Política de Preservação de Recursos (evite ter duas versões carregadas simultaneamente, exigindo assim o dobro de recursos; descarregue uma versão antiga antes de carregar um novo). Para o uso simples do TensorFlow Serving, onde a disponibilidade de serviço de um modelo é importante e os custos de recursos baixos, a Política de Preservação de Disponibilidade garantirá que a nova versão seja carregada e pronta antes de descarregar a antiga. Para uso sofisticado do TensorFlow Serving, por exemplo, gerenciamento de versões em várias instâncias de servidor, a Política de Preservação de Recursos requer o mínimo de recursos (sem buffer extra para carregar novas versões).

Fonte

Novas fontes podem oferecer suporte a novos sistemas de arquivos, ofertas de nuvem e back-ends de algoritmos. O TensorFlow Serving fornece alguns blocos de construção comuns para tornar mais fácil e rápido a criação de novas fontes. Por exemplo, o TensorFlow Serving inclui um utilitário para envolver o comportamento de pesquisa em uma fonte simples. As origens estão intimamente relacionadas aos Loaders para algoritmos específicos e serviços de hospedagem de dados.

Consulte o documento Fonte personalizada para mais informações sobre como criar uma fonte personalizada.

Carregadores

Os carregadores são o ponto de extensão para adicionar back-ends de algoritmos e dados. O TensorFlow é um desses back-end de algoritmo. Por exemplo, você implementaria um novo carregador para carregar, fornecer acesso e descarregar uma instância de um novo tipo de modelo de aprendizado de máquina que pode ser servido. Prevemos a criação de carregadores para tabelas de pesquisa e algoritmos adicionais.

Consulte o documento Serviço personalizado para saber como criar um serviço personalizado.

Batcher

Colocar em lote várias solicitações em uma única solicitação pode reduzir significativamente o custo de realização de inferência, especialmente na presença de aceleradores de hardware, como GPUs. O TensorFlow Serving inclui um widget de envio em lote de solicitações que permite aos clientes agrupar facilmente suas inferências específicas de tipo entre solicitações em solicitações em lote que os sistemas de algoritmo podem processar com mais eficiência. Consulte o Guia de lote para obter mais informações.