Pipelines de ML

No ML de produção, o objetivo não é criar um único modelo e implantá-lo. O objetivo é criar pipelines automatizados para desenvolver, testar e implantar modelos ao longo do tempo. Por quê? À medida que o mundo muda, as tendências nos dados mudam, fazendo com que os modelos em produção fiquem desatualizados. Normalmente, os modelos precisam ser treinados novamente com dados atualizados para continuar veiculando previsões de alta qualidade a longo prazo. Em outras palavras, é preciso substituir os modelos desatualizados por novos.

Sem pipelines, a substituição de um modelo desatualizado é um processo propenso a erros. Por exemplo, quando um modelo começa a disponibilizar previsões ruins, alguém precisa coletar e processar novos dados manualmente, treinar um novo modelo, validar a qualidade dele e, por fim, implantá-lo. Os pipelines de ML automatizam muitos desses processos repetitivos, tornando o gerenciamento e a manutenção de modelos mais eficientes e confiáveis.

Criação de pipelines

Os pipelines de ML organizam as etapas de criação e implantação de modelos em tarefas bem definidas. Os pipelines têm uma destas duas funções: entrega de previsões ou atualização do modelo.

Como enviar previsões

O pipeline de disponibilização entrega previsões. Ele expõe seu modelo ao mundo real, tornando-o acessível aos seus usuários. Por exemplo, quando um usuário quer uma previsão, como a previsão do tempo para amanhã, quantos minutos serão necessários para viajar para o aeroporto ou uma lista de vídeos recomendados, o pipeline de disponibilização recebe e processa os dados do usuário, faz uma previsão e a entrega ao usuário.

Como atualizar o modelo

Os modelos tendem a ficar obsoletos quase imediatamente após entrarem em produção. Basicamente, elas fazem previsões usando informações antigas. Os conjuntos de dados de treinamento capturaram o estado do mundo há um dia ou, em alguns casos, uma hora atrás. Inevitavelmente, o mundo mudou: um usuário assistiu a mais vídeos e precisa de uma nova lista de recomendações. A chuva diminuiu o tráfego e os usuários precisam de estimativas atualizadas para os horários de chegada. Uma tendência popular faz com que os varejistas solicitem previsões de inventário atualizadas para determinados itens.

Normalmente, as equipes treinam novos modelos bem antes que o modelo de produção fique desatualizado. Em alguns casos, as equipes treinam e implantam novos modelos diariamente em um ciclo contínuo de treinamento e implantação. O ideal é que o treinamento de um novo modelo aconteça bem antes de o modelo de produção ficar desatualizado.

Os pipelines a seguir funcionam juntos para treinar um novo modelo:

  • Pipeline de dados. O pipeline processa os dados do usuário para criar conjuntos de dados de treinamento e teste.
  • Pipeline de treinamento. O pipeline de treinamento treina modelos usando os novos conjuntos de dados do pipeline de dados.
  • Pipeline de validação O pipeline de validação valida o modelo treinado comparando-o com o modelo de produção usando conjuntos de dados de teste gerados pelo pipeline de dados.

A Figura 4 ilustra as entradas e saídas de cada pipeline de ML.

Pipelines de ML

Pipelines de ML mostrando as entradas e saídas. O pipeline de disponibilização
recebe entradas do usuário e fornece previsões. O pipeline processa os registros de dados do aplicativo para criar conjuntos de dados de treinamento e teste que são usados pelo pipeline de treinamento e validação para treinar e validar novos modelos.

Figura 4. Os pipelines de ML automatizam muitos processos de desenvolvimento e manutenção de modelos. Cada pipeline mostra as entradas e saídas.

De modo geral, veja como os pipelines mantêm um modelo atualizado em produção:

  1. Primeiro, um modelo entra em produção e o pipeline de disponibilização começa a fornecer previsões.

  2. O pipeline de dados começa imediatamente a coletar dados para gerar novos conjuntos de dados de treinamento e teste.

  3. Com base em uma programação ou um gatilho, os pipelines de treinamento e validação treinam e validam um novo modelo usando os conjuntos de dados gerados pelo pipeline de dados.

  4. Quando o pipeline de validação confirma que o novo modelo não é pior do que o modelo de produção, o novo modelo é implantado.

  5. Esse processo é repetido continuamente.

Inatividade do modelo e frequência de treinamento

Quase todos os modelos ficam desatualizados. Alguns modelos ficam desatualizados mais rápido do que outros. Por exemplo, modelos que recomendam roupas geralmente ficam desatualizados rapidamente porque as preferências do consumidor mudam com frequência. Por outro lado, os modelos que identificam flores podem nunca ficar obsoletos. As características de identificação de uma flor permanecem estáveis.

