Guia do usuário do TFX

Introdução

O TFX é uma plataforma de machine learning em escala de produção do Google com base no TensorFlow. Ele fornece um framework de configuração e bibliotecas compartilhadas para integrar componentes comuns necessários para definir, iniciar e monitorar seu sistema de machine learning.

Instalação

Python PyPI

pip install tensorflow
pip install tfx

Principais conceitos

Pipelines do TFX

Um pipeline do TFX define um fluxo de dados por meio de vários componentes, com o objetivo de implementar uma tarefa específica de ML. Por exemplo, criar e implantar um modelo de regressão para dados específicos. Os componentes do pipeline são criados com base nas bibliotecas do TFX. O resultado de um pipeline é um destino de implantação do TFX e/ou serviço de uma solicitação de inferência.

Artefatos

Em um pipeline, um artefato é uma unidade de dados enviada entre os componentes. Geralmente, os componentes têm pelo menos um artefato de entrada e um artefato de saída. Todos os artefatos precisam ter metadados associados, que definem o tipo e as propriedades do artefato. Os artefatos precisam ser fortemente identificados com um tipo de artefato registrado no armazenamento de metadados de ML. Os conceitos de artefato e tipo de artefato se originam do modelo de dados que os metadados de ML definem, conforme descrito neste documento. O TFX define e implementa a própria ontologia de tipos de artefatos para realizar a funcionalidade de nível superior. A partir do TFX 0.15, 11 tipos de artefatos conhecidos são definidos e usados em todo o sistema do TFX.

Um tipo de artefato tem um nome exclusivo e um esquema de propriedades das instâncias que possui. O TFX utiliza o tipo de artefato da mesma forma que o artefato é usado pelos componentes no pipeline, mas não necessariamente para determinar conteúdo físico do artefato em um sistema de arquivos.

Por exemplo, o tipo de artefato Exemplo pode representar exemplos materializados no TFRecord de buffer de protocolo tensorflow::Example, CSV, JSON ou qualquer outro formato físico. Independentemente disso, a maneira como os exemplos são usados em um pipeline é exatamente a mesma: ser analisado para gerar estatísticas, validado em relação ao esquema esperado, pré-processado antes do treinamento e fornecido a um treinador para treinar modelos. Da mesma forma, o tipo de artefato Modelo pode representar objetos de modelo treinados exportados em vários formatos físicos, como TensorFlow SavedModel, ONNX, PMML ou PKL (de vários tipos de objetos de modelos em Python). Em qualquer caso, os modelos devem sempre ser avaliados, analisados e implantados para a exibição em pipelines.

OBSERVAÇÃO: a partir do TFX 0.15, as implementações de componentes do TFX consideram que o artefato Exemplos é o buffer de protocolo tensorflow::Example no formato TFRecord compactado com gzip. Da mesma forma, presume-se que artefato Modelo é o TensorFlow SavedModel. Versões futuras do TFX podem ampliar esses tipos de artefatos para oferecer suporte a mais variantes.

Para diferenciar essas possíveis variantes do mesmo tipo de artefato, os metadados de ML definem um conjunto de propriedades de artefato. Por exemplo, uma dessas propriedades de artefato para o artefato Exemplos pode ser formato, e os valores relacionados podem ser TFRecord, JSON, CSV e assim por diante. Os artefatos do tipo Exemplos sempre podem ser passados para um componente desenvolvido para usar Exemplos como um artefato de entrada (por exemplo, um treinador). No entanto, a implementação real do componente de consumo pode ajustar o comportamento em resposta a um valor específico da propriedade de formato ou simplesmente gerar um erro de tempo de execução se não tiver uma implementação para processar o formato específico dos exemplos.

Em resumo, os tipos de artefato definem a ontologia de artefatos em todo o sistema de pipelines do TFX, enquanto as propriedades de artefatos definem a ontologia específica de um tipo de artefato. Os usuários do sistema de pipelines podem optar por ampliar essa ontologia localmente para os aplicativos de pipeline, definindo e preenchendo novas propriedades personalizadas. Os usuários também podem ampliar a ontologia globalmente para o sistema como um todo, introduzindo novos tipos de artefatos e/ou modificando propriedades de tipo predefinidas. Nesse caso, essa extensão contribuiria para o repositório principal do sistema de pipelines (o repositório TFX).

