Native Bewertung mithilfe der PREDICT-T-SQL-Funktion mit SQL Machine Learning
Gilt für: SQL Server 2017 (14.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics
Hier erfahren Sie, wie Sie die native Bewertung mit der T-SQL-Funktion PREDICT verwenden, um Vorhersagewerte für neue Dateneingaben nahezu in Echtzeit zu generieren. Für die native Bewertung ist ein bereits trainiertes Modell erforderlich.
Die PREDICT
-Funktion verwendet die nativen Funktionen der C++-Erweiterung in SQL Machine Learning. Diese Methodik bietet die schnellste Verarbeitungsgeschwindigkeit von Vorhersage- und Prognoseworkloads und unterstützt Modelle im ONNX-Format (Open Neural Network Exchange) oder Modelle, die mithilfe der RevoScaleR- und revoscalepy-Pakete trainiert werden.
Funktionsweise der nativen Bewertung
Die native Bewertung verwendet Bibliotheken, die Modelle im ONNX-Format oder einem vordefinierten Binärformat lesen und Ergebnisse für neue Dateneingaben generieren können, die Sie bereitstellen. Da das Modell trainiert, bereitgestellt und gespeichert wird, kann es für die Bewertung verwendet werden, ohne den R- oder Python-Interpreter aufrufen zu müssen. Das bedeutet, dass der Aufwand für mehrere Prozessinteraktionen verringert wird, was wesentlich schnellere Vorhersagen ermöglicht.
Rufen Sie zur Verwendung der nativen Bewertung die T-SQL-Funktion PREDICT
auf, und übergeben Sie die folgenden erforderlichen Eingaben:
- ein kompatibles Modell, das auf einem unterstützten Modell und Algorithmus basiert
- Eingabedaten, die in der Regel als SQL-Abfrage definiert sind
Die Funktion gibt Vorhersagen für die Eingabedaten zurück, zusammen mit allen Spalten der Quelldaten, die Sie durchlaufen möchten.
Voraussetzungen
PREDICT
ist verfügbar in den folgenden Versionen:
- alle Editionen von SQL Server 2017 oder höher unter Windows und Linux
- Verwaltete Azure SQL-Instanz
- Azure SQL-Datenbank
- Azure SQL Edge
- Azure Synapse Analytics
Die Funktion ist standardmäßig aktiviert. Sie müssen R bzw. Python nicht installieren oder zusätzliche Features aktivieren.
Unterstützte Modelle
Welche Modellformate von der PREDICT
-Funktion unterstützt werden, hängt von der SQL-Plattform ab, auf der Sie die native Bewertung durchführen. In der folgenden Tabelle sehen Sie, welche Modellformate auf welcher Plattform unterstützt werden.
Plattform | ONNX-Modellformat | RevoScale-Modellformat |
---|---|---|
SQL Server | Nein | Ja |
Verwaltete Azure SQL-Instanz | Ja | Ja |
Azure SQL-Datenbank | Nein | Ja |
Azure SQL Edge | Ja | Nein |
Azure Synapse Analytics | Ja | Nein |
ONNX-Modelle
Das Modell muss im ONNX-Modellformat (Open Neural Network Exchange) vorliegen.
RevoScale-Modelle
Das Modell muss vorab mithilfe des RevoScaleR- oder revoscalepy-Pakets mit einem der unterstützten rx-Algorithmen trainiert werden, die unten aufgeführt sind.
Serialisieren Sie das Modell mithilfe von rxSerialize für R und rx_serialize_model für Python. Diese Serialisierungsfunktionen wurden zur Unterstützung einer schnellen Bewertung optimiert.
Unterstützte RevoScale-Algorithmen
Die folgenden Algorithmen werden in revoscalepy und RevoScaleR unterstützt.
revoscalepy-Algorithmen
RevoScaleR-Algorithmen
Wenn Sie einen Algorithmus aus MicrosoftML oder microsoftml verwenden müssen, verwenden Sie Echtzeitbewertung mit sp_rxPredict.
Die folgenden Modelltypen werden nicht unterstützt:
- Modelle, die andere Transformationen enthalten
- Modelle, die die
rxGlm
- oderrxNaiveBayes
-Algorithmen in Entsprechungen von RevoScaleR oder revoscalepy verwenden - PMML-Modelle
- Mit anderen Open-Source- oder Drittanbieterbibliotheken erstellte Modelle
Beispiele
PREDICT mit einem ONNX-Modell
In diesem Beispiel wird gezeigt, wie ein in der dbo.models
-Tabelle gespeichertes ONNX-Modell für die native Bewertung verwendet wird.
DECLARE @model VARBINARY(max) = (
SELECT DATA
FROM dbo.models
WHERE id = 1
);
WITH predict_input
AS (
SELECT TOP (1000) [id]
, CRIM
, ZN
, INDUS
, CHAS
, NOX
, RM
, AGE
, DIS
, RAD
, TAX
, PTRATIO
, B
, LSTAT
FROM [dbo].[features]
)
SELECT predict_input.id
, p.variable1 AS MEDV
FROM PREDICT(MODEL = @model, DATA = predict_input, RUNTIME=ONNX) WITH (variable1 FLOAT) AS p;
Hinweis
Da die von PREDICT zurückgegebenen Spalten und Werte je nach Modelltyp variieren können, müssen Sie das Schema der zurückgegebenen Daten mithilfe einer WITH-Klausel definieren.
PREDICT mit einem RevoScale-Modell
In diesem Beispiel erstellen Sie mithilfe von RevoScaleR in R ein Modell und rufen dann die T-SQL-Funktion für Vorhersagen in Echtzeit auf.
Schritt 1: Vorbereiten und Speichern des Modells
Führen Sie den folgenden Code aus, um die Beispieldatenbank und die erforderlichen Tabellen zu erstellen.
CREATE DATABASE NativeScoringTest;
GO
USE NativeScoringTest;
GO
DROP TABLE IF EXISTS iris_rx_data;
GO
CREATE TABLE iris_rx_data (
"Sepal.Length" float not null, "Sepal.Width" float not null
, "Petal.Length" float not null, "Petal.Width" float not null
, "Species" varchar(100) null
);
GO
Verwenden Sie die folgende Anweisung, um die Datentabelle mit Daten aus dem Iris-Dataset aufzufüllen.
INSERT INTO iris_rx_data ("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width" , "Species")
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'iris_data <- iris;'
, @input_data_1 = N''
, @output_data_1_name = N'iris_data';
GO
Erstellen Sie nun eine Tabelle zum Speichern von Modellen.
DROP TABLE IF EXISTS ml_models;
GO
CREATE TABLE ml_models ( model_name nvarchar(100) not null primary key
, model_version nvarchar(100) not null
, native_model_object varbinary(max) not null);
GO
Mit dem folgenden Code wird ein Modell erstellt, das auf dem Iris-Dataset basiert und in der Tabelle mit dem Namen Modelle gespeichert wird.
DECLARE @model varbinary(max);
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
iris.sub <- c(sample(1:50, 25), sample(51:100, 25), sample(101:150, 25))
iris.dtree <- rxDTree(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, data = iris[iris.sub, ])
model <- rxSerializeModel(iris.dtree, realtimeScoringOnly = TRUE)
'
, @params = N'@model varbinary(max) OUTPUT'
, @model = @model OUTPUT
INSERT [dbo].[ml_models]([model_name], [model_version], [native_model_object])
VALUES('iris.dtree','v1', @model) ;
Hinweis
Stellen Sie sicher, dass Sie die rxSerializeModel-Funktion von RevoScaleR verwenden, um das Modell zu speichern. Die standardmäßige R-Funktion serialize
kann das erforderliche Format nicht generieren.
Sie können eine Anweisung wie die folgende ausführen, um das gespeicherte Modell im Binärformat anzuzeigen:
SELECT *, datalength(native_model_object)/1024. as model_size_kb
FROM ml_models;
Schritt 2: Ausführen von PREDICT für das Modell
Die folgende einfache PREDICT-Anweisung ruft eine Klassifizierung aus dem Entscheidungsstrukturmodell mithilfe der Funktion für die native Bewertung ab. Die Irisarten werden anhand der von Ihnen angegebenen Attribute, der Länge und Breite der Blütenblätter, vorhergesagt.
DECLARE @model varbinary(max) = (
SELECT native_model_object
FROM ml_models
WHERE model_name = 'iris.dtree'
AND model_version = 'v1');
SELECT d.*, p.*
FROM PREDICT(MODEL = @model, DATA = dbo.iris_rx_data as d)
WITH(setosa_Pred float, versicolor_Pred float, virginica_Pred float) as p;
go
Wenn ein Fehler wie „Fehler bei der Ausführung der Funktion PREDICT. Modell ist beschädigt oder ungültig.“ erhalten, bedeutet das normalerweise, dass die Abfrage kein Modell zurückgegeben hat. Überprüfen Sie, ob Sie den Modellnamen ordnungsgemäß eingegeben haben oder ob die Tabelle des Modells leer ist.
Hinweis
Da die von PREDICT zurückgegebenen Spalten und Werte je nach Modelltyp variieren können, müssen Sie das Schema der zurückgegebenen Daten mithilfe einer WITH-Klausel definieren.