A maioria dos modelos começa a ficar desatualizada imediatamente depois de ser colocada em produção. Defina uma frequência de treinamento que reflita a natureza dos dados. Se os dados forem dinâmicos, treine com frequência. Se ele for menos dinâmico, talvez você não precise treiná-lo com frequência.

Treine modelos antes que fiquem desatualizados. O treinamento antecipado fornece um buffer para resolver possíveis problemas, por exemplo, se os dados ou o pipeline de treinamento falharem ou se a qualidade do modelo for baixa.

Uma prática recomendada é treinar e implantar novos modelos diariamente. Assim como projetos de software normais que têm um processo diário de criação e lançamento, os pipelines de ML para treinamento e validação costumam ter um desempenho melhor quando executados diariamente.

Pipeline de disponibilização

O pipeline de disponibilização gera e fornece previsões de uma das duas maneiras: on-line ou off-line.

  • Previsões on-line. Previsões on-line ocorrem em tempo real, geralmente ao enviar uma solicitação a um servidor on-line e retornar uma previsão. Por exemplo, quando um usuário quer uma previsão, os dados dele são enviados ao modelo e este retorna a previsão. Por exemplo, o Gmail classifica as mensagens recebidas em tempo real usando previsões on-line.

  • Previsões off-line: As previsões off-line são pré-computadas e armazenadas em cache. Para exibir uma previsão, o aplicativo encontra a previsão em cache no banco de dados e a retorna. Por exemplo, um serviço baseado em assinatura pode prever a taxa de desistência dos assinantes. O modelo prevê a probabilidade de desligamento de cada assinante e a armazena em cache. Quando o app precisa da previsão, por exemplo, para incentivar usuários que podem estar prestes a desistir, ele apenas consulta a previsão pré-computada.

A Figura 5 mostra como as previsões on-line e off-line são geradas e exibidas.

Previsões on-line e off-line

As previsões podem ser entregues em tempo real ou agrupadas e armazenadas em cache para pesquisa.

Figura 5. As previsões on-line oferecem previsões em tempo real. As previsões off-line são armazenadas em cache e consultadas no momento da disponibilização.

Pós-processamento de previsão

Normalmente, as previsões são pós-processadas antes de serem entregues. Por exemplo, as previsões podem ser pós-processadas para remover conteúdo tóxico ou enviesado. Os resultados de classificação podem usar o Twiddling para reordenar os resultados em vez de mostrar a saída bruta do modelo, por exemplo, para aprimorar o conteúdo autoritativo, apresentar uma diversidade de resultados, rebaixar resultados específicos (como clickbait) ou remover resultados por motivos legais.

A Figura 6 mostra um pipeline de exibição e as tarefas típicas envolvidas no envio de previsões.

Previsões de pós-processamento

O pipeline de disponibilização normalmente pós-processamento de previsões.

Figura 6. Pipeline de disponibilização ilustrando as tarefas típicas envolvidas para fornecer previsões.

A etapa de engenharia de atributos normalmente é criada dentro do modelo, e não em um processo separado e isolado. O código de processamento de dados no pipeline de disponibilização costuma ser quase idêntico ao código de processamento de dados que o pipeline usa para criar conjuntos de dados de treinamento e teste.

Armazenamento de recursos e metadados

O pipeline de disponibilização precisa incorporar um repositório para registrar previsões de modelo e, se possível, informações empíricas.

Registrar previsões do modelo permite monitorar a qualidade dele. Ao agregar as previsões, é possível monitorar a qualidade geral do modelo e determinar se ele está começando a perder qualidade. Geralmente, as previsões do modelo de produção precisam ter a mesma média dos rótulos do conjunto de dados de treinamento. Para mais informações, consulte viés de previsão.

Capturar informações empíricas

Em alguns casos, as informações empíricas só são disponibilizadas muito mais tarde. Por exemplo, se um app de previsão do tempo prevê o clima daqui a seis semanas, as informações empíricas (como a previsão do tempo realmente está) não estarão disponíveis por seis semanas.

Sempre que possível, peça para os usuários informarem as informações empíricas adicionando mecanismos de feedback ao app. O Gmail captura implicitamente o feedback dos usuários quando eles movem os e-mails da caixa de entrada para a caixa de spam. No entanto, isso só funciona quando o usuário categoriza o e-mail corretamente. Quando os usuários deixam spam na caixa de entrada (por saberem que é spam e nunca o abrem), os dados de treinamento se tornam imprecisos. Essa mensagem será marcada como "não é spam" quando deve ser "spam". Em outras palavras, sempre tente encontrar maneiras de capturar e registrar as informações empíricas, mas esteja ciente das deficiências que podem existir nos mecanismos de feedback.

