O Google anunciou o primeiro grande lançamento do TensorFlow Serving no Google I/O 2017. Noah Fiedel detalhou alguns novos recursos, além de sua visão para o projeto do futuro.
O TF Serving 1.0 inclui várias opções de lotes, um gerenciador de modelos de ciclo de vida, serviço simultâneo de múltiplas versões, suporte para subtarefas e padronização de definição de fonte de dados para armazenamento de modelos compatíveis e conectáveis.
O contexto de Fiedel para a conversa foi o de um mundo em que a ciência e a engenharia de dados são ainda muitas vezes nebulosas, nos colocando em 10 a 20 anos atrás do estado da arte na engenharia de software, especificamente em torno de requisitos críticos não funcionais, como portabilidade, reprodutibilidade e resiliência. Mas, uma vez que a reprodutibilidade e a portabilidade dos modelos, a sua configuração e os metadados ainda estão sendo padronizados, algumas das melhores práticas que surgiram na engenharia de software ainda são uma maneira de ser um padrão da indústria onipresente para a aprendizagem de máquinas.
O TensorFlow Serving espera abordar alguns desses desafios e oferecer padronização como parte do seu modelo de plataforma e ser a principal plataforma no futuro.
Um dos principais desafios relatado por Fiedel na comunidade TensorFlow é o de como mover um modelo a partir de um disco em algum lugar para torná-lo acessível a serviços e fazendo-o como parte de um pipeline reprodutível. O TF Serving permite aos usuários colocar de forma original varias versões de um modelo para serem executadas simultaneamente, e reverter as mudanças sem ferramentas CI/CD autônomas adicionais.
O TensorFlow Serving 1.0 será alinhado em pequenas versões com todas as versões do TensorFlow, além de fornecer um pacote debian disponível através do apt-get.
O TensorFlow Serving possui três componentes principais. Há um conjunto de bibliotecas C++ que sustentam o carregamento de modelos de fluxo de tensão com um formato padronizado que salvam e exportam. O segundo componente é o núcleo gerado em uma configuração genérica que oferece uma interoperabilidade de nível com outras plataformas ML, não sendo este tópico abordado em detalhes. O pacote principal da plataforma inclui binários executáveis com configurações e práticas padrão de melhor palpite, bem como um serviço de hospedagem. Por fim, o TF Serving oferece uma opção comercial através do Cloud ML.
Os pedidos de baixa latência e os tempos de resposta, bem como a alocação de tempo de computação mais otimizada tornaram-se o foco para a plataforma principal. O TF Serving implementa a solicitação de processamento de mini-lote para menos chamadas de ida e volta, e alocação de recursos mais eficiente usando pools de threads separados para GPU/TPU e tarefas ligadas a CPU.
As bibliotecas são otimizadas para alto desempenho, usando o padrão de atualização de leitura e cópia, o carregamento rápido do modelo na inicialização do servidor e os ponteiros contados de referência para fornecer tolerância a falhas para acompanhar onde o gráfico de um modelo está executando em determinado momento
O carregamento dos modelos e o serviço de inferência não são bloqueados e são manipulados através de um conjuntos de threads separados. O mini-batching com filas é um conceito importante para TF Serving. Os pedidos assíncronos são agrupados em miniatura e passados para uma única sessão TF que coordena, com um gerente, o processamento das solicitações. Os pedidos de inferência são agrupados em miniatura para reduzir as latências. O manuseio de solicitação é implementado usando o ServableHandle, um ponteiro para solicitações específicas do cliente.
O formato do modelo SessionBundle é obsoleto em favor de um novo formato SavedModel. O TF Serving 1.0 introduziu o conceito de um MetaGraph, que contém informações sobre a arquitetura do processador em que um modelo treinado para ser executado. O MetaGraph contém modelos de vocabulários, embutidos em pesos de treinamento e outros parâmetros para modelos. Os objetos SavedModel são compostos de MetaGraphs e são projetados para serem artefatos portáteis e acessíveis. A abstração do Savedmodel pode ser usada para treinamento, atendimento, avaliação off-line e são executáveis com uma nova interface de linha de comando. SignatureDef é um componente do SavedModel que ajuda a anotar e caracterizar as camadas dentro de um gráfico.
As API's são fornecidas para uma biblioteca de fonte de dados e um SourceAdapter para tipos de modelo. O Source Module emite um carregador para modelos guardados e estima os requisitos da RAM. A fonte api emite metadados para um módulo Gerenciador que carrega os dados para um modelo, bem como o próprio modelo. Fiedel disse que o novo ServerCore reduziu as linhas de código (LOC) de 300 para 10, encapsulando padrões de código comuns em um arquivo de configuração usado para injeção.
Novas API's de inferências fornecem vários componentes reutilizáveis para casos de uso comum. Predict para a configuração e o serviço de previsão, Regress para modelo de regressão, Classify para classificação de algoritmos, e Multi-inference para combinar Regress e Classify em um uso de api em conjunto.
A inferência de multi-headed também é suportada. A inferência multi-headed é um tópico de pesquisa emergente na aprendizagem de máquinas que tenta abordar a presença de solicitações idênticas concorrentes. A inferência de multi-headed pode potencialmente ser usada para aumentar, ainda mais, a eficiência dos mini-lotes, removendo o que é reconhecido como solicitação errônea ou duplicada. A resiliência contra fontes de atividades errôneas que geram um volume de entrada grande e caro pode ajudar a evitar efeitos de cascata negativos sobre o consumo de recursos e qualidade de dados.
O Google recomenda o uso de binários estáticos sintonizados para os clientes no GCP que desejam aproveitar as configurações padrão da melhor previsão para as funções gRPC. O TF Serving 1.0 também fornece imagens do Docker, bem como um tutorial do K8 para começar.