Snowpark ML Ops: Migration von der Vorschau-API der Modell-Registry¶
Snowflake hatte zuvor bereits ausgewählten Kunden eine Modell-Registry in privater Vorschau zur Verfügung gestellt. Das unter diesem Thema beschriebene Registry-Feature weist im Vergleich zur Vorschauversion erhebliche Änderungen in Bezug auf Funktionalität und APIs auf. Vor allem die Kernfunktionalität der Registry wird jetzt nativ innerhalb von Snowflake gehostet, indem ein neues Modellobjekt auf Schemaebene verwendet wird.
Bemerkung
Die öffentliche Vorschauversion unterstützt noch nicht die Bereitstellung von Modellen in Snowpark Container Services (SPCS). Wenn Sie auf diese Funktionalität angewiesen sind, verwenden Sie vorerst weiterhin die Registry der privaten Vorschau.
In der folgenden Tabelle sind die wichtigsten Unterschiede zwischen den beiden Implementierungen der Registry zusammengefasst. Die API der privat verfügbaren Vorschauversion wird als „Vorschau-API“ bezeichnet, während die aktuelle, öffentlich freigegebene API als „Öffentliche API“ bezeichnet wird.
Vorschau-API |
Öffentliche API |
---|---|
Metadaten werden in Tabellen gespeichert. Modelle werden in Stagingbereichen gespeichert. Die Registry-API ist eine Python-Bibliothek, die diese Objekte für die in der Registry gespeicherten Modelle erstellt und verwaltet.
|
Modelle sind systemeigene Objekte auf Schemaebene, wie Tabellen und Stagingbereiche. Die Python-Registry-API ist eine Klasse, die die Interaktion mit Modellobjekten in Python vereinfacht, wobei im Hintergrund SQL verwendet wird.
|
In den folgenden Abschnitten werden die Unterschiede zwischen den beiden APIs ausführlicher beschrieben.
Importieren und Zugreifen auf die Registry-API¶
Beide Registry-APIs befinden sich im Snowpark ML-Hauptpaket snowflake.ml
.
Vorschau-API |
from snowflake.ml.registry import model_registry
Verwenden Sie |
---|---|
Öffentliche API |
from snowflake.ml.registry import Registry
Verwenden Sie die Klasse |
Erstellen einer Registry¶
Die Vorschau-API erfordert, dass die Registry von der Python-Bibliothek erstellt wird.
Vorschau-API |
model_registry.create_model_registry(...)
Vor der erstmaligen Verwendung der Registry erforderlich. |
---|---|
Öffentliche API |
Nicht anwendbar. Jedes vorhandene Schema kann als Registry verwendet werden. |
Öffnen einer Registry¶
Sie öffnen eine Registry, um neue Modelle hinzuzufügen und die bereits vorhandenen Modellen zu verwenden.
Vorschau-API |
reg = model_registry.ModelRegistry(
session=session,
database_name="MODEL_REGISTRY")
|
---|---|
Öffentliche API |
reg = Registry(
session=session,
database_name="ML",
schema_name="REGISTRY")
|
Protokollieren eines Modells¶
Das Hinzufügen eines Modells zur Registry wird Protokollierung (Logging) genannt. Beide APIs verwenden zu diesem Zweck eine Registry-Methode namens log_model
. Diese Methode weist in der öffentlichen API zwei kleine Unterschiede auf:
Der Parameter, der die Modellversion angibt und bisher
model_version
hieß, heißt jetztversion_name
, um seine Semantik besser wiederzugeben.Sie können beim Protokollieren eines Modells keine Tags setzen. Fügen Sie stattdessen Tags nach dem Protokollieren mit der Methode
set_tag
des Modells hinzu.
Abrufen einer Referenz auf ein Modell¶
Wenn Sie eine Referenz auf ein Modell abrufen, können Sie dessen Metadaten aktualisieren und andere Operationen darauf ausführen.
Vorschau-API |
Wenn Sie ein Modell aus der Registry abrufen, wird immer eine bestimmte Version des Modells zurückgegeben. Daher müssen Sie beim Abrufen des Modells die gewünschte Version angeben. model = model_registry.ModelReference(
registry=registry,
model_name="my_model",
model_version="101")
|
---|---|
Öffentliche API |
Modellversionen sind vom Modell selbst getrennt. So erhalten Sie eine Referenz auf das Modell: m = reg.get_model("my_model")
Um eine Referenz auf eine bestimmte Version zu erhalten, rufen Sie zunächst eine Referenz auf das Modell wie oben beschrieben ab, und rufen Sie dann die gewünschte Version ab. Beachten Sie, dass das Modellobjekt ein Attribut mv = m.version('v1')
mv = m.default
|
Bereitstellen eines Modells¶
Vorschau-API |
Modelle müssen explizit in einem Warehouse (als benutzerdefinierte Funktion) oder in den Snowpark Container Services (als Dienst) bereitgestellt werden. Im folgenden Beispiel wird die Bereitstellung in einem Warehouse gezeigt. model.deploy(
deployment_name="my_warehouse_predict",
target_method="predict",
permanent=True)
|
---|---|
Öffentliche API |
Es ist nicht notwendig, ein Modell explizit bereitzustellen. |
Verwenden eines Modells für Inferenzen¶
Unter Inferenz wird die Verwendung eines Modells zum Erstellen von Vorhersagen auf Grundlage von Testdaten verstanden.
Vorschau-API |
Geben Sie zum Ausführen der Inferenz den Bereitstellungsnamen an, den Sie beim Bereitstellen des Modells verwendet haben. result_dataframe = model.predict(
"my_warehouse_predict", test_dataframe)
|
---|---|
Öffentliche API |
Modelle werden in einem Warehouse ausgeführt. Sie können Methoden des Modells aus Python oder aus SQL aufrufen. Python Sie rufen Methoden mit der Methode remote_prediction = mv.run(
test_features, function_name="predict")
SQL Sie können Methoden der Standardversion aufrufen, indem Sie eine einfache SELECT-Abfrage verwenden oder eine Version mit einer WITH-Klausel angeben. -- Use default version
SELECT my_model!predict() FROM test_table;
-- Use a specific version
WITH my_model_v1 AS MODEL my_model VERSION "1"
SELECT my_model_v1!predict() FROM test_table;
|
Zugriff auf und Aktualisierung von Beschreibungen¶
Vorschau-API |
Die Modellreferenz bietet Get- und Set-Methoden für die Beschreibung. (Bei dieser API bezieht sich eine Modellreferenz immer auf eine bestimmte Version des Modells.) print(model.get_model_description())
model.set_model_description("A better description")
|
---|---|
Öffentliche API |
Sowohl Modelle als auch Modellversionen ermöglichen den Zugriff auf eine Beschreibung über ihre entsprechenden Attribute print(m.comment)
m.comment = "A better description"
print(m.description)
m.description = "A better description"
print(mv.comment)
mv.comment = "A better description"
print(mv.description)
mv.description = "A better description"
|
Zugriff auf und Aktualisierung von Kennzahlen¶
In beiden APIs werden die Kennzahlen auf Ebene der Modellversion festgelegt.
Vorschau-API |
Skalare Kennzahl festlegen model.set_metric("test_accuracy", test_accuracy)
Hierarchische (Dictionary-)Kennzahl festlegen model.set_metric("dataset_test", {"accuracy": test_accuracy})
Multivalente (Matrix-)Kennzahl festlegen model.set_metric("confusion_matrix", test_confusion_matrix)
Alle Kennzahlen abrufen print(model.get_metrics())
Kennzahl entfernen model.remove_metric("test_accuracy")
|
---|---|
Öffentliche API |
Skalare Kennzahl festlegen m.set_metric("test_accuracy", test_accuracy)
Hierarchische (Dictionary-)Kennzahl festlegen mo.set_metric("dataset_test", {"accuracy": test_accuracy})
Multivalente (Matrix-)Kennzahl festlegen m.set_metric("confusion_matrix", test_confusion_matrix)
Alle Kennzahlen abrufen print(m.get_metrics())
Kennzahl entfernen m.remove_metric("test_accuracy")
|
Löschen eines Modells¶
Vorschau-API |
Sie können nur bestimmte Versionen eines Modells löschen. Um ein Modell vollständig zu löschen, müssen Sie alle seine Versionen löschen. registry.delete_model(
model_name="my_model",
model_version="100")
|
---|---|
Öffentliche API |
Beim Löschen eines Modells werden alle seine Versionen gelöscht. Es ist derzeit nicht möglich, nur eine Version zu löschen. reg.delete_model("mymodel")
|
Auflisten aller Versionen eines Modells¶
Vorschau-API |
Die Methode model_list = registry.list_models()
model_list.filter(model_list["NAME"] == "mymodel").show()
|
---|---|
Öffentliche API |
Bei einer Modellreferenz können Sie die Versionen des Modells entweder als Liste von Liste der ModelVersions-Instanzen abrufen version_list = m.versions()
Informationen im DataFrame abrufen version_df = m.show_versions()
|
Verwalten des Modelllebenszyklus¶
Für das Verwalten des Lebenszyklus eines Modells sollten Tags verwendet werden. Sie könnten zum Beispiel ein Tag mit dem Namen stage
erstellen, um den aktuellen Status des Modells mit Werten wie „experimentell“, „alpha“, „beta“, „produktiv“, „veraltet“ und „obsolet“ zu erfassen.
In der öffentlichen API werden Tags mit SQL-Tag-Objekten implementiert. Informationen zum Erstellen von Tags und zum Definieren zulässiger Werte finden Sie unter Objekt-Tagging.
Die öffentliche API hat auch das Konzept der Standardversion eines Modells. Diese Modellversion wird verwendet, wenn keine spezifische Version angegeben ist, insbesondere in SQL. Wenn Sie eine neue Version eines Modells trainieren und das neue Modell für den allgemeinen Einsatz bereit ist, können Sie die Standardversion aktualisieren. Sie können die Standardversion mit dem Attribut default
des Modells festlegen.
m.default = "2"
Sie können dann die Standardversion des Modells als ModelVersion
-Objekt wie folgt abrufen.
mv = m.default
Oder Sie können das Modell direkt mit seiner predict
-Methode aufrufen.
m.default.run(test_features, function_name="predict"))