Arquitetura e design para prever o valor da vida útil do cliente com o Kubeflow Pipelines

Este é o primeiro de dois documentos que discutem como usar o Kubeflow Pipelines para orquestrar, treinar, implantar e inferir modelos preditivos de valor da vida útil do cliente (CLV). Neste documento, descrevemos os padrões de arquitetura e design usados para implementar pipelines de treinamento e inferência de CLV. Um tutorial complementar mostra como implantar, usar e personalizar as amostras de código do pipeline no repositório do GitHub.

Para uma visão geral genérica sobre como usar o Kubeflow Pipelines para projetar, orquestrar e automatizar um sistema de machine learning (ML) integrado e para usar uma configuração de integração/implantação contínua (CI/CD), consulte Arquitetura para pipelines de CI/CD e ML usando o Kubeflow e o Cloud Build.

Visão geral

Este documento tem duas metas:

  • Demonstrar padrões de arquitetura e design para o Kubeflow Pipelines que orquestram serviços de análise de dados e ML gerenciados pelo Google Cloud.
  • Fornecer um kit de primeiros passos para operacionalizar treinamento, implantação e pontuação de modelos de previsão de CLV.

A arquitetura e o design discutidos neste documento representam um caso de uso de vendas em que você precisa ajustar e treinar com frequência um modelo preditivo. Como um fluxo constante de novas transações de vendas é o núcleo dos dados de treinamento, você precisa manter os modelos atualizados com os padrões de compra em evolução. Automatizar os fluxos de trabalho de treinamento e implantação se torna essencial.

Neste documento, nos baseamos nas técnicas de pré-processamento e modelagem de dados abordadas na série Como prever o valor da vida útil do cliente com o AI Platform. Essa série ajuda a entender melhor os conceitos de CLV e as abordagens de algoritmo.

Este documento é destinado a cientistas de dados e engenheiros de machine learning. No documento e no tutorial complementar, presumimos que você tem uma compreensão básica dos seguintes conceitos e serviços do Google Cloud:

O Kubeflow Pipelines é um componente importante do projeto Kubeflow. O projeto Kubeflow é uma plataforma de código aberto, nativa do Kubernetes, para desenvolvimento, orquestração, implantação e execução de cargas de trabalho escalonáveis e portáteis de ML. Para mais informações sobre o Kubeflow Pipelines, consulte a documentação do Kubeflow (em inglês).

O Kubeflow Pipelines geralmente é instalado como parte de uma instalação do Kubeflow. Também é possível instalar o Kubeflow Pipelines como um conjunto autônomo de serviços sem dependências em outros componentes do Kubeflow.

É possível hospedar o Kubeflow Pipelines em várias distribuições do Kubernetes. Neste documento, nos concentramos na execução do Kubeflow Pipelines no GKE.

Kubeflow Pipelines como um orquestrador

Neste documento, demonstramos um padrão de arquitetura em que você usa o Kubeflow Pipelines como orquestrador para serviços de análise de dados e ML gerenciados pelo Google Cloud. Nesse caso, o Kubeflow Pipelines só executa o fluxo de trabalho, mas não realiza outro cálculo em um cluster do Kubernetes de hospedagem.

O diagrama a seguir mostra a arquitetura de alto nível da solução de CLV descrita neste documento.

Visão geral do principal Kubeflow Pipelines e dos componentes do Google Cloud para a solução de CLV.

Os serviços do Kubeflow Pipelines são hospedados no GKE. Os pipelines discutidos aqui e no tutorial são criados no Kubeflow Pipelines. Esses canais interagem com o Cloud Storage, o BigQuery e o AutoML Tables por meio de um conjunto de componentes do Kubeflow Pipelines que envolvem as respectivas APIs do Cloud. Use o Container Registry para gerenciar as imagens de contêiner dos componentes que os pipelines usam.

A solução do GitHub que o acompanha inclui dois exemplos de pipelines:

  • O pipeline de treinamento e implantação
  • O pipeline de previsão em lote

