Snowflake Model Registry

Bemerkung

Die unter diesem Thema beschriebene Modell-Registry-API ist ab Paketversion 1.5.0 allgemein verfügbar.

Nach dem Trainieren eines Modells beginnt die Operationalisierung des Modells und die Durchführung der Inferenz in Snowflake mit der Protokollierung des Modells in der Snowflake Model Registry. Mit der Model Registry können Sie Modelle und ihre Metadaten in Snowflake sicher verwalten – unabhängig von Herkunft und Typ – und die Durchführung von Inferenzen erleichtern. Die wichtigsten Vorteile und Funktionen von Snowflake Model Registry sind:

  • Die Möglichkeit, Modellversionen, Modellmetriken und andere Modellmetadaten zu speichern und zu verwalten

  • Die Möglichkeit zur Bereitstellung von Modellen und zur Ausführung verteilter Inferenzen in großem Maßstab unter Verwendung von Python-, SQL- oder REST API-Endpunkten

  • Die Möglichkeit, den Lebenszyklus von Modellen mit flexiblen Governance-Optionen zu verwalten und mit Modellen in Entwicklungs- und Produktionsumgebungen zu arbeiten

  • Die Möglichkeit zur Überwachung der Modellleistung und -abweichung mithilfe von Snowflake ML Observability

  • Die Möglichkeit, den Zugriff auf Modelle mit rollenbasierter Zugriffskontrolle sicher zu verwalten

Die Modell-Registry speichert Machine Learning-Modelle als First-Class-Objekte auf Schemaebene in Snowflake.

Sobald Sie ein Modell protokolliert haben, können Sie seine Methoden (gleichbedeutend mit Funktionen oder gespeicherten Prozeduren) durchführen, um Modelloperationen, z. B. Inferenzen, in einem virtuellen Warehouse von Snowflake aufzurufen, oder das Modell in Snowpark Container Services für GPU-basierte Inferenz bereitzustellen.

Die Snowflake Model Registry verfügt über integrierte Unterstützung von Typen für die gängigsten Modelltypen, darunter scikit-learn, xgboost, LightGBM, PyTorch, TensorFlow, Hugging Face Pipelines und MLFlow pyfunc models. Die Model Registry ist außerdem flexibel und leistungsstark genug, um Ihre eigenen, zuvor trainierten Modelle sowie jeden benutzerdefinierten Verarbeitungscode zu unterstützen.

Tipp

Beispiele für diese Modelltypen mit End-to-End-Workflows finden Sie unter Beispiele und Quickstarts.

Die wichtigsten Klassen in der Snowflake Model Registry Python-API sind:

Unter diesem Thema wird beschrieben, wie Sie mit der snowflake-ml-python-Bibliothek Registrierungsoperationen in Python durchführen können. Sie können viele Registrierungsvorgänge auch in SQL durchführen; siehe Model Registry SQL.

Erforderliche Berechtigungen

Um ein Modell zu erstellen, müssen Sie entweder Eigentümer des Schemas sein, in dem das Modell erstellt wird, oder über die Berechtigung CREATE MODEL für dieses Schema verfügen. Um ein Modell zu verwenden, müssen Sie entweder Eigentümer des Modells sein oder über die Berechtigung USAGE für das Modell verfügen. Die Berechtigung USAGE erlaubt es den Berechtigungsempfängern, das Modell für Inferenz zu nutzen, ohne dessen Interna einsehen zu können. Um Benutzern Zugriff auf alle bestehenden Modelle in einem Schema zu geben, verwenden Sie GRANT USAGE ON ALL MODELS IN SCHEMA <> TO ROLE <für die Schemarolle>;. Sie können Benutzern auch automatisch Zugriff auf zukünftige Modelle geben, die in einem Schema erstellt wurden, und zwar über GRANT USAGE ON FUTURE MODELS IN SCHEMA <> TO ROLE <für die Schemarolle>;.

Wenn eine Benutzerrolle USAGE-Berechtigungen auf ein Modell hat, erscheint sie auf der Snowsight-Model Registry-Seite. Weitere Informationen zur Funktionsweise von Berechtigungen in Snowflake finden Sie unter Zugriffssteuerungsrechte.

Bemerkung

Standardmäßig unterstützen Modelle derzeit keine Replikation. Dieses Feature ist Teil des BCR Bundles 2024_08, das Sie aktivieren können, wenn Sie eine Modellreplikation benötigen. Das Feature wird in Kürze standardmäßig aktiviert.

Aktuelle Einschränkungen

