Dela via


Intern bedömning med hjälp av funktionen PREDICT T-SQL med SQL-maskininlärning

Gäller för: SQL Server 2017 (14.x) och senare versioner Azure SQL Managed InstanceAzure Synapse Analytics

Lär dig hur du använder intern bedömning med funktionen PREDICT T-SQL för att generera förutsägelsevärden för nya dataindata nästan i realtid. Inbyggd bedömning kräver att du har en tidigare tränad modell.

Funktionen PREDICT använder de inbyggda C++-tilläggsfunktionerna i SQL-maskininlärning. Den här metoden erbjuder den snabbaste möjliga bearbetningshastigheten för prognostiserings- och förutsägelsearbetsbelastningar och stöder modeller i ONNX-format (Open Neural Network Exchange) ( endast Azure Synapse Analytics) eller modeller som tränats med RevoScaleR - och revoscalepy-paket .

Så här fungerar naturlig poängsättning

Intern bedömning använder bibliotek som kan läsa modeller i ONNX eller ett fördefinierat binärt format och generera poäng för nya dataindata som du anger. Eftersom modellen tränas, distribueras och lagras kan den användas för bedömning utan att behöva anropa R- eller Python-tolken. Det innebär att omkostnaderna för flera processinteraktioner minskar, vilket resulterar i snabbare förutsägelseprestanda.

Om du vill använda intern bedömning anropar du PREDICT T-SQL-funktionen och skickar följande obligatoriska indata:

  • En kompatibel modell baserad på en modell och algoritm som stöds.
  • Indata, som vanligtvis definieras som en T-SQL-fråga.

Funktionen returnerar förutsägelser för indata, tillsammans med alla kolumner med källdata som du vill skicka igenom.

Förutsättningar

PREDICT är tillgänglig på:

  • Alla utgåvor av SQL Server 2017 och senare i Windows och Linux
  • Hanterad instans i Azure SQL
  • Azure Synapse Analytics

Funktionen är aktiverad som standard. Du behöver inte installera R eller Python eller aktivera ytterligare funktioner.

Modeller som stöds

De modellformat som stöds av PREDICT funktionen beror på den SQL-plattform som du utför intern bedömning på. Se tabellen nedan för att se vilka modellformat som stöds på vilken plattform.

Platform ONNX-modellformat RevoScale-modellformat
SQL Server Nej Yes
Hanterad instans i Azure SQL Nej Yes
Azure Synapse Analytics Yes Nej

ONNX-modeller

Modellen måste vara i ett ONNX-modellformat (Open Neural Network Exchange).

RevoScale-modeller

Modellen måste tränas i förväg med någon av de rx-algoritmer som stöds som anges nedan med revoScaleR - eller revoscalepy-paketet .

Serialisera modellen med rxSerialize för R och rx_serialize_model för Python. Dessa serialiseringsfunktioner har optimerats för att stödja snabb bedömning.

RevoScale-algoritmer som stöds

Följande algoritmer stöds i revoscalepy och RevoScaleR.

Om du behöver använda en algoritm från MicrosoftML eller microsoftml använder du realtidsbedömning med sp_rxPredict.

Modelltyper som inte stöds innehåller följande typer:

  • Modeller som innehåller andra transformeringar
  • Modeller som använder rxGlm algoritmerna eller rxNaiveBayes i RevoScaleR eller revoscalepy-motsvarigheter
  • PMML-modeller
  • Modeller som skapats med andra bibliotek med öppen källkod eller tredje part

Examples

FÖRUTSÄGA med en ONNX-modell

Det här exemplet visar hur du använder en ONNX-modell som lagras i dbo.models tabellen för intern bedömning.

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;

Anmärkning

Eftersom kolumnerna och värdena som returneras av PREDICT kan variera beroende på modelltyp måste du definiera schemat för returnerade data med hjälp av en WITH-sats .

PREDICT med RevoScale-modell

I det här exemplet skapar du en modell med RevoScaleR i R och anropar sedan realtidsförutsägelsefunktionen från T-SQL.

Steg 1. Förbereda och spara modellen

Kör följande kod för att skapa exempeldatabasen och obligatoriska tabeller.

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

Använd följande instruktion för att fylla i datatabellen med data från iris-datauppsättningen .

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

Skapa nu en tabell för lagring av modeller.

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

Följande kod skapar en modell baserat på iris-datauppsättningen och sparar den i tabellen med namnet models.

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

Anmärkning

Se till att använda funktionen rxSerializeModel från RevoScaleR för att spara modellen. Standard-R-funktionen serialize kan inte generera det format som krävs.

Du kan köra en instruktion som följande för att visa den lagrade modellen i binärt format:

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

Steg 2. Kör PREDICT på modellen

Följande enkla PREDICT-instruktion hämtar en klassificering från beslutsträdsmodellen med hjälp av den interna bedömningsfunktionen . Den förutsäger irisarterna baserat på attribut som du tillhandahåller, kronbladslängd och bredd.

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

Om du får felet "Felet inträffade under körningen av funktionen PREDICT. Modellen är skadad eller ogiltig", innebär det vanligtvis att frågan inte returnerade en modell. Kontrollera om du har skrivit modellnamnet korrekt eller om modelltabellen är tom.

Anmärkning

Eftersom kolumnerna och värdena som returneras av PREDICT kan variera beroende på modelltyp måste du definiera schemat för returnerade data med hjälp av en WITH-sats .