Bewährte Methoden zum Speichern von Python-Modellen für maschinelles Lernen

24

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:

Antoine Dusséaux
quelle
Haben Sie einen effizienten Weg gefunden, dies zu tun?
iNet

Antworten:

2

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

Robin
quelle
1

Ich möchte 2 weitere Ansätze vorschlagen.

  1. 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.

  2. 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!

Roy Miara
quelle