Die folgenden Beschränkungen gelten für Modelle und Modellversionen:

Modelle

  • Maximal 1000 Versionen

Modell-Versionen

  • Maximal 10 Methoden

  • Maximal 10 Importe

  • Maximal 500 Argumente pro Methode

  • Maximale Metadatenmenge (einschließlich Metriken) von 100 KB

  • Maximale Gesamtgröße des Modells von 5 GB (für Modelle, die im Warehouse eingesetzt werden)

  • Maximale Größe der Konfigurationsdatei von 250 KB, einschließlich conda.yml und anderer Manifest-Dateien, die log_model intern generiert. (Wenn ein Modell z. B. viele Funktionen hat, die alle viele Argumente haben, kann diese Grenze überschritten werden.)

Öffnen der Snowflake Model Registry

Modelle sind Snowflake-Objekte erster Klasse und können zusammen mit anderen Snowflake-Objekten in einer Datenbank und einem Schema organisiert werden. Die Snowflake Model Registry stellt eine Python-Klasse zum Verwalten von Modellen innerhalb eines Schemas bereit. Somit kann jedes Snowflake-Schema als Registry verwendet werden. Es ist nicht notwendig, ein Schema für diesen Zweck zu initialisieren oder anderweitig vorzubereiten. Snowflake empfiehlt das Erstellen eines oder mehrerer dedizierter Schemas für diesen Zweck, z. B. ML.REGISTRY. Sie können das Schema mit CREATE SCHEMA erstellen.

Bevor Sie Modelle in der Registry erstellen oder ändern können, müssen Sie die Registry öffnen. Wenn Sie die Registry öffnen, erhalten Sie eine Referenz auf die Registry, mit der Sie neue Modelle hinzufügen und Referenzen auf vorhandene Modelle erhalten können.

from snowflake.ml.registry import Registry

reg = Registry(session=sp_session, database_name="ML", schema_name="REGISTRY")
Copy

Registrieren von Modellen und Versionen

Das Hinzufügen eines Modells zur Registry wird als Protokollierung (Logging) des Modells bezeichnet. Ein Modell wird protokolliert, indem die log_model-Methode der Registry aufgerufen wird. Diese Methode serialisiert das Modell — ein Python-Objekt — und erstellt daraus ein Snowflake-Modellobjekt. Diese Methode fügt dem Modell auch Metadaten, wie z. B. eine Beschreibung, hinzu, wie im log_model-Aufruf angegeben.

Jedes Modell kann unbegrenzt viele Versionen haben. Um weitere Versionen des Modells zu protokollieren, rufen Sie log_model erneut mit demselben model_name-Wert, aber einem anderen version_name-Wert auf.

Sie können einem Modell keine Tags hinzufügen, wenn es der Registry hinzugefügt wird, da Tags Attribute des Modells sind und log_model eine bestimmte Modellversion hinzufügt, wobei es ein Modell nur beim Hinzufügen der ersten Version erstellt. Sie können aber nach der Protokollierung der ersten Version des Modells die Tags des Modells aktualisieren.

Im folgenden Beispiel ist clf, kurz für „classifier“, das Python-Modellobjekt, das bereits an anderer Stelle in Ihrem Code erstellt wurde. Sie können beim Registrieren einen Kommentar und Tags hinzufügen, wie hier gezeigt. Die Kombination aus Name und Version muss im Schema eindeutig sein. Sie können conda_dependencies-Listen angeben; die angegebenen Pakete werden mit dem Modell bereitgestellt.

from snowflake.ml.model import type_hints
mv = reg.log_model(clf,
                   model_name="my_model",
                   version_name="v1",
                   conda_dependencies=["scikit-learn"],
                   comment="My awesome ML model",
                   metrics={"score": 96},
                   sample_input_data=train_features,
                   task=type_hints.Task.TABULAR_BINARY_CLASSIFICATION)
Copy

Im Folgenden werden die Argumente von log_model beschrieben.

Erforderliche Argumente

Argument

Beschreibung

model

Das Python-Modellobjekt eines unterstützten Modelltyps. Muss serialisierbar („pickleable“) sein.

model_name

Name des Modells, der zusammen mit version_name verwendet wird, um das Modell in der Registry zu identifizieren. Nach Protokollierung des Modells kann der Name nicht mehr geändert werden. Muss ein gültiger Snowflake-Bezeichner sein.

Bemerkung

Die Kombination aus Modellname und Version muss im Schema eindeutig sein.

Optionale Argumente

