MLflow: primeiros passos em MLOps
Source: Dev.to
Introdução
Alcançar uma métrica excelente em um modelo de Machine Learning não é uma tarefa fácil. Imagine não conseguir reproduzir os resultados porque não lembra quais hiperparâmetros foram utilizados.
A ideia é sair do “treinei um modelo e deu certo” e entrar no mundo de MLOps, onde é possível:
- Rastrear experimentos
- Comparar execuções
- Armazenar artefatos
- Repetir o processo com confiança
MLOps é a prática de aplicar princípios de DevOps em projetos de ML. Ele envolve gerenciar o lifecycle de projetos de ML, desde a reprodutibilidade no desenvolvimento e treinamento até o deploy e monitoramento.
No desenvolvimento de software tradicional, o controle de versão de código (por exemplo, Git) costuma ser suficiente. Em ML, o resultado depende de Código + Dados + Hiperparâmetros.
Uma ferramenta dedicada pode facilitar a auditoria e colaboração dos modelos antes que o processo de experimentação se torne caótico. A ausência de um histórico estruturado impede a reprodutibilidade e a escalabilidade de qualquer projeto de IA.
O que é o MLflow?
O MLflow ajuda a aplicar MLOps para organizar o ciclo de vida de projetos de ML. Mesmo em um projeto simples, ele já cria um histórico de tudo o que foi feito em cada treino.
Na prática, o MLflow permite 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?
O MLflow surge para padronizar essa gestão. Neste documento focaremos nos três tipos de registros fundamentais:
| Tipo | Descrição |
|---|---|
| Parâmetros | Inputs de configuração (ex.: learning_rate, n_estimators) |
| Métricas | Resultados de performance (ex.: accuracy, log_loss) |
| Artefatos | Output binário (ex.: modelo salvo em .pkl ou .onnx) |
O MLflow transforma experimentação ad‑hoc em um sistema de registro auditável e padronizado.
Configuração simples do MLflow
Backend Store
SQLite (mlflow.db) – guarda metadados (experimentos, runs, parâmetros, métricas).
Artifact Store
File store (mlruns/) – guarda artefatos (modelos, plots, etc.).
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
Explicação dos parâmetros
| Parâmetro | Descrição |
|---|---|
mlflow server | Inicia o serviço do MLflow |
--backend-store-uri | SQLite é leve, ideal para a primeira iteração |
--default-artifact-root | Diretório onde serão armazenados os artefatos |
--host e --port | Endereço onde o servidor ficará disponível (também usado pela UI) |
Quando usamos SQLite + file store, dois componentes principais aparecem no diretório do MLflow:
mlflow.db– banco SQLite com metadados (experimentos, runs, parâmetros, métricas).mlruns/– pasta com os artefatos e o conteúdo das runs (modelos, plots, etc.).
Integração com Python
A biblioteca mlflow permite conectar ao servidor com pouco impacto no código. Basta definir a URI e usar mlflow.start_run().
import mlflow
import mlflow.sklearn
from sklearn.metrics import accuracy_score, recall_score
# Conecta ao tracking server
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("Customer_Churn_Experiment")
with mlflow.start_run():
# ----- Treinamento do modelo -----
# model = ... (seu código de treinamento aqui)
# Log de parâmetros
mlflow.log_param("max_depth", 10)
mlflow.log_param("n_estimators", 100)
# Avaliação
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
# Log de métricas
mlflow.log_metric("accuracy", acc)
mlflow.log_metric("recall", rec)
# Log do artefato (modelo)
mlflow.sklearn.log_model(model, "random_forest_model")
O que acontece na primeira execução?
- O experimento
Customer_Churn_Experimenté criado automaticamente. - Uma run é registrada.
- Parâmetros, métricas e artefatos são enviados para o tracking server.
Visualizando os resultados
Na UI do MLflow você verá:
- Params e Metrics rastreados
- Lista de runs com seus respectivos artefatos
Exemplo de parâmetros e métricas que registrei:
| Parâmetro | Valor |
|---|---|
n_estimators | 100 |
max_depth | 10 |
| Métrica | Valor |
|---|---|
accuracy | 0.85 |
recall | 0.78 |
Isso permite comparar execuções diferentes sem depender de print no terminal.
Caso de uso: comparação de hiperparâmetros
Realizei uma segunda interação alterando max_depth e n_estimators. Embora esperasse melhora, ao inspecionar a UI percebi que a métrica de accuracy caiu.
Lições aprendidas
| Pilar | O que o MLflow mostrou |
|---|---|
| Rastreabilidade | Prova empírica de que a mudança de hiperparâmetros gerou overfitting |
| Comparação Técnica | UI permite comparar visualmente as duas execuções |
| Reprodutibilidade | Artefato da versão anterior está registrado e pronto para deploy |
Benefícios gerais
- Divisor de águas: transforma a forma como gerenciamos a rastreabilidade no ciclo de vida de modelos.
- Facilidade de inspeção: é possível consultar o SQLite diretamente pela linha de comando.
- Base para MLOps avançado: o tracking é apenas o primeiro passo; em seguida vêm o Model Registry e o Model Serving.
Dominar o rastreamento de experimentos é o alicerce para implementar Continuous Training (CT) no futuro.
Repositório
O código completo deste projeto está disponível no meu GitHub:
mlops‑tel (substitua SEU_USUARIO pelo seu nome de usuário).
co-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!