Overview
Eine Person in Mercari hat wundervolles Wissen in Bezug auf Entwicklung und Betrieb rund um maschinelles Lernen veröffentlicht. https://mercari.github.io/ml-system-design-pattern/README_ja.html Lassen Sie uns das Management des Modells ein wenig erweitern.
Lassen Sie mich zunächst das Gesamtbild geben. https://github.com/arc279/model-in-package-sample Ich meine, das ist alles.
Das Folgende ist eine Erklärung der Hauptpunkte. Ich werde die Setup-Tools nicht erklären. Bitte googeln Sie sie bei Bedarf.
Die Beispielausführungsumgebung ist
(.venv) $ python -V
Python 3.8.1
Ich sende es an.
Vor einiger Zeit waren im Bereich "setuptools" Dinge wie "package_data" und "data_files" verwirrend, aber Kürzlich MANIFEST.in und [importlib.resources](https: // docs) Es scheint, dass es zu .python.org / ja / 3 / library / importlib.html (module-importlib.resources) konvergiert hat.
Beachten Sie, dass "importlib.resources" seit Python 3.7 hinzugefügt wurde und ältere Versionen die Verwendung von "pkg_resources" erfordern. Um ehrlich zu sein, ist die Verwendung nicht einfach. Verwenden Sie daher nach Möglichkeit "importlib.resources" in Version 3.7 oder höher.
In diesem Bereich erfahren Sie, wie Sie es verwenden.
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
Es enthält eine * .pkl
-Datei.
$ 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
Sobald es im Rad verfestigt ist, kann es mit einem Rohr eingesetzt werden.
(.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'
Es ist eine Fortsetzung von 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
Du kannst es schaffen. Weitere Informationen finden Sie in diesem Bereich.
Indem wir die obigen Punkte unterdrücken, können wir die Implikation erhalten, dass ** ein Python-Paket, das nur Daten enthält **, ebenfalls möglich ist. Ich denke, es hängt vom Projekt ab, wie viel Sie einbeziehen sollten, damit Sie verschiedene Dinge berücksichtigen können.
Die Versionskonvention des Python-Pakets ist ziemlich schlampig, und die semantische Versionierung ja /) kann übernommen werden. Sie können dieses Beispiel von Mercari also so verwenden, wie es ist. https://mercari.github.io/ml-system-design-pattern/Operation-patterns/Data-model-versioning-pattern/design_ja.html
So was. 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
Ich spreche darüber. Siehe Beispiel-Github für das Gesamtbild.
Recommended Posts