Componentes do pipeline do TFX

Um pipeline do TFX é uma sequência de componentes que implementa um pipeline de ML especificamente projetado para tarefas de machine learning escalonáveis e de alto desempenho. Isso inclui a modelagem, o treinamento, a exibição de inferências e o gerenciamento de implantação em destinos on-line, móveis e JavaScript.

Normalmente, um pipeline do TFX inclui os seguintes componentes:

  • ExampleGen é o componente de entrada inicial de um pipeline que processa e, opcionalmente, divide o conjunto de dados de entrada.

  • StatisticsGen calcula as estatísticas do conjunto de dados.

  • SchemaGen examina as estatísticas e cria um esquema de dados.

  • ExampleValidator procura anomalias e valores ausentes no conjunto de dados.

  • Transform realiza a engenharia de atributos no conjunto de dados.

  • Trainer treina o modelo.

  • Evaluator realiza uma análise profunda dos resultados do treinamento e ajuda a validar os modelos exportados, garantindo que eles sejam bons o suficiente para serem enviados para produção.

  • Pusher implanta o modelo em uma infraestrutura de exibição.

Este diagrama ilustra o fluxo de dados entre os componentes:

Fluxo de componentes

Anatomia de um componente

Os componentes do TFX têm três partes principais:

  • Driver
  • Executor
  • Editor

Anatomia do componente

Driver e editor

O driver fornece metadados ao executor consultando o repositório de metadados, enquanto o editor aceita os resultados do executor e os armazena em metadados. Como desenvolvedor, você normalmente não precisará interagir diretamente com o driver e o editor, mas as mensagens registradas por eles podem ser úteis durante a depuração. Consulte Solução de problemas.

Executor

O executor é onde um componente realiza o processamento. Como desenvolvedor, você escreve código que é executado no executor, com base nos requisitos das classes que implementam o tipo de componente com o que você está trabalhando. Por exemplo, ao trabalhar em um componente Transform, você precisará desenvolver um preprocessing_fn.

Bibliotecas do TFX

O TFX inclui bibliotecas e componentes de pipeline. Este diagrama ilustra as relações entre bibliotecas do TFX e componentes de pipeline:

Bibliotecas e componentes

O TFX fornece vários pacotes Python que são as bibliotecas usadas para criar componentes de pipeline. Você usará essas bibliotecas para criar os componentes dos pipelines para que o código possa se concentrar nos aspectos exclusivos do pipeline.

As bibliotecas do TFX incluem:

  • O TensorFlow Data Validation (TFDV) é uma biblioteca para analisar e validar dados de machine learning. Ele foi projetado para ser altamente escalonável e funcionar bem com o TensorFlow e o TFX. O TFDV inclui:

    • cálculo escalonável de estatísticas resumidas de dados de treinamento e teste;
    • integração com um visualizador para distribuições e estatísticas de dados, bem como comparação facetada de pares de conjuntos de dados (atributos);

    • geração automatizada de esquema de dados para descrever expectativas sobre dados como valores, intervalos e vocabulários necessários;

    • um visualizador de esquema para ajudar você a inspecionar o esquema;

    • detecção de anomalias para identificar anomalias como recursos ausentes, valores fora do intervalo ou tipos de recursos incorretos, entre outros;

    • um visualizador de anomalias para que você possa ver quais recursos têm anomalias e saber mais para corrigi-los.

  • O TensorFlow Transform (TFT) é uma biblioteca para o pré-processamento de dados com o TensorFlow. O TensorFlow Transform é útil para dados que exigem uma passagem completa, como:

    • Normalizar um valor de entrada por média e desvio padrão.
    • Converter strings em números inteiros gerando um vocabulário em todos os valores de entrada.
    • Converter pontos flutuantes em números inteiros atribuindo-os a buckets com base na distribuição de dados observada.
  • O TensorFlow é usado para treinar modelos com o TFX. Ele ingere dados de treinamento e código de modelagem e cria um resultado SavedModel. Ele também integra um pipeline de engenharia de atributos criado pelo TensorFlow Transform para o pré-processamento de dados de entrada.

  • A TensorFlow Model Analysis (TFMA) é uma biblioteca para avaliar modelos do TensorFlow. Ela é usada com o TensorFlow para criar um EvalSavedModel, que se torna a base para sua análise. Ela permite que os usuários avaliem os modelos em grandes quantidades de dados de maneira distribuída, usando as mesmas métricas definidas no treinador. Essas métricas podem ser calculadas em diferentes partes de dados e visualizadas em notebooks do Jupyter.

  • TensorFlow Metadata (TFMD) fornece representações padrão para metadados úteis ao treinar modelos de machine learning com o TensorFlow. Os metadados podem ser produzidos manual ou automaticamente durante a análise de dados de entrada e podem ser usados para a validação, exploração e transformação de dados. Os formatos de serialização de metadados incluem:

    • um esquema que descreve dados tabulares (por exemplo, tf.Examples);
    • uma coleção de estatísticas de resumo sobre esses conjuntos de dados.
  • ML Metadata (MLMD) é uma biblioteca para registrar e recuperar metadados associados a fluxos de trabalho de desenvolvedores de ML e cientistas de dados. Na maioria das vezes, os metadados usam representações do TFMD. O MLMD gerencia a persistência usando o SQL-Lite, o MySQL e outros armazenamentos de dados semelhantes.