Argument

Beschreibung

version_name

Zeichenfolge, die die Version des Modells angibt und zusammen mit dem model_name-Wert zur Identifizierung des Modells in der Registry verwendet wird. Muss ein gültiger Snowflake-Bezeichner sein. Wenn dies nicht der Fall ist, wird automatisch ein von Menschen lesbarer Versionsname generiert.

code_paths

Liste der Pfade zu den Verzeichnissen des zu importierenden Codes beim Laden oder Bereitstellen des Modells.

comment

Kommentar, zum Beispiel eine Beschreibung des Modells.

conda_dependencies

Liste der Conda-Pakete, die für das Modell erforderlich sind. Dieses Argument gibt Paketnamen und optionale Versionen im Conda-Format an, d. h. "[channel::]package [operator version]". Wenn Sie keinen Kanal angeben, wird der Snowflake-Kanal angenommen, wenn das Modell in einem Warehouse läuft. conda-forge wird für Modelle angenommen, die auf Snowpark Container Services (SPCS) laufen.

ext_modules

Liste der externen Module, die mit dem Modell serialisiert („pickled“) werden sollen. Unterstützt bei Scikit-learn, Snowpark ML, PyTorch, TorchScript und benutzerdefinierten Modellen.

metrics

Dictionary mit Kennzahlen, die mit der Modellversion verknüpft sind.

options

Dictionary mit Optionen für die Modellerstellung. Die folgenden Optionen sind für alle Modelltypen verfügbar.

  • embed_local_ml_library: Ob eine Kopie der lokalen Snowpark ML-Bibliothek in das Modell eingebettet werden soll. Standard: False.

  • relax_version: Ob die Versionsbeschränkungen von Abhängigkeiten gelockert werden sollen. Dadurch werden Versionsangaben wie ==x.y.z durch Angaben wie <=x.y, <(x+1) ersetzt. Standard: True.

  • method_options: Ein Dictionary mit Optionen pro Methode, wobei der Schlüssel der Name einer Methode und der Wert ein Dictionary ist, das eine oder mehrere der hier beschriebenen Optionen enthält. Folgende Optionen sind verfügbar:

    • case_sensitive: Gibt an, ob bei der Methode und ihrer Signatur die Groß-/Kleinschreibung beachtet wird. Methoden, bei denen die Groß-/Kleinschreibung beachtet wird, müssen bei Verwendung von SQL in Anführungszeichen gesetzt werden. Diese Option erlaubt auch nicht-alphabetische Zeichen in Methodennamen. Standard: False.

    • max_batch_size: Maximale Batchgröße, die die Methode beim Aufruf im Warehouse akzeptiert. Standard: None (Batchgröße wird automatisch ermittelt).

Einzelne Modelltypen können zusätzliche Optionen unterstützen. Siehe Verwenden von integrierten Modelltypen.

pip_requirements

Liste der Paketspezifikationen für PyPI-Pakete, die für das Modell erforderlich sind. Wird nur für Modelle unterstützt, die in Snowpark Container Services laufen.

python_version

Python-Version, in der das Modell ausgeführt werden soll. Der Standardwert ist None, wodurch die letzte im Warehouse verfügbare Version verwendet wird.

sample_input_data

Ein DataFrame, das Stichproben-Eingabedaten enthält. Die für das Modell erforderlichen Feature-Namen (Merkmale) und deren Typen werden aus diesem DataFrame extrahiert. Bei allen Modellen außer Snowpark ML- und MLFlow-Modellen sowie Hugging Face-Pipelines muss entweder dieses Argument oder signatures angegeben werden.

signatures

Methodensignaturen des Modells als Zuordnung des Namens der Zielmethode zu Signaturen von Eingabe und Ausgabe. Bei allen Modellen außer Snowpark ML- und MLFlow-Modellen sowie Hugging Face-Pipelines muss entweder dieses Argument oder sample_input_data angegeben werden.

task

Die Aufgabe, die das Problem definiert, das das Modell lösen soll. Wenn keine Angaben gemacht werden, wird versucht, die Modellaufgabe aus der Klasse des Modells abzuleiten, oder es wird type_hints.Task.UNKNOWN eingestellt. Überprüfen Sie snowflake.ml.model.type_hints für alle Aufgabenoptionen.

log_model gibt ein snowflake.ml.model.ModelVersion-Objekt zurück, das die Version des Modells repräsentiert, die der Registry hinzugefügt wurde.

