Utilizando o mlflow para gerenciar seus modelos de Machine Learning
English version available here
Já ouviu falar de mlflow? Vou te mostrar como ele simplifica o dia a dia no gerenciamento do ciclo de vida de modelos e como usar na prática,
⚠️ Spoiler Alert: você salva o modelo com uma linha de código e carrega com outra.🤭
Introdução
O mlflow é uma ferramenta open source para gerenciamento de ciclo de vida de modelos de machine learning, apoiando desde a etapa de experimentação até a implantação em produção.
Durante o desenvolvimento de modelos de machine learning, é comum que os modelos precisem ser treinados várias vezes com diferentes configurações e parâmetros para encontrar a melhor solução para um problema. Sem uma ferramenta de gerenciamento de ciclo de vida de modelos de machine learning, isso pode se tornar uma tarefa complicada e caótica. É difícil rastrear as diferentes versões do modelo, os parâmetros utilizados em cada treinamento e as métricas de desempenho associadas a cada modelo.
Além disso, sem uma ferramenta como o mlflow, pode ser difícil compartilhar modelos e resultados com colegas de equipe ou outras partes interessadas. Isso pode resultar em retrabalho, ineficiência e falta de transparência no processo de desenvolvimento de modelos de machine learning.
O mlflow ajuda a resolver esses problemas, fornecendo uma estrutura unificada para gerenciar experimentos de machine learning, rastrear os parâmetros de cada treinamento, acompanhar as métricas de desempenho e registrar os modelos resultantes. Ele também fornece ferramentas para implantar modelos em produção e monitorar seu desempenho ao longo do tempo.
Vale comentar também que o mlflow suporta vários frameworks de machine learning, como scikit-learn, xgboost, pyspark, TensorFlow, PyTorch, Keras, entre outros, permitindo que os desenvolvedores de modelos trabalhem com seus frameworks favoritos.
Mãos a obra - Código
Hoje, vou mostrar como salvar um modelo de exemplo no mlflow para que ele poder ser compartilhado e reutilizado em outros ambientes.
Parte 1— Salvando o modelo no mlflow de forma simples
Para usar o mlflow, é necessário instalar o pacote usando o terminal, execute o seguinte comando:
pip install mlflow
A seguir, vamos usar um código Python que treina um modelo de machine learning usando o dataset iris e que faça um regressão logística simples, armazenando os parâmetros utilizados no treinamento do modelo, as métricas avaliadas e salvando o modelo treinado!
import mlflow
import mlflow.sklearn
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# Carrega os dados
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.25, random_state=42)
# Inicia um experimento do MLflow
mlflow.set_experiment("Experimento de exemplo")
# Define os parâmetros
params = {"C": 0.5, "random_state": 42}
# Inicia o contexto do MLflow
with mlflow.start_run() as run:
# Cria o modelo
model = LogisticRegression(**params)
# Treina o modelo
model.fit(X_train, y_train)
# Avalia o modelo
score = model.score(X_test, y_test)
# Registra as métricas e parâmetros
mlflow.log_params(params)
mlflow.log_metrics({"score": score})
# Salva o modelo
mlflow.sklearn.log_model(model, "my_sample_model")
print("Carregue o modelo usando: ")
print(f"runs:/{ run.info.run_id }/my_sample_model")
Neste exemplo, é carregado o conjunto de dados Iris usando o load_iris()
, os dados são separados em conjuntos de treinamento e teste usando o train_test_split()
.
Agora, utilizando o mlflow de forma simples, é definido um experimento do mlflow, iniciado pelo uso do bloco mlflow.start_run()
.
É interessante adicionar neste bloco
mlflow.start_run()
o trecho de código que vai executar o treino do modelo, pois além de permitir que parâmetros, métricas e modelos sejam salvos, o mlflow também registra o tempo de processamento, você poderá comparar qual modelo rodou mais rápido também .
😉
O modelo é criado e treinado, com as métricas de avaliação sendo registradas com mlflow.log_metrics()
e os parâmetros sendo registrados com mlflow.log_params()
. Por fim, o modelo é salvo usando mlflow.sklearn.log_model()
.
Ao final, por simplicidade vamos usar o run_id, extraído do run.info.run_id
, para carregar o modelo na parte 2.
Parte 2 — Utilizando o modelo salvo para fazer a predição
Com o modelo já treinado, podemos reutilizá-lo e compartilhar com sua equipe, isso tudo usando apenas uma linha a mais de código!
Para fazer o carregamento do modelo, utilizaremos o mlflow.sklearn.load_model("runs:/<run_id>/my_sample_model")
, inserindo o run_id e nome do modelo que demos no exemplo do passo 1.
O run_id é gerado dinamicamente, então o seu deve ser diferente do snippet de código abaixo
import mlflow
import mlflow.sklearn
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# Carrega os mesmos dados (para fins de exemplo)
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.25, random_state=42)
# Carrega o modelo
# runs:/<run_id>/my_sample_model
model = mlflow.sklearn.load_model("runs:/0b719b54777041ab90f66d04d13b5893/my_sample_model")
# Realiza a predicao utilizando o modelo salvo
model.predict(X_test)
Você deverá obter um resultado de predições como:
array([1, 0, 2, 1, 1, 0, 1, 2, 1, 1, 2, 0, 0, 0, 0, 1, 2, 1, 1, 2, 0, 2,
0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 2, 1, 0])
Prontinho! Agora que você já conseguiu treinar um modelo, salvar utilizando o mlflow e carregar em outro arquivo, você já poderá compartilhá-lo com sua equipe!
Bônus - Interface Gráfica
O MLflow também fornece uma interface de usuário da Web para visualizar e comparar experimentos, permitindo que os usuários visualizem as métricas, gráficos de parâmetros, modelos salvos e outros artefatos associados a cada experimento.
Isso torna mais fácil compartilhar e colaborar em projetos de machine learning, permitindo que os usuários compartilhem seus experimentos com outras pessoas e vejam os resultados de diferentes experimentos de forma rápida e fácil.
Para iniciar, basta abrir o terminal e rodar mlflow server
, acessando o endereço http://127.0.0.1:5000
No exemplo, podemos ver que mesmo alterando o parâmetro C, obtemos um mesmo score, ou seja, o modelo não está deixando de aprender alterando este parâmetro, podendo ser uma oportunidade entender o porquê o score está constante. 🤓
Considerações finais
O mlflow é uma ferramenta essencial para gerenciar o ciclo de vida de modelos de machine learning, sendo uma evolução do antigo formato artesanal e despadronizado de salvar modelos, métricas e parâmetros.
A simplicidade de uso é uma vantagem notória do mlflow. A alteração de código para usar o mlflow é mínima, consiste em importar o pacote, iniciar o experimento e salvar tudo que for necessário, o mesmo se aplica para carregar o modelo salvo.Isso ajuda a tornar o desenvolvimento de modelos de machine learning mais eficiente, colaborativo e transparente.
Espero que o código de exemplo tenha te ajudado a aprender como usar mlflow de forma simples, mas não pare por aí, o mlflow oferece mais benefícios, consulte a documentação oficial para continuar sua jornada de aprendizado https://mlflow.org/docs/latest/index.html
Crie conexões:
Gostou do conteúdo? Vamos tomar um café, me adicione no LinkedIn para trocarmos ideias e compartilharmos conhecimentos!