Comment vetiver transforme un modèle R entraîné en API traçable, versionnée et déployable, sans réinventer un pipeline MLOps maison.

Un modèle qui tourne dans un notebook n'est pas un modèle en production. La question qui revient sans cesse en entreprise : comment passer d'un objet R entraîné (lm, xgboost, mlr3, recipes) à un service interrogeable, versionné, documenté, sans construire à la main une usine à gaz de scripts de déploiement. C'est exactement le problème que vetiver adresse, et les dernières évolutions du package élargissent sérieusement le terrain couvert.
Le principe de vetiver est simple : on empaquette un modèle entraîné avec ses métadonnées (type de modèle, packages requis, prototype des données d'entrée) dans un objet vetiver_model, on le stocke sur un board (local, S3, Posit Connect, et maintenant toutes les variantes de pin_board), puis on génère automatiquement une API plumber à partir de cet objet. Le support s'est étendu au fil des versions à xgboost dans toutes ses versions, à mlr3, à keras, recipes et luz. Concrètement, un data scientist qui a entraîné un xgboost avec mlr3 peut aujourd'hui suivre exactement le même chemin de déploiement qu'un collègue qui a un lm ou un GAM mgcv : même API, même contrat de données, même reproductibilité du prototype d'entrée.
Dans une organisation qui utilise BigQuery comme entrepôt de données, le couplage avec bigrquery prend tout son sens : on entraîne sur une requête SQL exécutée via bq_perform_query, on vérifie le schéma avec le prototype vetiver, et l'API expose un contrat clair à l'équipe applicative qui consomme les prédictions, sans qu'elle ait besoin de connaître BigQuery ou la mécanique du modèle. Les labels ajoutés aux jobs BigQuery permettent en prime de tracer le coût d'entraînement par projet, un détail qui compte quand plusieurs équipes partagent le même compte de facturation.
La mise en pratique reste accessible : créer le modèle, le pousser sur un board, générer le plumber.R avec vetiver_write_plumber, puis soit tourner en local, soit packager en Docker avec vetiver_prepare_docker pour un déploiement Cloud Run ou SageMaker. Le prototype des données d'entrée protège contre le cas classique où l'API reçoit un payload mal formé ; l'endpoint /metadata documente le modèle sans effort supplémentaire de rédaction.
Les limites existent. vetiver reste pensé pour des modèles tabulaires classiques, pas pour des pipelines de GenAI ou des modèles qui nécessitent un GPU persistant. La gestion du monitoring de drift reste un sujet adjacent, pas intégré nativement. Et pour des volumes de requêtes élevés, plumber seul montre vite ses limites de performance, ce qui pousse à l'associer à une couche Cloud Run avec autoscaling plutôt qu'à le considérer comme la solution finale.
L'avantage net de vetiver, c'est qu'il évite deux écueils fréquents : le déploiement fait à la main, fragile et non documenté, et la tentation de migrer tout le pipeline en Python sous prétexte que l'écosystème MLOps y serait plus mûr. Le fossé entre data science R et mise en production se referme un peu plus à chaque version.
library(vetiver) library(pins) # Modele xgboost entraine en amont (objet model) v <- vetiver_model( model = model, model_name = "churn_xgb", description = "Prediction de churn client, entraine sur extraction BigQuery" ) # Stockage versionne sur un board local (adapter en S3 ou Connect en production) board <- board_folder(path = "model_board") vetiver_pin_write(board, v) # Generation du fichier plumber pour servir le modele en API vetiver_write_plumber( board = board, name = "churn_xgb", file = "plumber.R" ) # Preparation des fichiers Docker pour deploiement (Cloud Run, par exemple) vetiver_prepare_docker( board = board, name = "churn_xgb", path = "." )
Le modèle est empaqueté avec ses métadonnées, versionné sur un board, puis exposé via une API plumber générée automatiquement et packagée en Docker pour un déploiement cloud.
vetiver fait gagner un temps réel sur la partie la plus pénible du déploiement, l'emballage et la documentation du modèle. Mais il faut le voir comme une brique, pas comme une plateforme : la supervision, le re-entraînement et l'autoscaling restent à construire autour.
→ Pour qui : Data scientists et data engineers qui doivent industrialiser des modèles R entraînés sur des données BigQuery ou dans des pipelines mlr3/tidymodels.
Le binding R de lightgbm continue d'évoluer en parallèle de xgboost, avec des performances souvent supérieures sur données catégorielles sans encodage préalable. Pour les équipes qui comparent systématiquement les deux moteurs sur des volumes de données importants, c'est un candidat à ne pas négliger lors du choix d'architecture.
Source : cran.r-project.org ↗Un bug de correspondance de motifs faisait que les jetons OAuth mis en cache sur disque n'étaient jamais purgés automatiquement, malgré la politique de nettoyage censée s'appliquer. Toute app Shiny ou pipeline qui s'authentifie régulièrement via OAuth (API internes, SaaS tiers) doit vérifier son dossier de cache après mise à jour.
Source : cran.r-project.org ↗Le framework de modélisation tidymodels abandonne le pipe magrittr au profit du pipe natif de R base, un signal de plus que l'écosystème tidyverse se détache progressivement de ses propres opérateurs historiques. Les tutoriels internes et templates d'entreprise basés sur magrittr méritent une relecture.
Source : cran.r-project.org ↗substitute() capture l'expression telle qu'elle a été écrite par l'appelant avant évaluation, utile pour construire des messages d'erreur ou des logs qui citent le nom exact de la variable fautive plutôt qu'une valeur anonyme.
verifier_positif <- function(x) {
nom <- deparse(substitute(x))
if (any(x < 0, na.rm = TRUE)) {
stop(sprintf("La variable '%s' contient des valeurs negatives", nom))
}
invisible(TRUE)
}
ventes_mensuelles <- c(120, -5, 300)
verifier_positif(ventes_mensuelles)Nous formons vos équipes à R, Shiny et l'IA, et industrialisons vos apps et modèles.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus