Como industrializar o desenvolvimento de IA montando uma plataforma MLOps Open Source?
I – O que é MLOps?
O MLOps, ou DevOps para Machine Learning, está se tornando um elemento indispensável para a implantação eficiente da inteligência artificial (IA) em larga escala. Há alguns anos, o principal desafio residia na transição de um simples protótipo ou prova de conceito para uma aplicação real, implantada e funcional. Contudo, os desafios evoluíram e se tornaram complexos muito rapidamente.
No contexto atual, os projetos de IA enfrentam uma dinâmica acelerada de mudança, tanto no que diz respeito aos dados quanto às necessidades de negócio. Os dados podem mudar rapidamente, tanto em volume quanto em natureza, e as exigências de negócio podem evoluir com a mesma velocidade, exigindo ajustes constantes nos modelos de IA para que permaneçam relevantes e eficazes. É preciso conseguir se adaptar às restrições do mercado modificando os modelos de IA rapidamente, garantindo ao mesmo tempo seu desempenho.
Por que MLOps?
É aí que as práticas de MLOps entram em cena. Elas propõem um framework para a gestão e a orquestração dos modelos de IA, permitindo um desenvolvimento contínuo, uma atualização e um processo de otimização fluido, bem como o monitoramento de seu desempenho. Graças à adoção crescente dessas práticas, os desafios relacionados à escalabilidade dos projetos de IA, à gestão das mudanças rápidas nos dados e à resposta às necessidades de negócio em constante evolução podem ser enfrentados com eficiência.
Em resumo, o MLOps é agora essencial para garantir a perenidade e a eficiência das soluções baseadas em IA em um ambiente cada vez mais dinâmico. O MLOps faz a ponte entre a experimentação e a colocação em produção, permitindo o desenvolvimento, a implantação e a gestão de modelos de ML em larga escala, ao mesmo tempo em que favorece a colaboração, a reprodutibilidade e a confiabilidade.
Principais desafios
Apesar de uma adoção crescente, o MLOps enfrenta diversos desafios que se materializam em torno de três pilares:
• Facilitar a colaboração e a troca entre as diversas equipes
O primeiro desafio é eliminar os possíveis silos entre Data Scientists, Data Engineers, equipes de DevOps, e até mesmo dentro de uma mesma equipe (frequentemente falamos de silos). Essa abordagem envolve principalmente a criação de espaços de desenvolvimento compartilhados e a implementação de procedimentos de trabalho padronizados.
• Garantir a reprodutibilidade dos resultados e gerenciar o ciclo de vida dos modelos
Perguntas inevitavelmente surgem: como orquestrar cada uma das minhas experimentações? Por que meu modelo não reflete mais a realidade? Como garantir que ele está sempre atualizado e como lidar com anomalias nos dados? É difícil responder a essas perguntas quando os processos de tratamento não são reprodutíveis e as execuções não são rastreáveis. O contexto em que os modelos são frequentemente levados a evoluir exige que sua transição seja gerenciada de forma fluida, sem prejudicar o funcionamento existente.
• Escalabilidade e implantação em larga escala
A industrialização e a garantia da durabilidade das implantações são aspectos cruciais. Como posso implantar meu modelo para responder eficientemente ao meu problema de negócio? Como posso garantir a confiabilidade do meu serviço e reduzir os custos de operação? A resposta está na automação das implantações (quando viável), na escalabilidade dinâmica da infraestrutura e dos serviços, e no estabelecimento de sistemas de monitoramento e alerta.
II – Uma arquitetura MLOps Open Source
Nossas restrições para uma plataforma MLOps
Cada organização apresenta exigências e restrições específicas que podem afetar a arquitetura da plataforma MLOps. Na nossa situação, identificamos as seguintes características:
• Adoção de componentes open source: isso permite não apenas evitar os custos associados a licenças, mas também evitar o aprisionamento por um fornecedor, mantendo o controle sobre as ferramentas implantadas.
• Controle total dos dados: o uso de serviços gerenciados na nuvem (como AWS Sagemaker, Vertex AI, etc.) não é uma opção viável.
• Redução ao mínimo das operações manuais (DEVOPS)
Automação máxima das tarefas relacionadas à implantação dos serviços, à configuração e à manutenção
Diminuição da interdependência entre os componentes para simplificar os procedimentos de resolução de problemas e minimizar o impacto potencial de uma falha ou de uma operação de manutenção.
Uso exclusivo dos componentes indispensáveis (segundo o princípio YAGNI - "You Aren't Gonna Need It"), pois a adição de componentes suplementares aumenta a necessidade de intervenções.
Uma plataforma MLOps Open Source