A Figura 7 mostra as previsões sendo entregues a um usuário e registradas em um repositório.

Como gerar registros de previsões

O pipeline de disponibilização precisa registrar previsões para monitorar a inatividade do modelo.

Figura 7. Registre previsões para monitorar a qualidade do modelo.

Pipelines de dados

Os pipelines de dados geram conjuntos de dados de treinamento e teste com base nos dados do aplicativo. Os pipelines de treinamento e validação usam os conjuntos de dados para treinar e validar novos modelos.

O pipeline de dados cria conjuntos de dados de treinamento e teste com os mesmos atributos e rótulos usados originalmente para treinar o modelo, mas com informações mais recentes. Por exemplo, um app de mapas geraria conjuntos de dados de treinamento e teste de tempos de viagem recentes entre pontos para milhões de usuários, além de outros dados relevantes, como o clima.

Um app de recomendação de vídeos geraria conjuntos de dados de treinamento e teste que incluíam os vídeos em que um usuário clicou da lista recomendada (com aqueles não clicados), bem como outros dados relevantes, como o histórico de exibição.

A Figura 8 ilustra o pipeline de dados usando dados de aplicativo para gerar conjuntos de dados de treinamento e teste.

Pipeline de dados

O pipeline de dados gera conjuntos de dados de treinamento e teste.

Figura 8. O pipeline de dados processa os dados do aplicativo para criar conjuntos de dados para os pipelines de treinamento e validação.

Coleta e processamento de dados

As tarefas de coleta e processamento de dados em pipelines de dados provavelmente vão ser diferentes da fase de experimentação, em que você determinou que a solução era viável:

  • Coleta de dados. Durante a experimentação, a coleta de dados normalmente exige o acesso a dados salvos. Para pipelines de dados, a coleta de dados pode exigir a descoberta e a aprovação para acessar os dados de registros de streaming.

    Se você precisar de dados rotulados por humanos (como imagens médicas), precisará de um processo para coletar e atualizá-los também. Se você precisar de dados rotulados por humanos, consulte a página CrowdCompute (em inglês).

  • Processamento de dados. Durante a experimentação, os atributos certos vieram da extração, mesclagem e amostragem dos conjuntos de dados de experimentação. Para os pipelines de dados, gerar esses mesmos atributos pode exigir processos totalmente diferentes. No entanto, duplique as transformações de dados da fase de experimentação aplicando as mesmas operações matemáticas aos atributos e rótulos.

Armazenamento de recursos e metadados

Você vai precisar de um processo para armazenar, controlar as versões e gerenciar os conjuntos de dados de treinamento e teste. Os repositórios com controle de versões oferecem os seguintes benefícios:

  • Reprodutibilidade. Recriar e padronizar ambientes de treinamento de modelos e comparar a qualidade da previsão entre modelos diferentes.

  • Conformidade. Cumpra os requisitos de conformidade regulatória para auditoria e transparência.

  • Retenção. Defina valores de retenção de dados para o período de armazenamento.

  • Gerenciamento de acesso. Gerencie quem pode acessar seus dados com permissões refinadas.

  • Integridade dos dados. Acompanhe e entenda as alterações nos conjuntos de dados ao longo do tempo, facilitando o diagnóstico de problemas nos dados ou no modelo.

  • Facilidade de descoberta. Deixe mais fácil para outras pessoas encontrarem seus conjuntos de dados e recursos. Assim, outras equipes podem determinar se serão úteis para os propósitos delas.

Como documentar seus dados

Uma boa documentação ajuda as pessoas a entender informações importantes sobre seus dados, como tipo, origem, tamanho e outros metadados essenciais. Na maioria dos casos, documentar os dados em um documento de design ou g3doc é suficiente. Se você planeja compartilhar ou publicar dados, use cards de dados para estruturar as informações. Os cartões de dados facilitam a descoberta e a compreensão dos seus conjuntos de dados.

Pipelines de treinamento e validação

Os pipelines de treinamento e validação produzem novos modelos para substituir modelos de produção antes que eles se tornem obsoletos. O treinamento contínuo e a validação de novos modelos garante que o melhor modelo esteja sempre em produção.

O pipeline de treinamento gera um novo modelo com base nos conjuntos de dados de treinamento, e o pipeline de validação compara a qualidade do novo modelo com a que está em produção usando conjuntos de dados de teste.

