Como Publicar um Modelo de Machine Learning em Produção?
A implantação de modelos de aprendizagem de máquina em produção pode ser feita de várias formas e um livro inteiro poderia ser escrito sobre este assunto. Mas pera aí. O que é “publicar um modelo em produção”?
Se você é a da área de TI, este termo deve ser bastante familiar, mas se você não for da área de tecnologia, aqui vai uma explicação simples: qualquer projeto de implantação de software passa pelas fases de estudo de viabilidade, desenvolvimento, teste, validação/homologação e então….implantação do software em produção, ou seja, quando o software é disponibilizado para resolver os problemas para os quais ele foi desenvolvido. É quando entregamos o software aos usuários finais, para que eles resolvam seus problemas de negócio.
Para as empresas que dependem fortemente da aprendizagem em máquina (e cada vez mais empresas estão usando Machine Learning como parte de sua estratégia corporativa), este é um assunto muito sério. Normalmente a divisão de Data Science da empresa possui toda uma equipe focada no desenvolvimento de uma plataforma de aprendizado de máquina para construção, treinamento e implantação de modelos preditivos. Essas empresas têm alguns dos seus funcionários mais brilhantes trabalhando em tempo integral apenas na infraestrutura e desenvolvimento de aprendizagem de máquina.
Quando você está treinando um modelo de Machine Learning, uma série de etapas são necessárias. Considerando que o problema de negócio já foi definido, você começa por coletar os dados das mais variadas fontes, desde arquivos texto, passando por Data Warehouses, até Data Lakes com o Apache Hadoop. Na sequência, vem a fase de análise exploratória de dados, limpeza e transformação, etapa crítica do processo e muitas vezes também chamada de Pré-processamento. Com os dados prontos, você alimenta um algoritmo de Machine Learning e treina o modelo. Isso pode ser feito usando frameworks em linguagens como R, Python, Scala ou Java. Você então ajusta os hiperparâmetros do modelo e repete esse ciclo algumas vezes. A próxima etapa é validar seu modelo apresentando-o a um novo conjunto de dados, chamado de dados de teste. Você avalia o nível de precisão do modelo nas previsões (taxa de acertos e erros) e pode repetir todo o processo até que o nível de precisão esteja entro do que foi estabelecido no seu projeto. Agora, você tem uma versão do seu modelo pronta para ser implantado em produção.
Todo esse processo tem muitas dificuldades potenciais e, hoje, se você deseja implantar um modelo de aprendizado de máquina, o rastreamento de cada uma dessas etapas para criar a versão final do modelo é muitas vezes um processo manual e parte fundamental do trabalho de um Cientista de Dados. Colocar o modelo em produção em geral é tarefa de um Engenheiro de Machine Learning.
Para implantar um modelo de aprendizado de máquina em produção, primeiro você precisará de uma maneira de “versionar” seus modelos para que você possa implantar novas versões imediatamente quando ocorrer alguma mudança (bem como você faz com aplicativos de software tradicionais). Para fazer isso, existem algumas ferramentas e veja na seção de referências ao final do post, algumas dicas.
As diferentes formas de implantar um modelo de Machine Learning em produção podem ser categorizadas ao longo de pelo menos duas dimensões. Essa matriz resume bem isso:
Em resumo, temos quatro formas principais de publicar um modelo de Machine Learning em produção: Web Service, Forecast, Online Learning e Automated ML. Mas precisamos fazer duas distinções aqui. Em primeiro lugar, precisamos distinguir sobre o tipo de aprendizagem. Existem duas maneiras de treinar modelos de aprendizagem de máquina:
Aprendizado offline: o modelo é treinado uma vez em dados históricos. Depois que o modelo é implantado em produção, ele permanece constante, embora seja possível reestruturar o modelo se ele se tornar instável, o que geralmente acontecerá.
Aprendizado online: o modelo está constantemente sendo atualizado à medida que novos dados chegam. Isto é especialmente útil para dados de séries temporais, como dados de sensores ou instrumentos financeiros, porque um algoritmo de aprendizagem online pode capturar efeitos temporais. Também é útil para sites com enormes quantidades de dados, como Google ou Amazon.
Em segundo lugar, precisamos distinguir sobre como o algoritmo faz previsões:
Previsões em lote (Batch Prediction): o algoritmo gera uma tabela de previsões com base em seus dados de entrada. Isso geralmente é bom o suficiente para dados que não dependem do tempo, ou quando a saída não precisa ser atualizada o tempo todo.
Previsões sob demanda (On-Demand Prediction): as previsões estão sendo feitas em tempo real usando os dados de entrada que estão disponíveis no momento da solicitação, que geralmente vem na forma de uma chamada REST.
Vamos discutir os workflows de implantação de modelos de Machine Learning sob a ótica destas duas dimensões, Prediction e Learning.
Prediction
A forma mais simples de workflow de aprendizagem de máquina é o processo de Previsões em Lotes (Batch Prediction). Isto é o que você normalmente encontra no meio acadêmico, em livros e nas competições de Data Science, como Kaggle. Você recebe um conjunto de dados estático, executa o seu modelo e produz uma previsão. E como levar seu modelo de Machine Learning para produção? Você pode salvar suas previsões em um arquivo CSV e então disponibilizar as previsões através de um gráfico ou Dashboard. Obviamente, isso tem limitações. O que você pode fazer é programar um serviço para executar o modelo em intervalos de tempo e gravar as previsões em um banco de dados. Isso pode ser mais útil do que você imagina. Seu Dashboard pode conectar neste banco de dados, extrair as previsões e apresentar os resultados regularmente para os tomadores de decisão!
Uma maneira mais comum de incorporar a aprendizagem de máquina em aplicações, é através de um Web Service. O modelo é treinado em dados históricos, mas usa novos dados para fazer previsões. Parece estranho classificar o Web Service como offline, como você viu na matriz acima, mas na verdade apenas o treinamento do modelo que é executado offline. O serviço sempre usa os dados mais recentes disponíveis para fazer previsões, mas o modelo permanece constante. O Web Service recebe alguns parâmetros e devolve as previsões imediatamente. Isso é muito mais ágil do que o esquema de previsão de lotes. A diferença de usar um Web Service, ao invés de usar o esquema de Batch Prediction, é que o Web Service é “quase” em tempo real e permite tratar os registros um por vez, e não todo o lote de dados de uma única vez. Isso pode ser mais útil em diversas situações.
Você pode até configurar um Web Service que desencadeia uma execução em lote. Abaixo uma imagem do que os alunos aprendem no curso Big Data Analytics com R e Microsoft Azure Machine Learning aqui na Data Science Academy. O processo criado no Azure Machine Learning, importa os dados, executa um modelo de Machine Learning usando script em linguagem R e grava as previsões. Dessa forma, podemos obter um conjunto completo de previsões sob demanda.
Um terceiro tipo de workflow para implantação de modelos de Machine Learning em produção que vem ganhando cada vez mais atenção é o Real-Time Streaming Analytics, estratégia que é estudada pelos nossos alunos no curso Big Data Real-Time Analytics com Python e Spark. Esse workflow funciona muito bem com a arquitetura lambda que é tão popular nos grandes sistemas de dados. Os dados de entrada neste caso são um fluxo contínuo de eventos e o modelo é colocado diretamente no “firehose” (termo em inglês usado para definir por onde passam os dados de forma contínua), executando o modelo nos dados quando ele entra no sistema. O modelo normalmente é executado como um serviço em um cluster Spark ou algo semelhante. Isso é muito útil para dados de sensores, por exemplo. Suponha que você esteja executando a detecção de anomalia em um milhão de dispositivos IoT ao mesmo tempo, você pode ser notificado imediatamente sempre que houver algo em relação a um de seus dispositivos.
Learning
A outra dimensão é o esquema de aprendizagem. Nós tendemos a pensar em modelos de aprendizagem de máquina como algo que você treina, implanta e esquece, mas não é bem assim. A aprendizagem online significa que seu modelo aprende, melhora e atualiza-se enquanto está em produção. Isso, obviamente, requer alguma engenharia, mas a recompensa é um modelo dinâmico. Uma versão ainda mais sofisticada disso é o aprendizado automatizado de máquinas (Automated ML). Isso inclui a automação de todo o processo de treinamento, seleção cruzada e seleção de modelo. Ao fazer isso, você pode ter um algoritmo que se recicle e faça previsões repetidas em intervalos, usando os dados mais recentes disponíveis para treinar o modelo e gerar previsões. Em vez de atualizar o modelo, você pode executar todo o pipeline de Machine Learning online em produção, que gera novos modelos à medida que aprende sobre os dados. Isso já vem sendo feito com técnicas avançadas de Inteligência Artificial, mas provavelmente ainda é o método menos utilizado dos quatro.
Para todos esses workflows, há também a questão de onde e como você gerencia seus modelos. Geralmente, é boa prática separar os modelos, isto é, os hiperparâmetros e os pesos das características, do resto do workflow. Existem estruturas de gerenciamento de modelo baseadas em bancos de dados SQL e APIs REST. Há também soluções como a biblioteca Openscoring, que usa uma linguagem de marcação conhecida como PMML (Predictive Model Markup Language) para armazenar modelos.
O modelo de micro-serviço (por exemplo, RESTful API) também é bastante popular, como uma opção para a publicação do modelo de Machine Learning em produção. Quando a robustez e a escalabilidade são uma preocupação (imagine centenas ou milhares de solicitação para um micro-serviço baseado em Python/R), pode ser razoável considerar a execução do modelo usando diferentes ferramentas. E se isso é algo que você precisa, dê uma olhada no PMML. O PMML é uma linguagem de marcação de modelo preditivo baseada em XML – que atua como o meio para salvar seu modelo preditivo, que pode então ser carregado e executado mais tarde pelos motores PMML, com alguns dos motores projetados para o caso de uso corporativo (maior rendimento e confiabilidade).
Exemplo Prático – Carros Autônomos da Tesla
É bem provável que você já tenha ouvido falar da Tesla de Elon Musk, a montadora de carros elétricos que recentemente superou a Ford em valor de mercado. A Tesla vem trabalhando em modelos de carros autônomos que em breve estarão nas ruas dos EUA e todos esses carros são baseados em Machine Learning, ou mais especificamente em um tipo de aprendizagem de máquina, o Deep Learning.
Depois que a empresa projeta e treina um modelo em um framework de Deep Learning (uma categoria específica de aprendizagem de máquina), o modelo é exportado para a ferramenta de inferência da NVIDIA – TensorRT – e compilado como uma biblioteca para inferência (previsões). O computador no carro autônomo, equipado com uma ou mais GPUs, Unidades de Processamento Gráfico (por exemplo, DrivePX2) tem um programa de controle fazendo uma chamada ao modelo cada vez que a inferência é necessária.
À medida que a câmera do carro autônomo vai detectando os objetos a sua volta e recebendo a leitura dos sensores, ele faz uma chamada ao TensorRT via API para fornecer a inferência – reconhecendo o que está na imagem ou produzindo os segmentos da imagem. Tudo é feito como chamadas de API C ++ e muitas vezes é em um sistema operacional em tempo real como o QNX. E isso pode ser feito mesmo se o modelo de Deep Learning for criado em linguagem Python. Esta é uma tecnologia de ponta que envolve a publicação do modelo de Machine Learning usando vários dos workflows que discutimos ao longo deste artigo. Muitos desses conceitos são estudados pelos nossos alunos nos cursos da Formação Inteligência Artificial, aqui na DSA.
Conclusão
Este é um assunto fascinante e poderíamos continuar citando vários outros exemplos. Mas nem citamos a prática simples de incorporar modelos de aprendizagem de máquina no software backend, embora normalmente esta seja a maneira mais flexível de publicar o modelo de Machine Learning na maioria das vezes. Poderíamos também discutir detalhadamente a importância de registrar o que acontece com um modelo, uma vez que ele está implantado e sendo usado. Mas isso fica para outro post.
Mas independente do workflow usado para publicar modelos de Machine Learning em produção, você precisa ser específico. O tipo de serviço que você está oferecendo afeta sua implantação. Por exemplo, implantar algoritmos de Deep Learning em um cluster de GPUs de alta densidade para aplicações de reconhecimento de voz é muito diferente do que implantar um classificador xgboost distribuído no Apache Spark em um cluster de máquinas mais simples para aplicações de detecção de fraudes. Como sempre, seu objetivo é que vai definir sua abordagem e as ferramentas que devem ser utilizadas.
Não existe ainda, um esquema genérico de implantação que corresponda a todos os problemas e a todas as empresas. Decidir quais práticas usar e implementá-las é o cerne da engenharia de aprendizagem de máquina. Os Cientistas de Dados tendem a concentrar-se fortemente em algoritmos, mas à medida que Machine Learning ganha cada vez mais espaço dentro das empresas, é preciso ter uma estratégia definida para publicar os modelos preditivos em produção.
Equipe DSA
Referências:
Openscoring – REST web service for scoring PMML models
How do you take a machine learning model to production?
[…] e agências governamentais estão contratando ativamente profissionais capacitados em IA e em Data Science. Isso inclui empresas, como a Capital One, a Fidelity, a Goldman Sachs, a Booz Allen Hamilton, a EY […]