As funções atendidas por esta plataforma são:
Extrair e transformar automaticamente os dados garantindo sua conformidadeDesenvolver e experimentar em um ambiente colaborativoAutomatizar, orquestrar e acompanhar a execução das cadeias de tratamento e aprendizadoDesenvolver os modelos de maneira colaborativa, rastreável e reprodutívelRealizar previsões automaticamente com os modelosAcompanhar seu desempenho (sem necessidade de tempo real)
Para implementá-las, vamos nos dedicar a implantar os seguintes componentes:
Experiment tracking
O rastreamento de experimentos consiste em registrar e monitorar todos os experimentos realizados. Em outras palavras, trata-se de criar e conservar metadados associados aos modelos (por exemplo, as métricas, a data do treinamento, o volume dos dados, os artefatos...) e também de documentar sistematicamente todas as execuções das sessões de treinamento.
Ambiente de experimentação colaborativo & Templating
Um hub central deve servir para unificar todos os ambientes de desenvolvimento dentro de um projeto. Isso significa que os membros de uma equipe utilizam as mesmas ferramentas e as mesmas configurações, facilitando a comunicação, tornando o fluxo de trabalho mais fluido e reduzindo o risco de problemas de configuração.
O aspecto colaborativo de um projeto favorece o compartilhamento de um ambiente comum dentro de uma equipe, permite a centralização do trabalho realizado, facilita o compartilhamento de ideias e oferece uma visão clara e em tempo real das contribuições de cada membro da equipe.
Orquestração & Automação
É necessário organizar e monitorar as diferentes etapas entre a ingestão dos dados até o serving do modelo de ML. Um orquestrador vai proporcionar uma visão e um controle sobre todo o processo. Para automatizar a execução dos diferentes blocos do projeto, ele precisa conhecer as dependências entre cada um, possibilitando a representação em forma de grafo das diferentes etapas.
Model Versioning / Registry
Quando várias versões de modelos são implantadas, é crucial poder acompanhar o ciclo de vida de cada uma delas. Da mesma forma que no desenvolvimento de software, elas geralmente passam por várias etapas: desenvolvimento, staging e produção. Além disso, é importante poder centralizar os arquivos de modelos, os pacotes e o código em um mesmo espaço para ter uma gestão global destes.
Serving de modelos
Servir os modelos de machine learning significa disponibilizá-los com o objetivo de utilizá-los para realizar previsões. Estas podem ser feitas em tempo real, em batch ou em streaming. Os principais pontos de atenção estão no nível da facilidade de implantação (Preciso criar um serviço do zero? Usar algo existente?), da resiliência (Meu serviço consegue escalar?) e do acompanhamento/integração contínua (Posso automatizar a implantação de uma nova versão?).
Revisão dos componentes utilizados
a) Coder com JupyterLab & VSCode
A plataforma Coder é um hub que permite gerenciar ambientes de desenvolvimento com o uso de templates. Ela oferece a cada pessoa suas próprias ferramentas remotas configuradas de maneira unificada. Isso evita problemas relacionados a diferenças de configuração entre estações de trabalho. VSCode e JupyterLab são duas ferramentas disponíveis em seu interior, oferecendo um serviço de notebooking e uma IDE no mesmo lugar. Além disso, possibilidades de colaboração são oferecidas via compartilhamento de espaço de trabalho.
b) MLFlow
MLFlow é uma ferramenta open source de historização de experimentações, gestão de modelos e serving muito popular. Dentro dele, cada experimento é organizado em forma de runs que representam, cada um, uma execução única do script de treinamento. Os usuários podem associar parâmetros (hiperparâmetros do modelo, learning rate...), métricas de medição de desempenho e artefatos (arquivos, gráficos...).
Uma interface web permite visualizar e comparar os experimentos, simplificando a colaboração entre Data Scientists e o acompanhamento dos avanços. Além disso, ela também pode ser utilizada para monitorar as execuções automáticas dos pipelines de treinamento quando os modelos estão em produção.
O módulo Model Registry do MLFlow permite atender a essa necessidade, propondo um hub centralizado, apresentado em forma de catálogo de modelos com cada uma de suas versões.

