Meilleures pratiques pour stocker des modèles d'apprentissage automatique Python


24

Quelles sont les meilleures pratiques pour enregistrer, stocker et partager des modèles d'apprentissage automatique?

En Python, nous stockons généralement la représentation binaire du modèle, en utilisant pickle ou joblib. Dans mon cas, les modèles peuvent être ~ 100Mo grands. En outre, joblib peut enregistrer un modèle dans plusieurs fichiers, sauf si vous définissez compress=1( /programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-files-which-one-is-the- corre ).

Mais alors, si vous voulez contrôler les droits d'accès aux modèles et pouvoir utiliser des modèles à partir de différentes machines, quelle est la meilleure façon de les stocker?

J'ai quelques choix:


Avez-vous trouvé un moyen efficace de le faire?
iNet

Réponses:



2

J'ai fait face à ce problème (et le suis toujours aujourd'hui) pendant de nombreuses années. Je pense vraiment que si vous ne fournissez pas d'exigences détaillées, vous ne pouvez pas vous attendre à une réponse sérieuse. Je m'explique avec des exemples de mon travail:

  • J'essaie régulièrement plusieurs variantes du même modèle pour trouver les paramètres qui fonctionnent le mieux. Il faut plusieurs jours pour former un seul modèle qui produit des résultats qui seront ensuite utilisés pour l'évaluation. Pour ce faire, je fais un simple vidage NumPy du modèle car il est facile de le partager entre serveurs, ou collègues. Vous devez éviter le cornichon car il stocke beaucoup plus (instances de classe, bibliothèques ...) que les seuls paramètres appris par votre modèle. L'importation du modèle sur une autre machine peut ne pas fonctionner si l'environnement python diffère légèrement.

  • Lorsque je pousse un modèle en production, j'ai besoin 1) d'une version du modèle que je peux charger rapidement en cas de panne de serveur (généralement un format binaire, ne stockant que ce qui est nécessaire, comme les poids d'un réseau de neurones) et 2) a moyen de conserver le modèle dans la RAM pour traiter rapidement les demandes d'API.

Pour deux raisons différentes, j'ai besoin de trois formats différents. Ensuite, plus généralement, le choix du format dépend des outils que vous utilisez. Par exemple, si vous travaillez avec TensorFlow, vous pourriez être intéressé par leur système de service TensorFlow


1

Je voudrais suggérer 2 autres approches.

  1. Stockez-les dans le stockage de documents (par exemple, mongoDB) - cette méthode est recommandée lorsque vos fichiers de modèle sont inférieurs à 16 Mo (ou les fragments de joblib le sont), vous pouvez alors stocker le modèle sous forme de données binaires. en outre, certaines bibliothèques ML prennent en charge l'exportation et l'importation de modèles dans json (par exemple LightGBM), ce qui en fait un candidat idéal pour le stockage dans le stockage de documents. Avantages : suivi facile de la génération du modèle et accès facile, Inconvénients : les choses deviendront compliquées si l'objet du modèle est trop grand.

  2. Stockez votre modèle sur le stockage d'objets (par exemple Amazon S3) - cette méthode est bonne si vos modèles sont très grands, dans ce cas, vous obtenez un stockage illimité et une API assez facile, vous payez plus, c'est sûr. Avantages : espace illimité et possibilité de stocker des formats de fichiers arbitraires. Inconvénients : le coût et le fait que pour le faire correctement, vous devrez développer votre propre système de suivi.

bonne chance!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.