DEV Community

Cássio Giehl
Cássio Giehl

Posted on

MLflow: primeiros passos em MLOps

Alcançar uma métrica excelente em um modelo de Machine Learning não é uma tarefa fácil, imagina não conseguir reproduzir os resultados por não lembrar quais hiperparâmetros foram utilizados

A ideia é sair do “treinei um modelo e deu certo” e entrar no mundo de MLOps, onde eu consigo rastrear experimentoscomparar execuçõesarmazenar artefatos e repetir o processo com confiança.

O que é MLOps?

MLOps é a pratica de aplicar princípios de DevOps em machine learning (ML) projects. O que envolve gerenciar o lifecycle de projetos de ML, desde restreabilidade no desenvolvimento de treinamento até o deploy, monitoramento.

No desenvolvimento de software tradicional, o controle de versão de código (como o git) é suficiente. Em ML, o resultado é o conjunto de desenvolvimento entre Código + Dados + Hiperparâmetros.

Uma ferramenta dedicada pode facilitar o processo de auditoria e colaboração dos modelos, antes do processo de experimentação se tornar caótico. A ausência de um histórico estruturado impede a reprodutibilidade e escala de qualquer projeto de IA.

O que é MLflow

O MLflow é uma ferramenta que ajuda a aplicar MLOps para organizar o ciclo de vida de projetos de ML. Mesmo num projeto simples, ele já ajuda muito porque cria um histórico do que foi feito em cada treino.

Na prática, o MLflow me ajuda a responder perguntas como:

  • Qual conjunto de parâmetros gerou a melhor métrica?
  • Quando eu rodei o treinamento e qual foi o resultado?
  • Onde está salvo o modelo treinado daquela execução?

MLflow como sua camada de Tracking

O MLflow surge para padronizar essa gestão. Nesse momento iremos focar nos três tipos de registros fundamentais:

  • Parâmetros: Inputs de configuração (ex: learning_rate, n_estimators)
  • Métricas: Resultados de performance (ex: accuracy, log_loss)
  • Artefatos: O output binário (o modelo treinado em .pkl ou .onnx)

O MLflow transforma experimentação ad-hoc em um sistema de registro auditável e padronizado.


Hands On: Setup do projeto

Como de costume, irei demonstrar como implementar uma configuração simples do MLFlow:

  • Backend Store: SQLite (um arquivo mlflow.db) para guardar metadados (experimentos, runs, params, metrics).
  • Artifact Store: File store (pasta mlruns/) para guardar artefatos (como o modelo salvo).

Setup do Servidor

# Instalação
pip install mlflow

# Inicialização do servidor
mlflow server \
    --backend-store-uri sqlite:///mlflow.db \
    --default-artifact-root ./mlruns \
    --host 0.0.0.0 \
    --port 5000
Enter fullscreen mode Exit fullscreen mode

Parâmetros:

  • mlflow server: inicia o serviço do mlflow
  • backend-store-uri: escolhi o sqlite por ser leve, ideal para primeira iteração com a ferramenta
  • default-artifact-root: path onde serão armazenados os metadados dos experimentos
  • host e port: caminho no qual o server estará disponível para conexão, inclusiva para uso via UI

Propriedades MLflow:

Quando uso SQLite + file store, é comum ver dois componentes principais no diretório do MLflow:

  • mlflow.db: banco SQLite com metadados. Armazena experimentos, runs, parâmetros e métricas.
  • mlruns/: pasta com os artefatos e o conteúdo das runs. Armazena modelos, plots, etc.


Integração no Script de Treino

A biblioteca mlflow do python nos permite conectar facilmente com a ferramenta, sem muito impacto no código, a integração é bem minimalista. Basta setar os parametros iniciais e usar mlflow.start_run():

import mlflow

mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("Customer_Churn_Experiment")

with mlflow.start_run():
    # Treino do modelo...
    mlflow.log_param("max_depth", 10)
    mlflow.log_metric("accuracy", 0.85)
    mlflow.sklearn.log_model(model, "random_forest_model")
Enter fullscreen mode Exit fullscreen mode

Neste cenário, a infraestrutura do MLflow foi desacoplada do código de treinamento, tornando necessária a configuração da URI da instância via set_tracking_uri.


Primeira Interação

Na primeira vez que eu rodo o meu script treinamento:

  1. O experimento Customer_Churn_Experiment é criado automaticamente

  2. Uma run é registrada

  3. Params, metrics e artifacts são enviados para o tracking server

Params e Metrics rastreados

No meu caso, registrei:

  • Paramsn_estimatorsmax_depth
  • Metricsaccuracyrecall
y_pred = model.predict(X_test)  
acc = accuracy_score(y_test, y_pred)  
rec = recall_score(y_test, y_pred)  

mlflow.log_param("n_estimators", n_estimators)  
mlflow.log_param("max_depth", max_depth)  
mlflow.log_metric("accuracy", acc)  
mlflow.log_metric("recall", rec)
Enter fullscreen mode Exit fullscreen mode

Isso me permite comparar execuções diferentes sem depender de print no terminal.


Segunda Interação

O valor real do MLOps aparece na análise comparativa entre os modelos que o cientista utilizou bem como o processo percorrido.

Nessa etapa, realizei uma segunda interação, alterando os valores dos hiperparâmetros max_depth e n_estimators. Embora esperasse uma melhora, ao inspecionar a UI do MLflow, percebi que a métrica de accuracy caiu.

Aqui pude perceber o poder real da ferramenta:

  • Rastreabilidade: Você tem a prova empírica de que a mudanca dos hiperparametros gerou overfitting

  • Comparação Técnica: Através da UI do MLflow, você compara as duas execuções

  • Pilar de Reprodutibilidade: Se precisar retornar à versão anterior, o artefato está registrado e pronto para deploy (aprofundarei mais sobre isso no futuro)

Se você ainda está surpreso com o que viu, saiba que essa ferramenta é realmente um divisor de águas. Ela transforma a forma como gerenciamos a rastreabilidade no ciclo de vida de modelos e simplifica a comparação entre diferentes versões, sendo essencial desde os primeiros testes até projetos construídos do zero.


Conferindo metadados no SQLite

Uma parte legal desse tipo de setup local é que eu consigo inspecionar o SQLite pela linha de comando.

  • Experimentos registrados no SQLite:

  • Parâmetros e métricas registrados:


Conclusão e Próximos Passos

Dominar a gestão do estado do modelo é um requisito fundamental na Engenharia de MLOps. Enquanto o MLflow soluciona a camada de tracking, o ciclo de vida se estende ao Model Registry e ao Model Serving. Em breve, exploraremos como essas etapas garantem a maturidade de um modelo em produção.

Dominar o rastreamento de experimentos é o alicerce fundamental para implementar Continuous Training (CT) no futuro.


Gostou dessa abordagem técnica?

Este projeto está disponível no meu GitHub: mlops-telco-churn-predict.

E você: já utiliza o MLflow no seu dia a dia? Na sua visão, qual é o maior desafio para garantir a reprodutibilidade total dos modelos?

Vamos debater nos comentários!

Top comments (0)