Os dois pipelines seguem um fluxo de processamento, treinamento e pontuação de dados semelhante a um descrito em Como prever o valor da vida útil do cliente com o AutoML Tables. Nesse fluxo de trabalho, faça o seguinte:

  • Use o BigQuery para limpeza de dados e engenharia de recursos.
  • Use o AutoML Tables para treinamento, implantação e pontuação de modelos.

Fluxo de trabalho de treinamento e implantação

O pipeline de treinamento e implantação usa dados históricos de transações de vendas para treinar e, como opção, implantar um modelo de regressão de ML. O modelo é treinado para prever um valor de compras futuras para um cliente com base no histórico de compras desse cliente. Para mais informações sobre modelagem para predição de CLV, consulte Como prever o valor da vida útil do cliente com o AI Platform: introdução.

O diagrama a seguir mostra o fluxo de trabalho que o pipeline executa.

Componentes no fluxo de trabalho de treinamento e implantação.

Neste fluxo de trabalho, faça o seguinte:

  1. Carregue transações de vendas históricas do Cloud Storage para uma tabela de preparo do BigQuery. Se os dados já estiverem no BigQuery, esta etapa será ignorada.
  2. Prepare uma consulta do BigQuery. A consulta é gerada com base em um modelo de consulta e de argumentos do ambiente de execução que são passados para o pipeline.
  3. Execute uma consulta do BigQuery para criar recursos do histórico de transações de vendas. Os recursos projetados são armazenados em uma tabela do BigQuery.
  4. Importe recursos para um conjunto de dados do AutoML.
  5. Acione o treinamento do modelo AutoML.
  6. Após a conclusão do treinamento, recupere as métricas de avaliação do modelo.
  7. Compare o desempenho do modelo com o limite de desempenho.
  8. Se o modelo atingir ou exceder o limite de desempenho, implante o modelo para previsões on-line.

Para mais informações sobre o design e o uso do pipeline de treinamento, consulte a documentação no repositório do GitHub para esta solução.

Fluxo de trabalho de previsão em lote

O pipeline usa as mesmas etapas de pré-processamento e engenharia de recursos que o pipeline de treinamento. Use o método batchPredict do AutoML Tables para previsões em lote.

O diagrama a seguir mostra o fluxo de trabalho que o pipeline executa.

Fluxo de trabalho do pipeline para as etapas de pré-processamento e engenharia.

  1. Carregue transações de vendas históricas do Cloud Storage para uma tabela de preparo do BigQuery. Se os dados já estiverem no BigQuery, esta etapa será ignorada.
  2. Prepare uma consulta do BigQuery. A consulta é gerada com base em um modelo de consulta e de argumentos do ambiente de execução que são passados para o pipeline.
  3. Execute uma consulta do BigQuery para criar recursos do histórico de transações de vendas. Os recursos projetados são armazenados em uma tabela do BigQuery.
  4. Invoque o método batchPredict do AutoML Tables para pontuar os dados. O método batchPredict do AutoML Tables armazena as previsões resultantes no Cloud Storage ou no BigQuery.

Padrões de design do Kubeflow Pipelines

Os pipelines discutidos neste documento são simples de gerenciar, implantar e personalizar.

Como usar componentes genéricos ou específicos do Kubeflow Pipelines

Em geral, é possível categorizar os componentes do Kubeflow em dois tipos:

  • Componentes genéricos. Um componente genérico tem uma funcionalidade que não é específica de um fluxo de trabalho implementado por um determinado pipeline. Por exemplo, um componente que envia um job do BigQuery é genérico. Como o componente não contém nenhuma lógica específica para um determinado pipeline, é possível reutilizá-lo em vários cenários.
  • Componentes específicos do pipeline. Um componente específico do pipeline geralmente é um componente auxiliar com funcionalidade específica para um determinado pipeline ou um grupo de pipelines relacionados. Por exemplo, um componente que calcula e registra uma métrica de desempenho personalizada específica de um determinado fluxo de trabalho de treinamento. Não é possível reutilizar facilmente um componente específico do pipeline.

