UFPE
“Mais da metade (50%) dos modelos Aprendizagem de Máquina criados pelas organizações hoje nunca chegam à produção.” - Introducing MLOps
Fonte: “Hidden Technical Debt in Machine Learning Systems”, Google (2015)
Atualmente no mercado de trabalho, nomenclaturas estão surgindo para diferenciar as áreas que trabalham com dados. As mais frequentes atualmente são:
Atualmente no mercado de trabalho, nomenclaturas estão surgindo para diferenciar as áreas que trabalham com dados. As mais frequentes atualmente são:
Visão Simplista
Visão Realista
MLOps (Machine Learning Operations) é a padronização e otimização do ciclo de vida para modelos de Aprendizado de Máquina.
Existe uma área chamada DevOps (Desenvolvimento + Operações) que surgiu para resolver problemas similares no desenvolvimento de software tradicional.
O ciclo de vida de MLOps pode ser dividido em cinco componentes principais, que formam um ciclo contínuo.
.rds
em R) em um artefato implantável.
tidymodels
tidymodels
é um conjunto de pacotes R
para modelagem que compartilham uma filosofia de design, gramática e estruturas de dados consistentes.
Os pacotes desse ecossistema nos ajuda a seguir as melhores práticas desde o início.
tidymodels
para MLOps
rsample
: Para divisão de dados (treino/validação/teste) e processo de reamostragem e validação cruzada.recipes
: Para pré-processamento dos dados de forma reprodutível. Uma estrutura criada com funções do recipes
pode ser aplicada consistentemente a novos dados.parsnip
: Uma interface auxilia na criação do pipeline e é possível utilizar diferentes pacotes que possuem métodos.tune
: Para otimização de hiperparâmetros.yardstick
: Para avaliar a performance do modelo com métricas padronizadas.workflows
: Para juntar os procesos anteriores e criação de um pipeline completo, simplificando o processo.meus_dados <- iris
# 1. Dividir os dados
set.seed(123)
data_split <- initial_split(meus_dados, prop = 0.8)
train_data <- training(data_split); test_data <- testing(data_split)
# 2. Criar pré-processamento
minha_receita <- recipe(Species ~ ., data = train_data) |>
step_impute_median(all_numeric_predictors()) |>
step_normalize(all_predictors())
# 3. Especificar o modelo
rf_model <- rand_forest(trees = 100) |>
set_engine("ranger") |> set_mode("classification")
# 4. Criar o workflow
meu_workflow <- workflow() |>
add_recipe(minha_receita) |>
add_model(rf_model)
# 5. Treinar o modelo
modelo_final <- meu_workflow |> fit(data = train_data)
Benefício MLOps: O objeto modelo_final
contém tanto o pré-processamento quanto o modelo. Ele pode ser salvo e aplicado a novos dados de forma consistente.
renv
Problema: Seu modelo funciona hoje, mas daqui a 6 meses, após atualizar o R ou os pacotes, ele pode quebrar, para de funcionar por mudanças na linguagem de programação e pacotes, ou começar a gerar resultados diferentes.
A solução: O pacote renv
cria uma biblioteca de pacotes isolada e específica para o seu projeto.
renv::init()
: Inicia um novo ambiente.renv::snapshot()
: Salva o estado atual dos pacotes em um arquivo renv.lock
.renv::restore()
: Restaura a biblioteca de pacotes a partir do renv.lock
.Isso garante reprodutibilidade computacional, um pilar do MLOps. Combine o renv.lock
com o Git para ter um histórico completo do seu ambiente.
Modelo em Produção: É um modelo que está ativamente fazendo predições em dados reais para suportar uma decisão de negócio.
Isso pode significar:
O desafio: Como pegar o
modelo_final
que criamos no R e torná-lo disponível para outros sistemas?
2. Criar uma API com plumber
: plumber
transforma funções R em endpoints de uma API web com poucas linhas de código.
vetiver
: Um Framework MLOps para R
O pacote vetiver
foi criado para simplificar o MLOps em R.
vetiver
abstrai muitos passos, como criar o endpoint, documentar a API (com OpenAPI/Swagger) e verificar os tipos de dados de entrada.
library(vetiver)
# 1. Crie um "objeto de modelo" vetiver
v <- vetiver_model(modelo_final, "meu_modelo_rf")
# 2. Versione o modelo em um "board" (ex: uma pasta, S3, etc)
library(pins)
board <- board_folder("model_versions")
vetiver_pin_write(board, v)
# 3. Crie uma API plumber a partir do objeto vetiver
pr() |>
vetiver_api(v) |>
pr_run()
vetiver
: Um Framework MLOps para R
Fonte: https://vetiver.posit.co/
Para garantir que a API rode em qualquer lugar, podemos “empacotá-la” em um container Docker.
Nesse caso precisamos de um aquivo chamado Dockerfile que descreve o ambiente.
# Usar uma imagem base com R e plumber
FROM rstudio/plumber
# Instalar dependências do sistema
RUN apt-get update && apt-get install -y ...
# Copiar o ambiente renv
COPY renv.lock .
COPY renv/ .
RUN R -e "renv::restore()"
# Copiar a API e o modelo
COPY api.R .
COPY modelo_final.rds .
# Expor a porta e rodar a API
EXPOSE 8000
ENTRYPOINT ["R", "-e", "pr <- plumber::plumb('api.R'); pr$run(host='0.0.0.0', port=8000)"]
Isso cria um ambiente isolado e 100% reprodutível para o nosso modelo.
1. Logging: Cada predição feita pela sua API deve ser registrada. O que registrar?
2. Dashboards de Monitoramento: Use ferramentas como Shiny
ou R Markdown para criar dashboards que visualizam as métricas do modelo ao longo do tempo.
Métricas de Performance do Modelo
(Requerem valores verdadeiros)
Métricas de Drift de Dados
(Não requerem valores verdadeiros)
Quando o monitoramento detecta uma queda de performance, o retreinamento pode ser necessário.
Estratégias:
Validação do Novo Modelo: O modelo retreinado deve sempre ser comparado ao modelo antigo em um conjunto de dados de validação. Ele só vai para produção se for melhor.
É a prática de projetar, desenvolver e implantar sistemas de IA, modelos de Aprendizado de Máquina de forma segura, confiável e ética.
Pilares Principais:
“Bias in, bias out.”
Se os dados de treinamento refletem vieses históricos da sociedade, o modelo aprenderá e amplificará esses vieses.
Exemplos:
fairness
e fairmodels
: Pacotes para auditar e mitigar vieses em modelos de classificação. Eles ajudam a medir se o seu modelo tem performance diferente para diferentes grupos (ex: por gênero, etnia).DALEX
(Descriptive Machine Learning Explanations): Um pacote para explicabilidade. Permite entender como as variáveis influenciam as predições.
lime
: Para explicações locais (por que esta predição específica foi feita?).ExplaineR
: Para utilização do SHAP (SHapley Additive exPlanations), um outro método para explicabilidade.Uma parte crucial da governança é documentar seus modelos. O que documentar?
vetiver
ajuda a gerar automaticamente parte dessa documentação, como as features de entrada esperadas.
CI/CD (Continuous Integration / Continuous Deployment) é a automação de todo o fluxo.
GitHub Actions é uma ferramenta popular para isso. Podemos criar um workflow que:
renv
.vetiver
/pins
.# .github/workflows/retrain-model.yml
name: Retrain and Deploy Model
on:
schedule:
- cron: '0 0 * * 1' # Toda segunda-feira à meia-noite
jobs:
retrain:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: r-lib/actions/setup-r@v2
- uses: r-lib/actions/setup-renv@v2
- name: Retrain Model
run: Rscript -e "source('scripts/retrain.R')"
- name: Deploy if better
# Script que compara modelos e faz o deploy
run: Rscript -e "source('scripts/deploy.R')"
tidymodels
, renv
, plumber
, vetiver
e shiny
cobrem todo o ciclo de vida.Git
+ renv
) desde o início. Automatize gradualmente.Treveil, Mark, et al. Introducing MLOps. O’Reilly Media, 2020.
Sculley, David, et al. “Hidden technical debt in machine learning systems.” Advances in neural information processing systems 28 (2015).
Kuhn, Max, and Julia Silge. Tidy modeling with R: A framework for modeling in the tidyverse. ” O’Reilly Media, Inc.”, 2022.
Wisniewski, Jakub, and Przemyslaw Biecek. “fairmodels: a Flexible Tool for Bias Detection, Visualization, and Mitigation in Binary Classification Models.” R J. 14.1 (2022): 227-243.
vetiver - https://github.com/rstudio/vetiver-r
e-mail: jodavid.ferreira@ufpe.br
Site Pessoal: https://jodavid.github.io/
Lattes: http://lattes.cnpq.br/4617170601890026
LinkedIn: jodavidferreira
Computational Agriculture Statistics Laboratory - UFPE
OBRIGADO!
Slide produzido com quarto
Gerenciamento Operacional de Modelos (MLOps) de Aprendizado de Máquina com R - Jodavid Ferreira