Was sind die bewährten Methoden zum Speichern, Speichern und Weitergeben von Modellen für maschinelles Lernen?
In Python speichern wir im Allgemeinen die Binärdarstellung des Modells mit pickle oder joblib. Modelle können in meinem Fall ~ 100Mo groß sein. Außerdem kann die JobLib ein Modell in mehreren Dateien speichern, es sei denn, Sie legen fest compress=1
( /programming/33497314/sklearn-dumping-model-using-joblib-dumps-multiple-fileses-which-one-is-the- korrekt ).
Wenn Sie jedoch die Zugriffsrechte auf Modelle steuern und Modelle von verschiedenen Computern verwenden möchten, wie können Sie diese am besten speichern?
Ich habe ein paar Möglichkeiten:
- Speichern Sie sie als Dateien und legen Sie sie dann mit Git LFS in einem Repository ab
- Speichern Sie sie in einer SQL-Datenbank als Binärdateien:
- Zum Beispiel in Postgresql https://wiki.postgresql.org/wiki/BinaryFilesInDB
- Dies ist auch die vom SQL Server-Team empfohlene Methode:
- https://docs.microsoft.com/de-de/sql/advanced-analytics/tutorials/walkthrough-build-and-save-the-model
- https://microsoft.github.io/sql-ml-tutorials/python/rentalprediction/step/3.html
- https://blogs.technet.microsoft.com/dataplatforminsider/2016/10/17/sql-server-as-a-machine-learning-model-management-system
- HDFS
Antworten:
Sie können einen Blick auf Nexus oder DVC oder DATMO werfen .
Vor kurzem gab es eine Präsentation auf dem Treffen in Berlin, Zalandos AI Data Engineering Meetup.
quelle
Ich habe mich jahrelang mit diesem Problem konfrontiert (und stehe ihm heute noch gegenüber). Ich bin wirklich der Meinung, dass Sie keine ernsthafte Antwort erwarten können, wenn Sie keine detaillierten Anforderungen angeben. Ich erkläre mich anhand von Beispielen meiner Arbeit:
Ich probiere regelmäßig mehrere Variationen desselben Modells aus, um herauszufinden, welche Parameter am besten funktionieren. Es dauert mehrere Tage, um ein einzelnes Modell zu trainieren, das eine Ausgabe erzeugt, die später zur Auswertung verwendet wird. Zu diesem Zweck erstelle ich einen einfachen NumPy-Dump des Modells, da es einfach für Server oder Kollegen freigegeben werden kann. Sie sollten pickle vermeiden, da es viel mehr speichert (Instanzen von Klassen, Bibliotheken ...) als nur die von Ihrem Modell gelernten Parameter. Das Importieren des Modells auf einem anderen Computer funktioniert möglicherweise nicht, wenn sich die Python-Umgebung geringfügig unterscheidet.
Wenn ich ein Modell in der Produktion pushe, benötige ich 1) eine Version des Modells, die ich im Falle eines Serverausfalls schnell laden kann (normalerweise ein Binärformat, in dem nur das Nötige wie die Gewichte eines neuronalen Netzwerks gespeichert werden), und 2) a Möglichkeit, das Modell im RAM zu halten, um die API-Anforderungen schnell zu verarbeiten.
Für zwei verschiedene Zwecke benötige ich drei verschiedene Formate. Ganz allgemein hängt die Wahl des Formats von den verwendeten Tools ab. Zum Beispiel, wenn Sie mit TensorFlow arbeiten, könnten Sie in ihrem Interesse seiner TensorFlow Serving System
quelle
Ich möchte 2 weitere Ansätze vorschlagen.
Speichern Sie sie im Dokumentenspeicher (z. B. mongoDB). Diese Methode wird empfohlen, wenn Ihre Modelldateien kleiner als 16 MB sind (oder die Joblib-Shards). Sie können das Modell dann als Binärdaten speichern. Darüber hinaus unterstützen einige ML-Bibliotheken den Export und Import von Modellen in JSON (z. B. LightGBM), was es zu einem idealen Kandidaten für die Speicherung im Dokumentenspeicher macht. Vorteile : Einfache Nachverfolgung der Modellgenerierung und einfacher Zugriff. Nachteile : Wenn das Modellobjekt zu groß ist, wird es chaotisch.
Speichern Sie Ihr Modell im Objektspeicher (z. B. Amazon S3). Diese Methode ist gut, wenn Ihre Modelle sehr groß sind. In diesem Fall erhalten Sie unbegrenzten Speicherplatz und eine recht einfache API. Sie zahlen mehr, das ist sicher. Vorteile : Unbegrenzter Speicherplatz und die Möglichkeit, beliebige Dateiformate zu speichern. Nachteile : Kosten und die Tatsache, dass Sie ein eigenes Tracking-System entwickeln müssen, um es richtig zu machen.
Viel Glück!
quelle