Overview
Une personne de Mercari a publié de merveilleuses connaissances liées au développement et au fonctionnement de l'apprentissage automatique. https://mercari.github.io/ml-system-design-pattern/README_ja.html Développons un peu la gestion du modèle.
Tout d'abord, laissez-moi vous donner une vue d'ensemble. https://github.com/arc279/model-in-package-sample Je veux dire, c'est tout.
Ce qui suit est une explication des principaux points. Je n'expliquerai pas les outils de configuration, veuillez donc rechercher chacun d'eux sur Google si nécessaire.
L'environnement d'exécution de l'exemple est
(.venv) $ python -V
Python 3.8.1
Je l'envoie à.
Il y a quelque temps, dans la zone setuptools
, des choses comme package_data
et data_files
étaient compliquées, mais
Récemment MANIFEST.in et [importlib.resources](https: // docs) Il semble qu'il ait convergé vers .python.org / ja / 3 / library / importlib.html # module-importlib.resources).
Notez que ʻimportlib.resources a été ajouté depuis python 3.7, et les anciennes versions vous obligent à utiliser quelque chose comme
pkg_resources. Pour être honnête, ce n'est pas facile à utiliser, donc si possible, utilisez ʻimportlib.resources
dans la version 3.7 ou ultérieure.
Veuillez consulter cette zone pour savoir comment l'utiliser.
https://github.com/arc279/model-in-package-sample/blob/master/MANIFEST.in https://github.com/arc279/model-in-package-sample/blob/master/src/mymodel/init.py#L5
Il contient un fichier * .pkl
.
$ python setup.py bdist_wheel
(..snip..)
$ zipinfo -1 dist/mymodel-1.1.1_titanic.from_kaggle-py3-none-any.whl
mymodel/__init__.py
mymodel/version.py
mymodel/titanic_sample/__init__.py
mymodel/titanic_sample/models/__init__.py
mymodel/titanic_sample/models/LogisticRegression/__init__.py
mymodel/titanic_sample/models/LogisticRegression/model.pkl
mymodel/titanic_sample/models/RandomForestClassifier/__init__.py
mymodel/titanic_sample/models/RandomForestClassifier/model.pkl
mymodel/titanic_sample/models/SVC/__init__.py
mymodel/titanic_sample/models/SVC/model.pkl
mymodel/titanic_sample/models/SVC/__pycache__/__init__.cpython-38.pyc
mymodel/titanic_sample/models/__pycache__/__init__.cpython-38.pyc
mymodel-1.1.1_titanic.from_kaggle.dist-info/METADATA
mymodel-1.1.1_titanic.from_kaggle.dist-info/WHEEL
mymodel-1.1.1_titanic.from_kaggle.dist-info/top_level.txt
mymodel-1.1.1_titanic.from_kaggle.dist-info/RECORD
Une fois qu'il est emballé dans une roue, il peut être mis avec un pip.
(.venv) $ pip install dist/mymodel-1.1.1_titanic.from_kaggle-py3-none-any.whl
(..snip..)
(.venv) $ pip list
Package Version
--------------- -------------------------
joblib 0.15.1
mymodel 1.1.1-titanic.from-kaggle
numpy 1.18.5
pandas 1.0.4
pip 19.2.3
python-dateutil 2.8.1
pytz 2020.1
scikit-learn 0.23.1
scipy 1.4.1
setuptools 41.2.0
six 1.15.0
threadpoolctl 2.1.0
wheel 0.34.2
(.venv) $ ipython
In [1]: import mymodel
In [2]: mymodel.__version__
Out[2]: '1.1.1-titanic.from-kaggle'
C'est une continuation d'ipython.
In [3]: import importlib.resources
In [4]: import pickle
In [5]: import mymodel.titanic_sample.models.LogisticRegression
In [6]: b = importlib.resources.read_binary(mymodel.titanic_sample.models.LogisticRegression, "model.pkl")
In [9]: len(b)
Out[9]: 739
In [10]: c = pickle.loads(b)
In [11]: c.__class__
Out[11]: sklearn.linear_model._logistic.LogisticRegression
Tu peux le faire. Voir cette zone pour plus de détails.
En supprimant les points ci-dessus, nous pouvons obtenir l'implication qu'un ** un package python contenant uniquement des données ** est également possible. Je pense que le montant à inclure dépend du projet, de sorte que vous pouvez envisager diverses choses.
La convention de version du paquet python est plutôt bâclée, et la versioning sémantique ja /) peuvent être adoptées. Vous pouvez donc utiliser cet exemple de Mercari tel quel. https://mercari.github.io/ml-system-design-pattern/Operation-patterns/Data-model-versioning-pattern/design_ja.html
Comme ça. https://github.com/arc279/model-in-package-sample/blob/master/setup.cfg#L3 https://github.com/arc279/model-in-package-sample/blob/master/src/mymodel/version.py
Je parle de ça. Voir Sample github pour une vue d'ensemble.
Recommended Posts