A Figura 9 ilustra o pipeline de treinamento usando um conjunto de dados de treinamento para treinar um modelo novo.

Pipeline de treinamento

O pipeline de treinamento treina novos modelos usando dados novos.

Figura 9. O pipeline de treinamento treina novos modelos usando o conjunto de dados de treinamento mais recente.

Depois que o modelo é treinado, o pipeline de validação usa conjuntos de dados de teste para comparar a qualidade do modelo de produção com a do modelo treinado.

Em geral, se o modelo treinado não for significativamente pior do que o modelo de produção, o modelo treinado entrará em produção. Se o modelo treinado for pior, a infraestrutura de monitoramento criará um alerta. Modelos treinados com pior qualidade de previsão podem indicar problemas em potencial com os dados ou os pipelines de validação. Essa abordagem funciona para garantir que o melhor modelo, treinado com os dados mais recentes, esteja sempre em produção.

Armazenamento de recursos e metadados

Os modelos e os metadados deles precisam ser armazenados em repositórios com controle de versão para organizar e rastrear implantações de modelos. Os repositórios de modelos oferecem os seguintes benefícios:

  • Rastreamento e avaliação. Rastreie modelos em produção e entenda as métricas de qualidade de avaliação e previsão.

  • Processo de lançamento do modelo. Analise, aprove, lance ou reverta modelos facilmente.

  • Reprodutibilidade e depuração. Reproduza os resultados do modelo e depure problemas de maneira mais eficaz, rastreando os conjuntos de dados e as dependências de um modelo nas implantações.

  • Facilidade de descoberta. Deixe mais fácil para outras pessoas encontrarem seu modelo. Outras equipes podem determinar se o modelo (ou partes dele) pode ser usado para os propósitos delas.

A Figura 10 ilustra um modelo validado armazenado em um repositório de modelos.

Armazenamento de modelos

Armazenar modelos em um repositório com controle de versão

Figura 10. Os modelos validados são armazenados em um repositório de modelos para rastreamento e descoberta.

Use cards de modelo para documentar e compartilhar informações importantes sobre o modelo, como finalidade, arquitetura, requisitos de hardware, métricas de avaliação etc.

Desafios na criação de pipelines

Ao criar pipelines, você pode encontrar os seguintes desafios:

  • Ter acesso aos dados de que você precisa. O acesso aos dados pode exigir justificativas por que você precisa dele. Por exemplo, talvez seja necessário explicar como os dados serão usados e esclarecer como os problemas de PII serão resolvidos. Prepare-se para mostrar uma prova de conceito, demonstrando como seu modelo faz previsões melhores com acesso a determinados tipos de dados.

  • Como ter acesso aos recursos certos. Em alguns casos, os recursos usados na fase de experimentação não estarão disponíveis nos dados em tempo real. Portanto, ao fazer testes, confirme se você conseguirá os mesmos recursos na produção.

  • Entender como os dados são coletados e representados. Aprender como os dados foram coletados, quem os coletou e como foram coletados (junto com outros problemas) pode levar tempo e esforço. É importante entender os dados por completo. Não use dados em que você não tem confiança para treinar um modelo que possa ir para a produção.

  • Entender as compensações entre esforço, custo e qualidade do modelo. A incorporação de um novo atributo em um pipeline de dados pode exigir muito esforço. No entanto, o recurso adicional pode melhorar apenas um pouco a qualidade do modelo. Em outros casos, pode ser fácil adicionar um novo recurso. No entanto, os recursos para acessar e armazenar o recurso podem ser extremamente caros.

  • Como receber computação. Se você precisar de TPUs para um novo treinamento, poderá ser difícil conseguir a cota necessária. Além disso, gerenciar TPUs é complicado. Por exemplo, algumas partes do seu modelo ou dados talvez precisem ser projetadas especificamente para TPUs, dividindo as partes em vários chips de TPU.

  • Como encontrar o conjunto de dados ouro certo. Se os dados mudam com frequência, conseguir conjuntos de dados dourados com rótulos consistentes e precisos pode ser um desafio.

Capturar esses tipos de problemas durante a experimentação economiza tempo. Por exemplo, você não quer desenvolver os melhores recursos e modelos apenas para descobrir que eles não são viáveis na produção. Portanto, tente confirmar o mais cedo possível que sua solução funcionará dentro das restrições de um ambiente de produção. É melhor verificar se uma solução funciona em vez de precisar retornar à fase de experimentação, porque a fase do pipeline revelou problemas insuperáveis.