É possível desenvolver, criar, implantar e gerenciar componentes genéricos independentemente dos pipelines que os utilizam.

Normalmente, o desenvolvimento, a criação e a implantação de um componente específico do pipeline estão intimamente associados ao ciclo de vida do pipeline consumidor. O uso de componentes Python leves é uma maneira conveniente e comum de implementar componentes específicos do pipeline.

Os pipelines usam componentes genéricos e específicos do pipeline.

Para executar tarefas de pré-processamento de dados e engenharia de atributos, os pipelines usam o componente BigQuery (em inglês) empacotado com a distribuição do Kubeflow Pipelines. O componente processa uma consulta arbitrária do BigQuery e armazena os resultados em uma tabela do BigQuery ou em um blob do Cloud Storage.

Para treinamento, implantação e inferência de modelo, os pipelines usam um conjunto de componentes personalizados do AutoML Tables fornecidos como parte das amostras de código do GitHub. Os componentes do AutoML Tables envolvem um subconjunto de APIs do AutoML Tables.

Os pipelines também usam os seguintes componentes auxiliares que são implementados como componentes leves do Python:

  • O componente Load transactions. O componente Load transactions carrega os dados históricos de transações de vendas de um conjunto de arquivos CSV no Cloud Storage para uma tabela de preparo no BigQuery.
  • O componente Prepare query. O componente Prepare query (um bom exemplo de um componente específico do pipeline) gera um modelo de consulta SQL do BigQuery. No entanto, o BigQuery não é compatível com a parametrização de identificadores, nomes de colunas ou nomes de tabelas. Para evitar a codificação dessas partes da consulta de pré-processamento e engenharia de atributos, Prepare query substitui os marcadores no modelo de consulta pelos valores que são passados para o componente como parâmetros de ambiente de execução.

Para informações mais detalhadas sobre o design e o uso dos componentes usados nos pipelines, consulte a documentação desta solução no GitHub (em inglês).

Como gerenciar configurações de pipeline

Um aspecto importante do design do pipeline é como gerenciar as configurações. Não recomendamos codificar essas configurações diretamente na linguagem específica do domínio (DSL, na sigla em inglês) de um pipeline. As configurações codificadas podem causar problemas quando você implanta pipelines em ambientes distintos.

Por exemplo, os nomes e locais das imagens de contêiner para os componentes que um pipeline usa podem ser diferentes em ambientes de desenvolvimento, preparação e produção. Da mesma forma, os URLs dos recursos que os componentes usam (como o modelo de consulta que o componente Prepare query usa) podem diferir de um ambiente para outro.

A solução de acompanhamento do GitHub demonstra uma abordagem para o gerenciamento de configurações. Na solução, um único arquivo de configuração YAML gerencia todas as configurações do pipeline. O arquivo de configurações tem duas seções: argument_defaults e compiler_settings.

Na seção argument_defaults, você define os valores padrão para os argumentos de ambiente de execução dos pipelines. Na seção compiler_settings, você define as configurações que controlam como o compilador DSL converte o DSL do Python no formato YAML resultante. Um exemplo de configuração do compilador é uma sinalização que controla se um pipeline precisa ser compilado para usar a conta de serviço do usuário do pipeline específico ou a conta de serviço padrão do Compute Engine quando o pipeline acessa os serviços gerenciados do Google Cloud.

Durante a compilação, o arquivo de configurações é mesclado com o código DSL dos pipelines.

Como visualizar resultados de um pipeline executado no painel do Kubeflow Pipelines

A plataforma Kubeflow Pipelines tem suporte integrado para geração de registros e visualização de artefatos que podem rastrear, entender, avaliar e comparar uma série de execuções. Esse suporte é especialmente importante quando você gerencia um número potencialmente grande de execuções durante as fases de experimentação e treinamento do ciclo de vida do ML.