É fácil passar uma versão de uma etapa para outra (de staging para produção, por exemplo) e é possível adicionar tags, comentários e métricas a cada uma delas para facilitar a comparação.
MLFlow Models permite servir os modelos e realizar previsões. Ele simplifica o processo de implantação propondo uma abordagem padronizada e modelos em forma de pacotes utilizáveis para inferência via API REST ou por batch (com o auxílio do Apache Spark, por exemplo). Além disso, existem integrações com diversos frameworks populares de machine learning: PyTorch, Spark MLlib, XGBoost...

c) Airflow
Apache Airflow é uma plataforma open source para criar, agendar e monitorar workflows. Cada workflow é um DAG (grafo acíclico dirigido) representando as diferentes etapas do processo. As etapas podem ser criadas tanto com funções quanto com operadores predefinidos, permitindo uma integração fácil com outros componentes.
No exemplo acima, o workflow está contido na função download_rocket_launch(), na qual o decorador @dag é passado para sinalizar ao Airflow a presença de um DAG. O Airflow fornece uma interface web para monitorar e agendar os diferentes DAGs da infraestrutura. É a interface principal a ser utilizada para gerenciar o Airflow, executar os workflows e agendá-los.

d) Airbyte / DBT
Airbyte é uma ferramenta open source que permite extrair e carregar dados. Ela dispõe de uma UI moderna para visualizar e gerenciar as conexões. Integra-se com orquestradores como Airflow, Prefect ou Dagster e pode ser acoplada ao DBT (também open source) para realizar o T (Transformação) de um ELT. As conexões Airbyte são definidas em arquivos de configuração que podem ser gerados via o cliente octavia, especificando os diferentes parâmetros.
É possível especificar dentro de uma conexão Airbyte uma transformação de dados a ser aplicada:
Em associação com o Airbyte, o DBT permite definir Data Models As Code, além de documentá-los, versioná-los e testá-los. É uma ferramenta leve que vai traduzir o SQL de seus modelos diretamente nos datastores para realizar suas transformações. É possível variabilizar seu SQL via Jinja, trazendo mais flexibilidade, como no exemplo a seguir:
Conclusão
A implementação de uma plataforma MLOps foi realizada seguindo uma série de fases-chave:
• A identificação das restrições específicas ao nosso ambiente
• A definição das necessidades essenciais para estimular o desenvolvimento
• A instalação e a montagem dos componentes individuais de forma progressiva e independente
Tiramos deste projeto um aprendizado importante: embora certas ferramentas possam cobrir uma ampla gama de funções, não existe uma solução universal para o MLOps. É essencial manter flexibilidade na seleção dos componentes. O MLOps é um campo de atividade recente, em constante evolução, e devemos esperar que as ferramentas e tecnologias disponíveis mudem com o tempo. Para acelerar a implantação de projetos de IA, é crucial adotar os princípios fundamentais do MLOps (automação, colaboração, rastreabilidade, escalabilidade, etc.), com a plataforma atuando como o motor principal dessa implementação.
A plataforma descrita neste artigo foi implementada para as necessidades de um projeto cliente, você pode consultar o código associado no GitHub e nos contatar. ;)