Nach der Registrierung kann das Modell selbst nicht mehr geändert werden (allerdings können seine Metadaten geändert werden). Um ein Modell und alle seine Versionen zu löschen, verwenden Sie die Methode delete_model der Registry.

Verwenden von Modellartefakten

Nachdem ein Modell protokolliert wurde, stehen seine Artefakte (die Dateien, die das Modell unterstützen, einschließlich seiner serialisierten Python-Objekte und verschiedener Metadaten-Dateien wie z. B. die Manifest-Datei) in einem internen Stagingbereich zur Verfügung. Artefakte können nicht verändert werden, aber Sie können die Artefakte der Modelle, deren Eigentümer Sie sind, anzeigen oder herunterladen.

Bemerkung

Wenn Sie die USAGE-Berechtigung für ein Modell haben, können Sie nicht auf dessen Artefakte zugreifen, da die Eigentümerschaft erforderlich ist.

Sie können auf Modellartefakte aus einem Stagingbereich zugreifen, indem Sie z. B. den Befehl GET oder sein Äquivalent in Snowpark Python FileOperation.get verwenden.

Allerdings können Sie Modellartefakte nicht mit der üblichen Syntax des Stagingbereichs verwenden. Verwenden Sie stattdessen eine snow://-URL, was eine allgemeinere Methode zum Angeben des Speicherorts von Objekten in Snowflake ist. Beispielweise kann eine Version innerhalb eines Modells durch eine URL im Format snow://model/<model_name>/versions/<version_name>/ angegeben werden.

Wenn Sie den Namen des Modells und die gewünschte Version kennen, können Sie den Befehl LIST verwenden, um die Artefakte des Modells wie folgt anzuzeigen:

LIST 'snow://model/my_model/versions/V3/';
Copy

Die Ausgabe sieht wie folgt aus:

name                                      size                  md5                      last_modified
versions/V3/MANIFEST.yml           30639    2f6186fb8f7d06e737a4dfcdab8b1350        Thu, 18 Jan 2024 09:24:37 GMT
versions/V3/functions/apply.py      2249    e9df6db11894026ee137589a9b92c95d        Thu, 18 Jan 2024 09:24:37 GMT
versions/V3/functions/predict.py    2251    132699b4be39cc0863c6575b18127f26        Thu, 18 Jan 2024 09:24:37 GMT
versions/V3/model.zip             721663    e92814d653cecf576f97befd6836a3c6        Thu, 18 Jan 2024 09:24:37 GMT
versions/V3/model/env/conda.yml          332        1574be90b7673a8439711471d58ec746        Thu, 18 Jan 2024 09:24:37 GMT
versions/V3/model/model.yaml       25718    33e3d9007f749bb2e98f19af2a57a80b        Thu, 18 Jan 2024 09:24:37 GMT

Um eines dieser Artefakte abzurufen, verwenden Sie den SQL-Befehl GET:

GET 'snow://model/model_my_model/versions/V3/MANIFEST.yml'
Copy

Oder das Äquivalent in Snowpark Python:

session.file.get('snow://model/my_model/versions/V3/MANIFEST.yml', 'model_artifacts')
Copy

Bemerkung

Die Namen und die Organisation der Artefakte eines Modells können je nach Typ des Modells variieren und sich auch ändern. Das vorangehende Beispiel für eine Artefaktliste dient der Veranschaulichung und ist nicht verbindlich.

Löschen von Modellen

Verwenden Sie die delete_model-Methode der Registry, um ein Modell und alle seine Versionen zu löschen:

reg.delete_model("mymodel")
Copy

Tipp

Sie können Modelle auch mit dem SQL-Befehl DROP MODEL löschen.

Abrufen von Modellen aus der Registry

Um Informationen zu jedem Modell zu erhalten, verwenden Sie die Methode show_models:

model_df = reg.show_models()
Copy

Tipp

Verwenden Sie in SQL den Befehl SHOW MODELS, um eine Liste der Modelle zu erhalten.

Das Ergebnis von show_models ist ein pandas-DataFrame. Die verfügbaren Spalten sind hier aufgelistet:

Spalte

Beschreibung

created_on

Datum und Uhrzeit der Erstellung des Modells.

name

Name des Modells.

database_name

Datenbank, in der das Modell gespeichert ist.

schema_name

Schema, in dem das Modell gespeichert ist.

owner

Rolle, die Eigentümer des Modells ist.

comment

Kommentar zum Modell.

versions

JSON-Array mit den Versionen des Modells.

default_version_name

