Delen via


Systeemeigen scoren met behulp van de functie PREDICT T-SQL met SQL Machine Learning

Van toepassing op: SQL Server 2017 (14.x) en latere versies Van Azure SQL Managed InstanceAzure Synapse Analytics

Meer informatie over het gebruik van systeemeigen scoren met de functie PREDICT T-SQL om voorspellingswaarden te genereren voor nieuwe gegevensinvoer in bijna realtime. Systeemeigen scoren vereist dat u een al getraind model hebt.

De PREDICT functie maakt gebruik van de systeemeigen C++-extensiemogelijkheden in SQL Machine Learning. Deze methodologie biedt de snelst mogelijke verwerkingssnelheid van prognose- en voorspellingsworkloads en ondersteuningsmodellen in de Open Neural Network Exchange-indeling (alleen Azure Synapse Analytics) of modellen die zijn getraind met behulp van de RevoScaleR en revoscalepy-pakketten .

Hoe systeemeigen scoren werkt

Systeemeigen scoren maakt gebruik van bibliotheken die modellen kunnen lezen in ONNX of een vooraf gedefinieerde binaire indeling en scores genereren voor nieuwe gegevensinvoer die u opgeeft. Omdat het model is getraind, geïmplementeerd en opgeslagen, kan het worden gebruikt voor scoren zonder de R- of Python-interpreter aan te roepen. Dit betekent dat de overhead van meerdere procesinteracties wordt verminderd, wat resulteert in snellere voorspellingsprestaties.

Als u systeemeigen scoren wilt gebruiken, roept u de PREDICT T-SQL-functie aan en geeft u de volgende vereiste invoer door:

  • Een compatibel model op basis van een ondersteund model en algoritme.
  • Invoergegevens, meestal gedefinieerd als een T-SQL-query.

De functie retourneert voorspellingen voor de invoergegevens, samen met kolommen met brongegevens die u wilt doorgeven.

Vereiste voorwaarden

PREDICT is beschikbaar op:

  • Alle edities van SQL Server 2017 en hoger in Windows en Linux
  • Azure SQL Managed Instance (een beheerde database-instantie van Azure)
  • Azure Synapse Analytics

De functie is standaard ingeschakeld. U hoeft R of Python niet te installeren of extra functies in te schakelen.

Ondersteunde modellen

De modelindelingen die door de PREDICT functie worden ondersteund, zijn afhankelijk van het SQL-platform waarop u systeemeigen scoren uitvoert. Zie de onderstaande tabel om te zien welke modelindelingen worden ondersteund op welk platform.

Platform ONNX-modelindeling RevoScale-modelindeling
SQL Server Nee. Yes
Azure SQL Managed Instance (een beheerde database-instantie van Azure) Nee. Yes
Azure Synapse Analytics Yes Nee.

ONNX-modellen

Het model moet de modelindeling Open Neural Network Exchange (ONNX) hebben.

RevoScale-modellen

Het model moet vooraf worden getraind met behulp van een van de ondersteunde rx-algoritmen die hieronder worden vermeld met behulp van het RevoScaleR - of revoscalepy-pakket .

Serialiseer het model met rxSerialize voor R en rx_serialize_model voor Python. Deze serialisatiefuncties zijn geoptimaliseerd om snelle scoren te ondersteunen.

Ondersteunde RevoScale-algoritmen

De volgende algoritmen worden ondersteund in revoscalepy en RevoScaleR.

Als u een algoritme van MicrosoftML of microsoftml moet gebruiken, gebruikt u scoren in realtime met sp_rxPredict.

Niet-ondersteunde modeltypen omvatten de volgende typen:

  • Modellen met andere transformaties
  • Modellen die gebruikmaken van de rxGlm of rxNaiveBayes algoritmen in RevoScaleR of revoscalepy-equivalenten
  • PMML-modellen
  • Modellen die zijn gemaakt met behulp van andere opensource- of bibliotheken van derden

Voorbeelden

VOORSPELLEN met een ONNX-model

In dit voorbeeld ziet u hoe u een ONNX-model gebruikt dat is opgeslagen in de dbo.models tabel voor systeemeigen scoren.

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;

Opmerking

Omdat de kolommen en waarden die door PREDICT worden geretourneerd, per modeltype kunnen variëren, moet u het schema van de geretourneerde gegevens definiëren met behulp van een WITH-component .

VOORSPELLEN met RevoScale-model

In dit voorbeeld maakt u een model met behulp van RevoScaleR in R en roept u vervolgens de realtime voorspellingsfunctie van T-SQL aan.

Stap 1. Het model voorbereiden en opslaan

Voer de volgende code uit om de voorbeelddatabase en de vereiste tabellen te maken.

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

Gebruik de volgende instructie om de gegevenstabel te vullen met gegevens uit de irisgegevensset .

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

Maak nu een tabel voor het opslaan van 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

Met de volgende code wordt een model gemaakt op basis van de irisgegevensset en opgeslagen in de tabel met de naammodellen.

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) ;

Opmerking

Zorg ervoor dat u de functie rxSerializeModel van RevoScaleR gebruikt om het model op te slaan. De standaard R-functie serialize kan de vereiste indeling niet genereren.

U kunt een instructie zoals de volgende uitvoeren om het opgeslagen model in binaire indeling weer te geven:

SELECT *, datalength(native_model_object)/1024. as model_size_kb
FROM ml_models;

Stap 2. PREDICT uitvoeren op het model

Met de volgende eenvoudige PREDICT-instructie wordt een classificatie opgehaald uit het beslissingsstructuurmodel met behulp van de systeemeigen scorefunctie . Het voorspelt de irissoorten op basis van kenmerken die u opgeeft, de lengte en breedte van bloemblaadjes.

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

Als u de fout krijgt, 'Fout is opgetreden tijdens de uitvoering van de functie PREDICT. Het model is beschadigd of ongeldig. Dit betekent meestal dat uw query geen model heeft geretourneerd. Controleer of u de modelnaam juist hebt getypt of dat de tabel met modellen leeg is.

Opmerking

Omdat de kolommen en waarden die door PREDICT worden geretourneerd, per modeltype kunnen variëren, moet u het schema van de geretourneerde gegevens definiëren met behulp van een WITH-component .