Megosztás a következőn keresztül:


Natív pontozás a PREDICT T-SQL függvény használatával az SQL Machine Learning használatával

A következőkre vonatkozik: SQL Server 2017 (14.x) és újabb verziók Azure SQL Managed InstanceAzure Synapse Analytics

Megtudhatja, hogyan használhat natív pontozást a PREDICT T-SQL függvénnyel az új adatbemenetek előrejelzési értékeinek közel valós idejű létrehozásához. A natív pontozáshoz már betanított modellre van szükség.

A PREDICT függvény a natív C++ kiterjesztési képességeket használja az SQL Machine Learningben. Ez a módszertan a lehető leggyorsabb feldolgozási sebességet kínálja az előrejelzési és előrejelzési számítási feladatokhoz, valamint az Open Neural Network Exchange (ONNX) formátumú támogatási modelleket (csak Az Azure Synapse Analytics esetében) vagy a RevoScaleR és a revoscalepy csomagok használatával betanított modelleket.

A natív pontozás működése

A natív pontozás olyan kódtárakat használ, amelyek képesek modelleket olvasni ONNX-ben vagy előre definiált bináris formátumban, és pontszámokat hoznak létre az Ön által megadott új adatbemenetekhez. Mivel a modell be van tanítva, üzembe helyezve és tárolva van, az R- vagy Python-értelmező meghívása nélkül használható a pontozáshoz. Ez azt jelenti, hogy több folyamat interakciójának többletterhelése csökken, ami gyorsabb előrejelzési teljesítményt eredményez.

Natív pontozás használatához hívja meg a PREDICT T-SQL függvényt, és adja meg a következő szükséges bemeneteket:

  • Támogatott modellen és algoritmuson alapuló kompatibilis modell.
  • Bemeneti adatok, általában T-SQL-lekérdezésként definiálva.

A függvény a bemeneti adatok előrejelzéseit adja vissza a forrásadatok azon oszlopaival együtt, amelyeket át szeretne adni.

Előfeltételek

PREDICT a következő napon érhető el:

  • Az SQL Server 2017 és újabb verzióinak összes kiadása Windowson és Linuxon
  • Azure SQL Managed Instance
  • Azure Synapse Analytics

A függvény alapértelmezés szerint engedélyezve van. Nem kell telepítenie az R-t vagy a Pythont, és nem kell további funkciókat engedélyeznie.

Támogatott modellek

A függvény által PREDICT támogatott modellformátumok attól az SQL-platformtól függenek, amelyen natív pontozást végez. Az alábbi táblázatban láthatja, hogy mely modellformátumok támogatottak melyik platformon.

Plattform ONNX modellformátum RevoScale modellformátum
SQL Server Nem Igen
Azure SQL Managed Instance Nem Igen
Azure Synapse Analytics Igen Nem

ONNX-modellek

A modellnek nyílt neurális hálózati exchange (ONNX) modellformátumban kell lennie.

RevoScale-modellek

A modellt előzetesen be kell tanítani az alább felsorolt támogatott rx algoritmusok egyikével a RevoScaleR vagy a revoscalepy csomag használatával.

Szerializálja a modellt az R rxSerialize és a Python rx_serialize_model használatával. Ezeket a szerializálási függvényeket úgy optimalizáltuk, hogy támogassák a gyors pontozást.

Támogatott revoscale algoritmusok

A revoscalepy és a RevoScaleR az alábbi algoritmusokat támogatja.

Ha a MicrosoftML vagy a microsoftml algoritmusát kell használnia, használjon valós idejű értékelést az sp_rxPredict segítségével.

A nem támogatott modelltípusok a következő típusokat tartalmazzák:

  • Más átalakításokat tartalmazó modellek
  • A RevoScaleR-ben vagy a revoscalepy ekvivalensekben rxGlm vagy rxNaiveBayes algoritmusokat használó modellek
  • PMML-modellek
  • Más nyílt forráskódú vagy külső kódtárak használatával létrehozott modellek

Példák

ELŐREJELZÉS ONNX-modellel

Ez a példa bemutatja, hogyan használható a táblában tárolt ONNX-modell natív dbo.models pontozáshoz.

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;

Megjegyzés:

Mivel a PREDICT által visszaadott oszlopok és értékek modelltípusonként eltérőek lehetnek, a visszaadott adatok sémáját EGY WITH záradék használatával kell meghatároznia.

PREDICT és RevoScale modell

Ebben a példában a RevoScaleR használatával hoz létre egy modellt az R-ben, majd meghívja a valós idejű előrejelzési függvényt a T-SQL-ből.

1. lépés. A modell előkészítése és mentése

Futtassa a következő kódot a mintaadatbázis és a szükséges táblák létrehozásához.

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

Az alábbi utasítással töltse fel az adattáblát az írisz adatkészletből származó adatokkal.

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

Most hozzon létre egy táblázatot a modellek tárolásához.

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

Az alábbi kód létrehoz egy modellt az írisz-adatkészlet alapján, és menti a modellek nevű táblába.

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

Megjegyzés:

A modell mentéséhez mindenképpen használja a RevoScaleR rxSerializeModel függvényét. A standard R serialize függvény nem tudja létrehozni a szükséges formátumot.

A tárolt modell bináris formátumban való megtekintéséhez az alábbihoz hasonló utasítást futtathat:

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

2. lépés. A PREDICT futtatása a modellen

Az alábbi egyszerű PREDICT utasítás a döntési fa modellből kap besorolást a natív pontozási függvény használatával. Előrejelzi az íriszfajt az Ön által megadott attribútumok, a szirom hossza és szélessége alapján.

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

Ha a következő hibaüzenet jelenik meg: "Hiba történt a PREDICT függvény végrehajtása során. A modell sérült vagy érvénytelen", általában azt jelenti, hogy a lekérdezés nem adott vissza modellt. Ellenőrizze, hogy helyesen adta-e meg a modell nevét, vagy üres-e a modelltábla.

Megjegyzés:

Mivel a PREDICT által visszaadott oszlopok és értékek modelltípusonként eltérőek lehetnek, a visszaadott adatok sémáját EGY WITH záradék használatával kell meghatároznia.