Version des Modells, wenn auf das Modell ohne Versionsangabe verwiesen wird.

Um stattdessen eine Liste der Modelle in der Registry zu erhalten, jedes als Model-Instanz, verwenden Sie die Methode models:

model_list = reg.models()
Copy

Um eine Referenz auf ein bestimmtes Modell aus der Registry über den Namen zu erhalten, verwenden Sie die Methode get_model der Registry:

m = reg.get_model("MyModel")
Copy

Bemerkung

Model-Instanzen sind keine Kopien des ursprünglichen protokollierten Python-Modellobjekts, sie sind Referenzen auf das zugrunde liegende Modellobjekt in der Registry.

Nachdem Sie einen Verweis auf ein Modell haben, entweder eines aus der von der Methode models zurückgegebenen Liste oder eines, das mit get_model abgerufen wurde, können Sie deren Metadaten und Versionen weiterverwenden.

Anzeigen und Aktualisieren der Metadaten eines Modells

Sie können die in der Registry vorliegenden Metadatenattribute eines Modells anzeigen und aktualisieren, einschließlich Name, Kommentar, Tags und Metriken.

Abrufen und Aktualisieren von Kommentaren

Verwenden Sie das Attribut comment des Modells, um den Kommentar des Modells abzurufen und zu aktualisieren:

print(m.comment)
m.comment = "A better description than the one I provided originally"
Copy

Bemerkung

Das Attribut description ist ein Synonym für comment. Der vorherige Code kann auch auf diese Weise geschrieben werden:

print(m.description)
m.description = "A better description than the one I provided originally"
Copy

Tipp

Sie können auch den Kommentar eines Modells in SQL einstellen, indem Sie ALTER MODEL verwenden.

Abrufen und Aktualisieren von Tags

Tags sind Metadaten, mit denen der Zweck eines Modells, der Algorithmus, das Trainings-Dataset, die Lebenszyklusphase oder andere von Ihnen gewählte Informationen erfasst werden können. Sie können die Tags beim Registrieren des Modells oder zu einem beliebigen späteren Zeitpunkt setzen. Sie können auch die Werte vorhandener Tags aktualisieren oder Tags ganz entfernen.

Bemerkung

Sie müssen zuerst die Namen aller Tags (und möglicherweise deren mögliche Werte) definieren, indem Sie CREATE TAG verwenden. Siehe Objekt-Tagging.

Um alle Tags eines Modells in Form eines Python-Dictionarys zu erhalten, verwenden Sie show_tags:

print(m.show_tags())
Copy

Um ein neues Tag hinzuzufügen oder den Wert eines vorhandenen Tags zu ändern, verwenden Sie set_tag:

m.set_tag("live_version", "v1")
Copy

Um den Wert eines Tags abzurufen, verwenden Sie get_tag:

m.get_tag("live_version")
Copy

Um ein Tag zu entfernen, verwenden Sie unset_tag:

m.unset_tag("live_version")
Copy

Tipp

Sie können auch den Kommentar eines Modells in SQL einstellen, indem Sie ALTER MODEL verwenden.

Umbenennen eines Modells

Verwenden Sie die Methode rename, um ein Modell umzubenennen oder zu verschieben. Geben Sie einen vollqualifizierten Namen als neuen Namen an, um das Modell in eine andere Datenbank oder ein anderes Schema zu verschieben.

m.rename("MY_MODEL_TOO")
Copy

Tipp

Sie können ein Modell in SQL auch mit ALTER MODEL umbenennen.

Verwenden von Modellversionen

Ein Modell kann beliebig viele Versionen haben, die jeweils durch eine Zeichenfolge identifiziert sind. Sie können für den Versionsnamen jede beliebige Namenskonvention verwenden. Beim Protokollieren eines Modells wird eine spezifische Version des Modells protokolliert. Um weitere Versionen eines Modells zu protokollieren, rufen Sie log_model erneut mit demselben model_name-Wert, aber einem anderen version_name-Wert auf.

Tipp

Verwenden Sie in SQL den Befehl SHOW VERSIONS IN MODEL, um die Versionen eines Modells anzuzeigen.

Eine Version eines Modells wird durch eine Instanz der Klasse snowflake.ml.model.ModelVersion repräsentiert.

Um eine Liste aller Versionen eines Modells zu erhalten, rufen Sie die Methode versions des Modellobjekts auf. Das Ergebnis ist eine Liste von ModelVersion-Instanzen:

version_list = m.versions()
Copy

