Joblib: Optimiser les workflows de Machine Learning grâce à la persistance des modèles
Pourquoi sauvegarder un modèle: partage, déploiement et reproductibilité
Sauvegarder un modèle est une étape essentielle dans tout projet de machine learning, car elle permet de capitaliser sur le travail déjà accompli. En effet, l’entraînement d’un modèle peut être coûteux en temps et en ressources (CPU, GPU, mémoire). Une fois qu’un modèle est entraîné et validé, il est inutile de recommencer ce processus à chaque utilisation. La sauvegarde permet de figer l’état du modèle (ses paramètres et ses poids) et de le réutiliser directement pour faire des prédictions.
De plus, la sauvegarde facilite le partage et le déploiement. Un modèle peut être transféré vers une autre machine, intégré dans une API, ou utilisé dans une application sans avoir besoin de réentraîner. Cela garantit aussi la reproductibilité car les résultats obtenus restent identiques, même si l’environnement ou les données évoluent. En résumé, sauvegarder un modèle, c’est assurer sa pérennité, sa portabilité et sa mise en production dans des conditions fiables.
Joblib: l’outil de référence pour scikit‑learn
Joblib est une bibliothèque Python conçue pour sérialiser efficacement les objets volumineux, en particulier ceux utilisés en machine learning classique (comme les modèles scikit‑learn ou les
pipelines contenant des matrices numpy). Elle permet de sauvegarder un modèle entraîné dans un fichier
.joblib et de le recharger plus tard sans avoir à refaire l’entraînement.
L'avantage principal de joblib est la rapidité et la compression optimisée pour les données numériques, ce qui en fait l’outil recommandé pour persister des modèles scikit‑learn.
Pickle, CSV et JSON: autres options de sauvegarde
Il existe toutefois d’autres techniques de sauvegarde en machine learning (hors deep learning). La plus courante est
pickle, qui peut sérialiser n’importe quel objet Python, mais qui est moins performant pour les gros tableaux.
Certains formats standards comme CSV ou JSON peuvent aussi être utilisés pour sauvegarder uniquement les paramètres ou les coefficients d’un modèle, mais ils ne permettent pas de restaurer directement l’objet complet.
En pratique, pour les workflows scikit‑learn, joblib est la solution privilégiée, tandis que pickle reste une alternative plus générique.
Exemple sauvegarde d'un modèle de Machine Learning avec joblib
Voici un exemple simple de sauvegarde d'un modèle entrainé sur le dataset Iris en utilisant la bibliothèque joblib:
import joblib
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
X, y = load_iris(return_X_y=True)
# Entrainement du modèle
model = RandomForestClassifier()
model.fit(X,y)
# Sauvegarder le modèle dans un fichier .joblib
joblib.dump(model,"iris_model.joblib")
print("Modèle sauvegardé dans iris_model.joblib")
Expliquons rapidement les points-clé de ce cet exemple:
Pour utiliser joblib, il suffit d’importer la bibliothèque en une ligne:
import joblib
La commande la plus importante dans notre exemple consiste à sauvegarder un modèle entraîné:
joblib.dump(model,"iris_model.joblib")
Ici,
model est l’objet scikit‑learn que l'on veut conserver et "iris_model.joblib" est le nom du fichier qui contiendra le modèle (avec l'extension .joblib).
Exemple chargement du modèle entrainé avec joblib
Je propose ce code:
import joblib
# Charger le modèle sauvegardé
loaded_model = joblib.load("iris_model.joblib")
# Faire une prédiction
sample = [[5.1, 3.5, 1.4, 0.2]]
prediction = loaded_model.predict(sample)
print("Prédiction:", prediction)
Vous avez peut être remarqué que nous avons appelé loaded_model.predict() (qui recharge le modèle sauvegardé) sans refaire d’importation explicite du modèle utilisé (
RandomForestClassifier).
En réalité, lorsque l'on recharges le modèle avec
joblib.load("iris_model.joblib"), on n’a pas besoin de ré‑importer explicitement la classe
RandomForestClassifier depuis
sklearn.ensemble. En effet, le fichier
.joblib contient déjà l’objet complet du modèle entraîné avec sa structure interne, ses paramètres et ses méthodes (fit, predict...).
En d’autres termes, joblib ne sauvegarde pas seulement les poids ou les coefficients, mais l’instance entière du modèle. Quand on le recharge, Python retrouve directement l’objet tel qu’il était, prêt à être utilisé.
Il est également possible de sauvegarder et recharger un pipeline scikit‑learn avec joblib. La syntaxe reste identique à celle utilisée pour un modèle classique: il suffit simplement de remplacer l’instance du modèle par l’instance du pipeline. Ainsi, on peut conserver non seulement l’algorithme d’apprentissage, mais aussi toutes les étapes de prétraitement (transformations, normalisations, encodages) et les réutiliser directement pour des prédictions.
En résumé, les avantages de Joblib sont multiples: en plus de permettre la sauvegarde et la réutilisation d’un modèle sans réentraînement, il offre la possibilité de déployer facilement ce modèle dans une API ou une application. Cela signifie que le travail effectué lors de l’entraînement peut être directement exploité en production, sans perte de temps ni de ressources. Joblib garantit aussi la portabilité du modèle (on peut le partager entre différentes machines ou environnements) et la reproductibilité des résultats, ce qui est essentiel pour assurer la fiabilité d’un projet de machine learning.