Tecnologias compatíveis

Obrigatórias

  • O Apache Beam é um modelo unificado e de código aberto para a definição de pipelines de processamento paralelo de dados em lote e streaming. O TFX usa o Apache Beam para implementar pipelines paralelos de dados. Depois, o pipeline é executado por um dos back-ends de processamento distribuído do Beam, que incluem o Apache Flink, Apache Spark, Google Cloud Dataflow e outros.

Opcionais

Orquestradores como o Apache Airflow e o Kubeflow facilitam a configuração, operação, monitoramento e manutenção de um pipeline de machine learning.

  • O Apache Airflow é uma plataforma para criar, agendar e monitorar fluxos de trabalho por meio de códigos de programação. O TFX usa o Airflow para criar fluxos de trabalho, como grafos acíclicos direcionados (DAGs, na sigla em inglês) de tarefas. O programador do Airflow executa tarefas em uma matriz de workers enquanto segue as dependências especificadas. Os utilitários de linha de comando avançados tornam as operações complexas em DAGs um piscar de olhos. A interface do usuário avançada facilita a visualização de pipelines em execução na produção, monitora o progresso e resolve problemas quando necessário. Quando os fluxos de trabalho são definidos como código, eles se tornam mais colaborativos e mais fáceis de manter, criar versões e testar.

  • O objetivo do Kubeflow é simplificar as implantações de fluxos de trabalho de machine learning (ML) no Kubernetes. O objetivo do Kubeflow não é recriar outros serviços, mas fornecer uma maneira simples de implantar os melhores sistemas de código aberto para ML em diversas infraestruturas. O Kubeflow Pipelines permite a composição e a execução de fluxos de trabalho reproduzíveis no Kubeflow, integrados a experimentos baseados em notebooks. Os serviços do Kubeflow Pipelines no Kubernetes incluem o armazenamento de metadados hospedado, o mecanismo de orquestração baseado em contêiner, o servidor de notebook e a IU para ajudar os usuários a desenvolver, executar e gerenciar pipelines complexos de ML em escala. O SDK do Kubeflow Pipelines permite a criação e o compartilhamento de componentes e a composição de pipelines de maneira programática.

Portabilidade e interoperabilidade

O TFX foi projetado para ser portátil para vários ambientes e frameworks de orquestração, incluindo o Apache Airflow, o Apache Beam e o Kubeflow . Ele também é portátil para diferentes plataformas de computação, incluindo plataformas no local e na nuvem, como o Google Cloud Platform (GCP). Em particular, o TFX interopera com vários serviços gerenciados do GCP, como Cloud AI Platform para Treinamento e Previsão e Cloud Dataflow para processamento distribuído de dados para vários outros aspectos do ciclo de vida de ML.

Model e SavedModel

Model