Um stattdessen Informationen zu jedem Modell als DataFrame zu erhalten, rufen Sie die Methode show_versions des Modells auf:

version_df = m.show_versions()
Copy

Der Ergebnis-DataFrame enthält die folgenden Spalten:

Spalte

Beschreibung

created_on

Datum und Uhrzeit der Erstellung der Modellversion.

name

Name der Version.

database_name

Datenbank, in der die Version gespeichert ist.

schema_name

Schema, in dem die Version gespeichert ist.

model_name

Name des Modells, zu dem diese Version gehört.

is_default_version

Boolescher Wert, der angibt, ob diese Version die Standardversion des Modells ist.

functions

JSON-Array mit den Namen der in dieser Version verfügbaren Funktionen.

metadata

JSON-Objekt, das Metadaten als Schlüssel-Wert-Paare enthält ({}, wenn keine Metadaten angegeben sind).

user_data

JSON-Objekt aus dem Abschnitt user_data des Manifests mit der Modelldefinition ({}, wenn keine Benutzerdaten angegeben sind).

Löschen von Modellversionen

Sie können eine Version eines Modells löschen, indem Sie die delete_version-Methode des Modells verwenden:

m.delete_version("rc1")
Copy

Tipp

Sie können eine Version eines Modells auch in SQL löschen, indem Sie ALTER MODEL … DROP VERSION verwenden.

Standardversion

Eine Version eines Modells kann als Standardmodell festgelegt werden. Sie können das default-Attribut des Modells abrufen oder festlegen, um die aktuelle Standardversion (als ModelVersion-Objekt) zu erhalten bzw. zu ändern (unter Verwendung einer Zeichenfolge (String)):

default_version = m.default
m.default = "v2"
Copy

Tipp

In SQL verwenden Sie ALTER MODEL, um die Standardversion festzulegen.

Aliasse für Modellversionen

Sie können einer Modellversion einen Alias zuweisen, indem Sie den SQL ALTER MODEL-Befehl verwenden. Sie können einen Alias überall dort verwenden, wo ein Versionsname erforderlich ist, z. B. wenn Sie einen Verweis auf eine Modellversion in Python oder in SQL erhalten. Ein bestimmter Alias kann jeweils nur einer Modellversion zugewiesen werden.

Zusätzlich zu den von Ihnen erstellten Aliassen sind die folgenden System-Aliasse in allen Modellen verfügbar:

  • DEFAULT bezieht sich auf die Standardversion des Modells.

  • FIRST bezieht sich auf die älteste Version des Modells gemäß Erstellungszeitpunkt.

  • LAST bezieht sich auf die neueste Version des Modells gemäß Erstellungszeitpunkt.

Aliasnamen, die Sie erstellen, dürfen nicht mit bestehenden Versionsnamen oder Aliassen im Modell übereinstimmen, einschließlich System-Aliassen.

Abrufen einer Referenz auf eine Modellversion

Um eine Referenz auf eine bestimmte Version eines Modells als ModelVersion-Instanz zu erhalten, verwenden Sie die version-Methode des Modells. Verwenden Sie das default-Attribut des Modells, um die Standardversion des Modells abzurufen:

m = reg.get_model("MyModel")

mv = m.version("v1")
mv = m.default
Copy

Sobald Sie einen Verweis auf eine bestimmte Version eines Modells haben (wie die Variable mv in diesem Beispiel), können Sie dessen Kommentare oder Kennzahlen abrufen oder aktualisieren und die Methoden (oder Funktionen) des Modells aufrufen, wie in den folgenden Abschnitten beschrieben.

Abrufen und Aktualisieren von Kommentaren

Wie bei Modellen können auch Modellversionen Kommentare haben, die über das Attribut comment oder description der Modellversion abgerufen und gesetzt werden können:

print(mv.comment)
print(mv.description)

mv.comment = "A model version comment"
mv.description = "Same as setting the comment"
Copy

Tipp

Sie können den Kommentar einer Version eines Modells auch in SQL ändern, indem Sie ALTER MODEL … MODIFY VERSION verwenden.

Abrufen und Aktualisieren von Kennzahlen

Kennzahlen (Metriken) sind Schlüssel-Wert-Paare, die dazu dienen, die Vorhersagegenauigkeit und andere Eigenschaften der Modellversion zu überwachen. Sie können die Kennzahlen beim Erstellen einer Modellversion oder mit der Methode set_metric festlegen. Der Wert einer Kennzahl kann jedes Python-Objekt sein, das in JSON serialisiert werden kann, einschließlich Zahlen, Zeichenfolgen (Strings), Listen und Dictionarys. Im Gegensatz zu Tags müssen die Namen und möglichen Werte von Kennzahlen nicht im Voraus festgelegt werden.

