Entwicklung kundenspezifischer Modelle in Neptune ML - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Entwicklung kundenspezifischer Modelle in Neptune ML

Eine gute Möglichkeit, mit der Entwicklung benutzerdefinierter Modelle zu beginnen, besteht darin, den Beispielen im Neptune-ML-Toolkit zu folgen, um Ihr Trainingsmodul zu strukturieren und zu schreiben. Das Neptune-ML-Toolkit implementiert auch modularisierte Diagramm-ML-Modellkomponenten im modelzoo, die Sie stapeln und zur Erstellung Ihres benutzerdefinierten Modells verwenden können.

Darüber hinaus bietet das Toolkit Dienstprogrammfunktionen, mit denen Sie während Modelltraining und Modelltransformation die notwendigen Artefakte erzeugen können. Sie können dieses Python-Paket in Ihre benutzerdefinierte Implementierung importieren. Alle im Toolkit enthaltenen Funktionen oder Module sind auch in der Neptune-ML-Trainingsumgebung verfügbar.

Wenn Ihr Python-Modul zusätzliche externe Abhängigkeiten besitzt, können Sie diese zusätzlichen Abhängigkeiten einfügen, indem Sie im Verzeichnis Ihres Moduls die Datei requirements.txt erstellen. Die in der Datei requirements.txt aufgelisteten Pakete werden anschließend installiert, bevor Ihr Trainingsskript ausgeführt wird.

Das Python-Modul, das Ihr benutzerdefiniertes Modell implementiert, muss mindestens Folgendes enthalten:

  • Einen Einstiegspunkt für ein Trainingsskript

  • Einen Einstiegspunkt für ein Transformationsskript

  • Eine model-hpo-configuration.json-Datei

Entwicklung benutzerdefinierter Modelltrainingsskripts in Neptune ML

Ihr benutzerdefiniertes Modelltrainingsskript sollte ein ausführbares Python-Skript sein, siehe das Beispielskript train.py im Neptune-ML-Toolkit. Es muss Hyperparameternamen und -werte als Befehlszeilenargumente akzeptieren. Während des Modelltrainings werden die Hyperparameternamen aus der Datei model-hpo-configuration.json abgerufen. Die Hyperparameterwerte liegen entweder innerhalb des gültigen Hyperparameterbereichs, wenn der Hyperparameter optimierbar ist, oder nehmen den Standard-Hyperparameterwert an, wenn er nicht optimierbar ist.

Ihr Trainingsskript wird auf einer SageMaker-Trainings-Instance mit einer Syntax wie der folgenden ausgeführt:

python3 (script entry point) --(1st parameter) (1st value) --(2nd parameter) (2nd value) (...)

Für alle Aufgaben sendet der Neptune-ML-AutoTrainer zusätzlich zu den von Ihnen angegebenen Hyperparametern mehrere erforderliche Parameter an das Trainingsskript. Ihr Skript muss diese zusätzlichen Parameter verarbeiten können, um ordnungsgemäß zu funktionieren.

Diese zusätzlichen erforderlichen Parameter sind von der jeweiligen Aufgabe abhängig:

Für die Klassifizierung oder Regression von Knoten
  • task   –   Der intern von Neptune ML verwendete Aufgabentyp. Für die Knotenklassifikation ist dies node_class, für die Knotenregression node_regression.

  • model   –   Der intern von Neptune ML verwendete Modellname, in diesem Fall custom.

  • name   –   Der Name der intern von Neptune ML verwendeten Aufgabe, in diesem Fall node_class-custom für die Knotenklassifizierung und node_regression-custom für die Knotenregression.

  • target_ntype   –   Der Name des Knotentyps für die Klassifizierung oder Regression.

  • property   –   Der Name der Knoteneigenschaft für die Klassifizierung oder Regression.

Für Linkvorhersagen
  • task   –   Der intern von Neptune ML verwendete Aufgabentyp. Für Linkvorhersagen ist dies link_predict.

  • model   –   Der intern von Neptune ML verwendete Modellname, in diesem Fall custom.

  • name   –   Der intern von Neptune ML verwendete Aufgabenname, in diesem Fall link_predict-custom.

Für die Klassifizierung oder Regression von Kanten
  • task   –   Der intern von Neptune ML verwendete Aufgabentyp. Für die Kantenklassifikation ist dies edge_class, für die Kantenregression edge_regression.

  • model   –   Der intern von Neptune ML verwendete Modellname, in diesem Fall custom.

  • name   –   Der Name der intern von Neptune ML verwendeten Aufgabe, in diesem Fall edge_class-custom für die Kantenklassifizierung und edge_regression-custom für die Kantenregression.

  • target_etype   –   Der Name des Kantentyps für die Klassifizierung oder Regression.

  • property   –   Der Name der Kanteneigenschaft für die Klassifizierung oder Regression.

Ihr Skript sollte die Modellparameter sowie alle weiteren Artefakte speichern, die am Ende des Trainings benötigt werden.

Sie können die Dienstprogrammfunktionen des Neptune-ML-Toolkits verwenden, um den Speicherort der verarbeiteten Diagrammdaten, den Speicherort der Modellparameter und die auf der Trainings-Instance verfügbaren GPU-Geräte zu bestimmen. Beispiele für die Verwendung dieser Dienstprogrammfunktionen finden Sie im Beispiel-Trainingsskript train.py.

Entwicklung benutzerdefinierter Modelltransformationsskripts in Neptune ML

Ein Transformationsskript ist erforderlich, um den inkrementellen Neptune-ML-Workflow für Modellinferenzen für neue Diagramme zu nutzen, ohne das Modell neu zu trainieren. Auch wenn alle für die Modellbereitstellung notwendigen Artefakte durch das Trainingsskript generiert werden, müssen Sie dennoch ein Transformationsskript bereitstellen, wenn Sie aktualisierte Modelle generieren möchten, ohne das Modell neu zu trainieren.

Anmerkung

Induktive Inferenz in Echtzeit wird zurzeit für benutzerdefinierte Modelle nicht unterstützt.

Ihr benutzerdefiniertes Modelltransformationsskript sollte ein ausführbares Python-Skript sein, siehe das Beispielskript transform.py im Neptune-ML-Toolkit. Da dieses Skript während des Modelltrainings ohne Befehlszeilenargumente aufgerufen wird, müssen alle Befehlszeilenargumente, die das Skript akzeptiert, Standardwerte haben.

Das Skript wird auf einer SageMaker-Trainings-Instance mit einer Syntax wie dieser ausgeführt:

python3 (your transform script entry point)

Ihr Transformationsskript benötigt verschiedene Informationen, z. B.:

  • Der Speicherort der verarbeiteten Diagrammdaten.

  • Der Speicherort der Modellparameter und der Speicherort für neue Modellartefakte.

  • Die auf der Instance verfügbaren Geräte.

  • Die Hyperparameter, die das beste Modell generiert haben.

Diese Eingaben werden über Neptune-ML-Dienstprogrammfunktionen abgerufen, die Ihr Skript aufrufen kann. Beispiele hierfür finden Sie im Beispielskript transform.py im Toolkit.

Das Skript sollte Knoteneinbettungen, Knoten-ID-Zuordnungen und alle anderen Artefakte speichern, die für die Modellbereitstellung für die einzelnen Aufgaben notwendig sind. Weitere Informationen zu den für verschiedene Neptune-ML-Aufgaben erforderlichen Modellartefakten finden Sie in der Dokumentation zu Modellartefakten.

Benutzerdefinierte model-hpo-configuration.json-Datei in Neptune ML

Die Datei model-hpo-configuration.json definiert Hyperparameter für Ihr benutzerdefiniertes Modell. Sie hat dasselbe Format wie die Datei model-hpo-configuration.json, die mit den integrierten Neptune-ML-Modellen verwendet wird, und hat Priorität gegenüber der Version, die von Neptune ML automatisch generiert und zum Speicherort Ihrer verarbeiteten Daten hochgeladen wird.

Wenn Sie Ihrem Modell einen neuen Hyperparameter hinzufügen, müssen Sie in dieser Datei auch einen Eintrag für den Hyperparameter hinzufügen, damit dieser an Ihr Trainingsskript übergeben wird.

Sie müssen einen Bereich für einen Hyperparameter angeben, wenn er optimierbar sein soll, und diesen als tier-1-, tier-2- oder tier-3-Parameter festlegen. Der Hyperparameter wird optimiert, wenn die Gesamtzahl der konfigurierten Trainingsaufträge die Optimierung von Hyperparametern in seiner Stufe zulässt. Für einen nicht optimierbaren Parameter müssen Sie einen Standardwert angeben und den Hyperparameter zum Abschnitt fixed-param der Datei hinzufügen. Ein Beispiel dafür, wie Sie dies tun, finden Sie in der Beispieldatei model-hpo-configuration.json im Toolkit.

Sie müssen auch die Metrikdefinition angeben, die der SageMaker-HyperParameter-Optimierungsauftrag für die Auswertung der trainierten Kandidatenmodelle verwendet. Hierzu fügen Sie der Datei model-hpo-configuration.json das JSON-Objekt eval_metric wie folgt hinzu:

"eval_metric": { "tuning_objective": { "MetricName": "(metric_name)", "Type": "Maximize" }, "metric_definitions": [ { "Name": "(metric_name)", "Regex": "(metric regular expression)" } ] },

Das metric_definitions-Array im Objekt eval_metric listet Metrikdefinitionsobjekte für jede Metrik auf, die SageMaker aus der Trainings-Instance extrahieren soll. Jedes Metrikdefinitionsobjekt besitzt einen Name-Schlüssel, mit dem Sie einen Namen für die Metrik angeben können (z. B. „Genauigkeit“, „F1“ usw.). Mit diesem Regex-Schlüssel können Sie eine Zeichenfolge mit einem regulären Ausdruck angeben, der mit der Ausgabe dieser Metrik in den Trainingsprotokollen übereinstimmt. Weitere Informationen zur Definition von Metriken finden Sie auf der Seite SageMaker-HyperParameter-Optimierung.

Mit dem Objekt tuning_objective in eval_metric können Sie dann angeben, welche der Metriken in metric_definitions als die Auswertungsmetrik verwendet werden soll, die als Zielmetrik für die Hyperparameter-Optimierung dient. Der Wert für MetricName muss mit dem Wert von Name in einer der Definitionen in metric_definitions übereinstimmen. Der Wert für Type sollte „Maximieren“ oder „Minimieren“ sein, je nachdem, ob die Metrik als „größer ist besser“ (z. B. „Genauigkeit“) oder als „weniger ist besser“ (z. B. „Mean-Squared-Fehler“) interpretiert werden soll.

Fehler in diesem Abschnitt der Datei model-hpo-configuration.json können zu einem Fehlschlag des API-Auftrags für das Neptune-ML-Modelltraining führen, da der SageMaker-HyperParameter-Optimierungsauftrag nicht das beste Modell auswählen kann.

Lokale Tests Ihrer benutzerdefinierten Modellimplementierung in Neptune ML

Sie können Ihren Code lokal in der Conda-Umgebung des Neptune-ML-Toolkits ausführen, um Ihr Modell zu testen und zu validieren. Wenn Sie auf einer Neptune-Notebook-Instance entwickeln, wird die Conda-Umgebung auf der Neptune-Notebook-Instanz vorinstalliert. Wenn Sie auf einer anderen Instance entwickeln, müssen Sie die Anweisungen für die lokale Einrichtung im Neptune-ML-Toolkit befolgen.

Die Conda-Umgebung reproduziert exakt die Umgebung, in der Ihr Modell ausgeführt werden wird, wenn Sie die Modelltrainings-API aufrufen. Alle Beispielskripts für Training und Transformation ermöglichen Ihnen die Übergabe des Befehlszeilen-Flags --local, um die Skripts zum einfachen Debuggen in einer lokalen Umgebung auszuführen. Sie sollten diese Umgebung bei der Entwicklung Ihres eigenen Modells nutzen, um Ihre Modellimplementierung interaktiv und iterativ zu testen. Beim Modelltraining in der Produktionstrainingsumgebung von Neptune ML wird dieser Parameter ausgelassen.