Um modelo é a saída do processo de treinamento. É o registro serializado dos pesos que foram aprendidos durante o processo de treinamento. Esses pesos podem ser usados subsequentemente para computar previsões para novos exemplos de entrada. No TFX e no TensorFlow, "modelo" refere-se aos checkpoints que contêm os pesos aprendidos até aquele ponto.

Observe que "modelo" também pode se referir à definição do grafo de computação do TensorFlow (ou seja, um arquivo Python) que expressa como uma previsão será calculada. Os dois aspectos podem ser usados alternadamente com base no contexto.

SavedModel

  • Um SavedModel é: uma serialização universal, neutra, hermética e recuperável de um modelo do TensorFlow.
  • Ele é importante porque: permite que sistemas de nível superior produzam, transformem e consumam modelos do TensorFlow usando uma única abstração.

SavedModel é o formato de serialização recomendado para exibir um modelo do TensorFlow em produção ou exportar um modelo treinado para um aplicativo nativo para dispositivos móveis ou JavaScript. Por exemplo, para transformar um modelo em um serviço REST para fazer previsões, é possível serializar o modelo como um SavedModel e disponibilizá-lo usando o TensorFlow Serving. Consulte Exibição de um modelo do TensorFlow para mais informações.

Esquema

Alguns componentes do TFX usam uma descrição dos dados de entrada chamada de esquema. O esquema é uma instância de schema.proto. Os esquemas são um tipo de buffer de protocolo, mais conhecido como "protobuf". O esquema pode especificar tipos de dados para valores de elementos, se um recurso precisar estar presente em todos os exemplos, intervalos de valores permitidos e outras propriedades. Um dos benefícios do uso do TensorFlow Data Validation (TFDV) é que ele gera automaticamente um esquema ao inferir tipos, categorias e intervalos dos dados de treinamento.

Veja um trecho de um protobuf de esquema:

...
feature {
  name: "age"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
feature {
  name: "capital-gain"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
...

Os seguintes componentes usam o esquema:

  • TensorFlow Data Validation
  • TensorFlow Transform

Em um típico pipeline do TFX, o TensorFlow Data Validation gera um esquema que é consumido pelos outros componentes.

Como desenvolver com o TFX

O TFX fornece uma plataforma eficiente para todas as fases de um projeto de machine learning, desde a pesquisa, a experimentação e o desenvolvimento na sua máquina local, até a implantação. Para evitar a duplicação de códigos e eliminar o potencial de desvio de treinamento/disponibilização, é altamente recomendável implementar o pipeline do TFX para o treinamento e a implantação de modelos treinados, além de usar componentes Transform que aproveitam a biblioteca TensorFlow Transform para treinamento e inferência. Ao fazer isso, você usará o mesmo código de pré-processamento e análise de forma consistente e evitará diferenças entre os dados usados para treinamento e os dados alimentados nos modelos treinados em produção. Além disso, você precisará escrever o código apenas uma vez.

Exploração, visualização e limpeza de dados

Exploração, visualização e limpeza de dados

Os pipelines do TFX geralmente começam com um componente ExampleGen, que aceita dados de entrada e os formata como tf.Examples. Muitas vezes, isso é feito depois que os dados foram divididos em conjuntos de dados de treinamento e avaliação, de modo que existem duas cópias de componentes do ExampleGen, uma para treinamento e outra para avaliação. Isso geralmente é seguido por um componente StatisticsGen e um componente SchemaGen, que examinará seus dados e inferirá um esquema de dados e estatísticas. O esquema e as estatísticas serão usados por um componente ExampleValidator, que procurará anomalias, valores ausentes e tipos de dados incorretos nos seus dados. Todos esses componentes aproveitam os recursos da biblioteca TensorFlow Data Validation.

O TensorFlow Data Validation (TFDV) é uma ferramenta valiosa ao fazer a exploração inicial, a visualização e a limpeza do conjunto de dados. O TFDV examina seus dados e infere os tipos de dados, categorias e intervalos. Depois, ajuda a identificar automaticamente anomalias e valores ausentes. Ele também fornece ferramentas de visualização que podem ajudar você a analisar e entender seu conjunto de dados. Após a conclusão do pipeline, você poderá ler os metadados do MLMD e usar as ferramentas de visualização do TFDV em um notebook do Jupyter para analisar os dados.

Após o treinamento e a implantação inicial do modelo, o TFDV pode ser usado para monitorar novos dados de solicitações de inferência para os modelos implantados e procurar anomalias e/ou desvios. Isso é especialmente útil para dados de série temporal que mudam ao longo do tempo como resultado de tendências ou periodicidade. Além disso, pode ajudar a informar quando há problemas de dados ou quando os modelos precisam ser retreinados em novos dados.

Visualização de dados

Depois de concluir sua primeira execução dos dados por meio da seção do pipeline que usa TFDV (normalmente StatisticsGen, SchemaGen e ExampleValidator), você pode ver os resultados em um notebook estilo Jupyter. Para execuções adicionais, você pode comparar esses resultados à medida que faz ajustes, até que os dados sejam ideais para seu modelo e aplicativo.

Primeiro, consulte o ML Metadata (MLMD) para localizar os resultados dessas execuções dos componentes. Em seguida, use a API de suporte de visualização no TFDV para criar as visualizações no seu notebook. Isso inclui tfdv.load_statistics() e tfdv.visualize_statistics() Com essa visualização, é possível entender melhor as características do conjunto de dados e modificá-lo conforme necessário.

Modelos de desenvolvimento e treinamento

Engenharia de atributos

Um pipeline comum do TFX inclui um componente Transform, que faz a engenharia de atributos aproveitando os recursos da biblioteca TensorFlow Transform (TFT). Um componente Transform usa o esquema criado por um componente SchemaGen e aplica transformações de dados para criar, combinar e transformar os recursos que serão usados para treinar seu modelo. A limpeza de valores ausentes e a conversão de tipos também devem ser feitas no componente Transform caso haja a possibilidade de que eles também estejam presentes nos dados enviados para solicitações de inferência. Há algumas considerações importantes ao criar o código do TensorFlow para treinamento no TFX.

Modelagem e treinamento

O resultado de um componente Transform é um SavedModel, que será importado e usado no código de modelagem no TensorFlow, durante um componente Trainer. Esse SavedModel inclui todas as transformações de engenharia de dados que foram criadas no componente Transform, de modo que as transformações idênticas sejam executadas usando exatamente o mesmo código durante o treinamento e a inferência. Usando o código de modelagem, incluindo o SavedModel do componente Transform, é possível utilizar seus dados de treinamento e avaliação e treinar seu modelo.

Durante a última seção do código de modelagem, salve o modelo tanto como SavedModel quanto como EvalSavedModel. Salvar como EvalSavedModel exigirá que você importe e aplique a biblioteca TensorFlow Model Analysis (TFMA) em seu componente Trainer.

import tensorflow_model_analysis as tfma
...

tfma.export.export_eval_savedmodel(
        estimator=estimator,
        export_dir_base=eval_model_dir,
        eval_input_receiver_fn=receiver_fn)

Análise e compreensão do desempenho do modelo

Análise de modelos

Após o desenvolvimento e o treinamento inicial do modelo, é importante analisar e realmente entender o desempenho dele. Um pipeline comum do TFX incluirá um componente Evaluator, que aproveita os recursos da biblioteca TensorFlow Model Analysis (TFMA), que fornece um conjunto de ferramentas avançadas para essa fase de desenvolvimento. Um componente Evaluator consome o EvalSavedModel que você exportou acima e permite que você especifique uma lista de SliceSpecs que pode ser usada ao visualizar e analisar o desempenho do seu modelo. Cada SliceSpec define uma fração dos dados de treinamento que você quer examinar, como categorias específicas para recursos categóricos ou intervalos específicos para recursos numéricos.

Por exemplo, isso seria importante para tentar entender o desempenho do seu modelo para diferentes segmentos dos seus clientes, que poderiam ser segmentados por compras anuais, dados geográficos, faixa etária ou sexo. Isso pode ser especialmente importante para conjuntos de dados com caudas longas, em que o desempenho de um grupo dominante pode mascarar um desempenho inaceitável de grupos importantes, ainda que menores. Por exemplo, seu modelo pode ter um bom desempenho para funcionários comuns, mas ser péssimo para a equipe executiva, e pode ser importante que você saiba disso.

Análise e visualização de modelos

Depois de concluir a execução dos dados por meio do treinamento do modelo e da execução do componente Evaluator (que aproveita o TFMA) nos resultados do treinamento, visualize os resultados em um notebook estilo Jupyter. Para execuções adicionais, você pode comparar esses resultados à medida que faz ajustes, até que os resultados sejam ideais para seu modelo e aplicativo.

Primeiro, consulte o ML Metadata (MLMD) para localizar os resultados dessas execuções dos componentes. Em seguida, use a API de suporte de visualização no TFMA para criar as visualizações no seu notebook. Isso inclui tfma.load_eval_results() e tfma.view.render_slicing_metrics() Com essa visualização, é possível entender melhor as características do modelo e modificá-lo conforme necessário.

Destinos de implantação

Depois de desenvolver e treinar um modelo com o que você está satisfeito, agora é hora de implantá-lo em um ou mais destinos em que ele receberá solicitações de inferência. O TFX é compatível com a implantação em três classes de destinos de implantação. Os modelos treinados que foram exportados como SavedModels podem ser implantados em qualquer um desses destinos ou em todos eles.

Fluxo de componentes

Inferência: TensorFlow Serving

O TensorFlow Serving (TFS) é um sistema de exibição flexível e de alto desempenho para modelos de machine learning, projetado para ambientes de produção. Ele consome um SavedModel e aceita solicitações de inferência nas interfaces REST ou gRPC. Ele é executado como um conjunto de processos em um ou mais servidores de rede, usando uma das várias arquiteturas avançadas para lidar com sincronização e computação distribuída. Consulte a documentação do TFS para mais informações sobre como desenvolver e implantar soluções do TFS.

Em um pipeline típico, um componente Pusher consumirá SavedModels que foram treinados em um componente Trainer e os implantará na infraestrutura do TFS. Isso inclui lidar com várias versões e atualizações de modelo.

Inferência em apps nativos para dispositivos móveis e de Internet das Coisas (IoT, na sigla em inglês): TensorFlow Lite

O TensorFlow Lite é um pacote de ferramentas dedicado a ajudar os desenvolvedores a usar os modelos treinados do TensorFlow em apps nativos para dispositivos móveis e IoT. Ele consome os mesmos SavedModels que o TensorFlow Serving e aplica otimizações como a quantização e a remoção, a fim de melhorar o tamanho e o desempenho dos modelos resultantes frente aos desafios de execução em dispositivos móveis e de IoT. Consulte a documentação do TensorFlow Lite para mais informações sobre como usá-lo.

Inferência em JavaScript: TensorFlow JS

O TensorFlow JS é uma biblioteca de JavaScript para treinar e implantar modelos no navegador e no Node.js. Ele consome os mesmos SavedModels que o TensorFlow Serving e o TensorFlow Lite e os converte no formato da Web do TensorFlow.js. Consulte a documentação do TensorFlow JS para mais detalhes sobre como usá-lo.

Como criar um pipeline do TFX com o Airflow

Confira o workshop sobre o Airflow para mais detalhes

Como criar um pipeline do TFX com o Kubeflow

Configurar

O Kubeflow exige um cluster do Kubernetes para executar os pipelines em escala. Consulte a diretriz de implantação do Kubeflow que guia as opções de implantação do cluster do Kubeflow.

Configurar e executar o pipeline do TFX

Siga o tutorial de pipelines do TFX no Cloud AI Platform para executar o pipeline de exemplo do TFX no Kubeflow. Os componentes do TFX foram colocados em contêineres para compor o pipeline do Kubeflow, e a amostra ilustra a capacidade de configurar o pipeline para ler grandes conjuntos de dados públicos e executar etapas de treinamento e processamento de dados em escala na nuvem.

Interface de linha de comando para ações do pipeline

O TFX fornece uma CLI unificada que ajuda a executar uma gama completa de ações de pipeline como criar, atualizar, executar, listar e excluir canais em vários orquestradores, incluindo Apache Airflow, Apache Beam e Kubeflow. Para mais detalhes, siga estas instruções.