Eine Kennzahl für die Testgenauigkeit kann mit accuracy_score von sklearn erstellt werden:

from sklearn import metrics

test_accuracy = metrics.accuracy_score(test_labels, prediction)
Copy

Die Wahrheitsmatrix (Konfusionsmatrix) kann auf ähnliche Weise mit sklearn generiert werden:

test_confusion_matrix = metrics.confusion_matrix(test_labels, prediction)
Copy

Dann können Sie diese Werte als Metriken festlegen:

# scalar metric
mv.set_metric("test_accuracy", test_accuracy)

# hierarchical (dictionary) metric
mv.set_metric("evaluation_info", {"dataset_used": "my_dataset", "accuracy": test_accuracy, "f1_score": f1_score})

# multivalent (matrix) metric
mv.set_metric("confusion_matrix", test_confusion_matrix)
Copy

Um die Kennzahlen einer Modellversion als Python-Dictionary abzurufen, verwenden Sie show_metrics:

metrics = mv.show_metrics()
Copy

Um eine Kennzahl zu löschen, rufen Sie delete_metric auf:

mv.delete_metric("test_accuracy")
Copy

Tipp

Sie können auch die Metriken einer Modellversion (die als Metadaten gespeichert sind) in SQL ändern, indem Sie ALTER MODEL … MODIFY VERSION verwenden.

Abrufen von Erklärungen zum Modell

Die Modell-Registry kann die Ergebnisse eines Modells erklären und Ihnen sagen, welche Eingabe-Features am meisten zu den Vorhersagen beitragen, indem sie die Shapley-Werte berechnet. Dieses Feature für die Vorschau ist standardmäßig in allen Modellansichten verfügbar, die in Snowflake 8.31 und höher über die explain-Methode des zugrunde liegenden Modells erstellt wurden. Sie können explain von SQL oder über die run-Methode einer Modellansicht in Python aufrufen.

Einzelheiten zu diesem Feature finden Sie unter Erklärbarkeit des Modells.

Exportieren einer Modellversion

Verwenden Sie mv.export, um die Dateien eines Modells in ein lokales Verzeichnis zu exportieren; das Verzeichnis wird erstellt, wenn es nicht existiert:

mv.export("~/mymodel/")
Copy

Die exportierten Dateien enthalten standardmäßig den Code, die Umgebung zum Laden des Modells sowie die Modellgewichtungen. Um auch die Dateien zu exportieren, die für das Ausführen des Modells in einem Warehouse benötigt werden, geben Sie export_mode = ExportMode.FULL an:

mv.export("~/mymodel/", export_mode=ExportMode.FULL)
Copy

Laden von Modellversionen

Verwenden Sie mv.load, um das ursprüngliche Python-Modellobjekt zu laden, das ursprünglich der Registry hinzugefügt wurde. Sie können das Modell dann für Inferenz verwenden, als ob Sie es in Ihrem Python-Code definiert hätten:

clf = mv.load()
Copy

Um die ordnungsgemäße Funktionalität eines aus der Registry geladenen Modells sicherzustellen, sollte die Python-Zielumgebung (d. h. die Versionen des Python-Interpreters und aller Bibliotheken) mit der Umgebung identisch sein, aus der das Modell protokolliert wurde. Geben Sie force=True im Aufruf von load an, um zu erzwingen, dass das Modell geladen wird, auch wenn die Umgebung anders ist.

Tipp

Um sicherzustellen, dass Ihre Umgebung mit derjenigen übereinstimmt, in der das Modell gehostet wird, laden Sie eine Kopie der conda Umgebung aus der Modell-Registry herunter:

conda_env = session.file.get("snow://model/<modelName>/versions/<versionName>/runtimes/python_runtime/env/conda.yml", ".")
open("~/conda.yml", "w").write(conda_env)
Copy

Erstellen Sie dann eine neue conda-Umgebung aus dieser Datei:

conda env create --name newenv --file=~/conda.yml
conda activate newenv
Copy

Das optionale Argument options ist ein Dictionary mit Optionen zum Laden des Modells. Derzeit unterstützt das Argument nur die Option use_gpu.

Option

Typ

Beschreibung

Standard

use_gpu

bool

Aktiviert die GPU-spezifische Ladelogik.

False

Das folgende Beispiel veranschaulicht die Verwendung des options-Arguments:

clf = mv.load(options={"use_gpu": True})
Copy

Aufrufen von Modellmethoden

Modellversionen können Methoden haben, d. h. angehängte Funktionen, die ausgeführt werden können, um Inferenzen oder andere Modelloperationen auszuführen. Die Versionen eines Modells können unterschiedliche Methoden haben, und auch die Signaturen dieser Methoden können sich unterscheiden.

Um eine Methode einer Modellversion aufzurufen, verwenden Sie mv.run, wobei mv ein ModelVersion-Objekt ist. Geben Sie den Namen der aufzurufenden Funktion an und übergeben Sie eine Snowpark- oder pandas-DataFrame, die die Inferenzdaten enthält, zusammen mit allen erforderlichen Parametern. Die Methode wird in einem Snowflake-Warehouse ausgeführt.

Der Rückgabewert der Methode ist ein Snowpark- oder pandas-DataFrame, das dem Typ des übergebenen DataFrame entspricht. Snowpark-DataFrames wird im Lazy-Modus ausgewertet, d. h. die Methode wird nur ausgeführt, wenn die DataFrame-Methode collect, show oder to_pandas aufgerufen wird.

Bemerkung

Beim Aufrufen einer Methode wird diese in dem Warehouse ausgeführt, das in der Sitzung angegeben ist, die Sie für die Verbindung mit der Registry verwenden. Siehe Angeben eines Warehouses.

Im folgenden Beispiel wird die Ausführung der Methode predict eines Modells gezeigt. Die predict-Methode dieses Modells benötigt außer den Inferenzdaten (hier test_features) keine weiteren Parameter. Wenn dies der Fall wäre, würden sie als zusätzliche Argumente nach den Inferenzdaten übergeben werden.

remote_prediction = mv.run(test_features, function_name="predict")
remote_prediction.show()   # assuming test_features is Snowpark DataFrame
Copy

Um zu erfahren, welche Methoden für ein bestimmtes Modell aufgerufen werden können, rufen Sie mv.show_functions auf. Der Rückgabewert dieser Methode ist eine Liste von ModelFunctionInfo-Objekten. Jedes dieser Objekte enthält die folgenden Attribute:

  • name: Name der Funktion, die von Python oder SQL aufgerufen werden kann.

  • target_method: Name der Python-Methode in dem ursprünglich protokollierten Modell.

Tipp

Sie können Modellmethoden auch in SQL aufrufen. Siehe Befehle für Modelle.

Freigeben von Modellen

Die Modell-Registry kann zwei Arten von Modellen speichern. Sie können sie anhand der MODEL_TYPE-Spalte in der Ausgabe von SHOW MODELS unterscheiden.

  • CORTEX_FINETUNED: Modelle, die mit Cortex Fine-tuning erstellt wurden und keinen Benutzer-Code enthalten. Um diese Art von Modellen gemeinsam zu nutzen, verwenden Sie Datenfreigabe.

  • USER_MODEL: Modelle, die Benutzer-Code enthalten, wie z. B. Modelle, die mit Snowpark ML Modellierungsklassen entwickelt wurden. Diese Modelle können derzeit nicht gemeinsam genutzt werden. Die Möglichkeit, Modelle, die Benutzer-Code enthalten, gemeinsam zu nutzen, wird in einem zukünftigen Release verfügbar sein.

Hinweise zu Kosten

Für die Verwendung der Snowflake Model Registry fallen die üblichen verbrauchsabhängigen Kosten von Snowflake an. Dazu zählen:

  • Kosten für die Speicherung von Modellartefakten, Metadaten und Funktionen. Allgemeine Informationen zu den Kosten für den Speicher finden Sie unter Untersuchen der Speicherkosten.

  • Kosten für das Kopieren von Dateien zwischen Stagingbereichen und Snowflake. Siehe COPY FILES.

  • Kosten für serverlose Modellobjektoperationen über die Snowsight-UI oder die SQL- oder Python-Schnittstelle, z. B. das Anzeigen von Modellen und Modellversionen und das Ändern der Kommentare, Tags und Kennzahlen von Modellen.

  • Warehouse-Computekosten, die je nach Typ des Modells und der Menge der für Interferenz verwendeten Daten variieren. Allgemeine Informationen zu den Snowflake-Computekosten finden Sie unter Erläuterungen zu den Computekosten. Warehouse-Computekosten fallen bei:

    • Operationen zum Erstellen von Modellen und Versionen

    • Aufrufen der Methoden eines Modells