O painel do Kubeflow Pipelines é compatível com dois tipos de visualizações:

  • Métricas de pipeline Uma métrica de pipeline é uma métrica escalar renderizada como uma visualização na página Execuções de um experimento específico no painel do Kubeflow Pipelines. O objetivo principal de uma métrica de pipeline é fornecer uma visão rápida do desempenho de uma execução e comparar várias execuções.
  • Visualizadores de saída. Os visualizadores de saída são usados para registrar e renderizar informações mais abrangentes sobre uma execução. No painel do Kubeflow Pipelines, é possível encontrar a saída de artefatos por um determinado componente na seção Artefatos do painel de tarefas e o resumo de todas as saídas no painel Executar saída para uma execução.

Atualmente, o painel do Kubeflow Pipelines é compatível com os seguintes tipos de visualizadores de saída:

  • Matriz de confusão
  • Curva ROC
  • TensorBoard
  • App da Web
  • Tabela
  • Markdown

Os últimos três visualizadores são flexíveis porque permitem capturar e visualizar informações arbitrárias.

Um componente de pipeline pode usar os visualizadores de saída do painel do Kubeflow Pipelines gravando metadados dos visualizadores de saída em um arquivo JSON. Os metadados precisam estar em conformidade com o esquema descrito na documentação do Kubeflow Pipelines.

A maioria dos componentes genéricos distribuídos com o Kubeflow Pipelines geram metadados que refletem as ações deles. É altamente recomendável instrumentar qualquer componente personalizado desenvolvido como parte da solução do Kubeflow Pipelines com a geração de metadados.

Se você precisar capturar informações que não são geradas automaticamente por nenhum dos componentes pré-criados que o pipeline usa, use a infraestrutura flexível de componentes leves do Python para gerar outros artefatos.

Os componentes do AutoML Tables demonstram como usar os artefatos do painel do Kubeflow Pipelines para rastrear os resultados das chamadas da API AutoML Tables.

O componente log_evalutation_metrics (em inglês) recupera as métricas de avaliação mais recentes de um determinado modelo do AutoML e gera essas métricas como um artefato Markdown.

O componente também registra a métrica principal especificada como argumento de entrada como uma métrica de pipeline.

Automação de compilação e implantação

Os pipelines de produção podem se tornar complexos. Eles podem fazer o seguinte:

  • Use vários componentes de diferentes origens. Por exemplo, eles podem usar componentes genéricos do Kubeflow Pipelines e componentes personalizados desenvolvidos para uma determinada solução.
  • Use recursos e recursos externos. Por exemplo, eles podem usar scripts e modelos SQL, scripts PySpark ou modelos de visualizador de saída.
  • Exigem valores diferentes dos valores padrão para os parâmetros de ambiente de execução, configurações do compilador ou ambos, dependendo do ambiente de execução de destino. Por exemplo, para alguns ambientes, pode ser necessário compilar um pipeline para usar uma conta de serviço personalizada. Já para outros ambientes, o pipeline pode usar a conta padrão do Compute Engine.

Em todos os casos, exceto nos mais simples, não é viável gerenciar a criação e a implantação de soluções do Kubeflow Pipelines usando livros de criação ou guias passo a passo manuais. Automatizar os processos de criação e implantação é fundamental. Quando combinada com o gerenciamento de configurações flexíveis, conforme descrito na seção Como gerenciar configurações de pipeline, a automação do build define uma base para um gerenciamento de configurações robusto, repetível e rastreável de soluções do Kubeflow Pipelines.

Os exemplos de código no repositório do GitHub acompanham uma abordagem para automatizar o processo de criação, usando o Cloud Build. Nesse cenário, o Cloud Build executa as seguintes etapas:

  1. Cria a imagem base para os componentes leves do Python.
  2. Cria a imagem que hospeda os componentes do AutoML Tables.
  3. Implanta as imagens no registro de contêiner do seu projeto.
  4. Compila os pipelines.
  5. Implanta os pipelines compilados no Cloud Storage.
  6. Implanta os artefatos dos pipelines no Cloud Storage.
  7. Copia o conjunto de dados de amostra usado pelo tutorial para o Cloud Storage.

Para uma descrição mais detalhada do processo de build, consulte o repositório do GitHub da solução.

A seguir