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
Iago Modesto Brandão

Written by Iago Modesto Brandão

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

No responses yet