Utilizando o mlflow para gerenciar seus modelos de Machine Learning

Iago Modesto Brandão
5 min readMay 5, 2023

--

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!

https://www.linkedin.com/in/iagombrandao

--

--

Iago Modesto Brandão

Passionate by tech and all possibilities, come with us to learn more and develop the next step of the world?