Inferenz in Snowflake-Warehouses

Die Snowflake Model Registry führt Modellmethoden standardmäßig in einem Warehouse aus. Die Ausführung von Modellen in einem Warehouse eignet sich für kleine bis mittelgroße Nur-CPU-Modelle, deren Abhängigkeiten von Paketen erfüllt werden können, die im Snowflake conda-Kanal verfügbar sind.

Bemerkung

Sie können Modelle auch auf einem Snowpark Container Services (SPCS) Computepool ausführen. Dieser Ansatz eignet sich besser für große Modelle, die von einer verteilten Inferenz profitieren können. Weitere Informationen dazu finden Sie unter Model Serving in Snowpark Container Services.

Um zu beginnen, protokollieren Sie das Modell in der Modell-Registry. Nur Modelle, die in der Registry erfasst wurden, stehen für die Inferenz zur Verfügung. Das Protokollieren eines Modells oder das Laden eines vorhandenen Modells aus der Registry mit registry.get_model(...).version(...) gibt ein ModelVersion Objekt zurück, mit dem Sie die run-Methode aufrufen können.

Inferenz aus Python

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.

Inferenz aus SQL

Verwenden Sie die Syntax model_name!method_name(...), um Methoden eines Modells aufzurufen. Die für ein Modell verfügbaren Methoden werden durch die zugrunde liegende Python-Modellklasse bestimmt. Viele Arten von Modellen verwenden zum Beispiel eine Methode namens Vorhersage für die Inferenz.

Um eine Methode des Standardmodells aufzurufen, verwenden Sie die folgende Syntax. Fügen Sie alle Methodenargumente in Klammern ein und geben Sie in der FROM-Klausel die Tabelle an, die die Inferenzdaten enthält.

SELECT <model_name>!<method_name>(...) FROM <table_name>;
Copy

Um eine Methode aus einer bestimmten Version eines Modells aufzurufen, erstellen Sie einen Alias für die spezifisch Version des Modells und rufen dann die Methode über den Alias auf.

Verwenden Sie die folgende Syntax, um eine Methode aus einer bestimmten Version eines Modells aufzurufen.

WITH <model_version_alias> AS MODEL <model_name> VERSION <version_or_alias_name>
    SELECT <model_version_alias>!<method_name>(...) FROM <table_name>;
Copy

Das folgende Beispiel verwendet den Alias LAST, um die neueste Version eines Modells aufzurufen.

WITH latest AS MODEL my_model VERSION LAST
    SELECT latest!predict(...) FROM my_table;
Copy

Tipp

Sehen Sie die SQL API-Referenz für das vollständige Modell hier an.