Sdílet prostřednictvím


Nativní bodování s využitím funkce PREDICT T-SQL se strojovým učením SQL

Platí pro: SQL Server 2017 (14.x) a novější verze Azure SQL Managed InstanceAzure Synapse Analytics

Naučte se používat nativní bodování s funkcí PREDICT T-SQL ke generování hodnot předpovědi pro nové vstupy dat téměř v reálném čase. Natívní skórování vyžaduje, abyste měli již vyškolený model.

Funkce PREDICT používá nativní funkce rozšíření jazyka C++ ve strojovém učení SQL. Tato metodologie nabízí nejrychlejší možnou rychlost zpracování předpovědí a předpovědí úloh a modelů podpory ve formátu Open Neural Network Exchange (ONNX) (pouze Azure Synapse Analytics) nebo modely natrénované pomocí balíčků RevoScaleR a revoscalepy .

Jak funguje nativní bodování

Nativní bodování používá knihovny, které mohou číst modely v ONNX nebo předdefinovaném binárním formátu a generovat skóre pro nové datové vstupy, které zadáte. Vzhledem k tomu, že je model vytrénovaný, nasazený a uložený, můžete ho použít k bodování, aniž byste museli volat interpret R nebo Python. To znamená, že se snižují režijní náklady více interakcí procesů, což vede k rychlejšímu výkonu predikce.

Pokud chcete použít nativní bodování, zavolejte PREDICT funkci T-SQL a předejte následující požadované vstupy:

  • Kompatibilní model založený na podporovaném modelu a algoritmu.
  • Vstupní data, obvykle definovaná jako dotaz T-SQL.

Funkce vrátí předpovědi pro vstupní data spolu se všemi sloupci zdrojových dat, které chcete procházet.

Požadavky

PREDICT je k dispozici na:

  • Všechny edice SQL Serveru 2017 a novější ve Windows a Linuxu
  • Azure SQL Managed Instance
  • Azure Synapse Analytics

Funkce je ve výchozím nastavení povolená. Nemusíte instalovat R ani Python ani povolovat další funkce.

Podporované modely

Formáty modelů podporované funkcí PREDICT závisí na platformě SQL, na které provádíte nativní bodování. V následující tabulce najdete informace o podporovaných formátech modelů na které platformě.

Platforma Formát modelu ONNX Formát modelu RevoScale
SQL Server Ne Ano
Azure SQL Managed Instance Ne Ano
Azure Synapse Analytics Ano Ne

Modely ONNX

Model musí být ve formátu modelu Open Neural Network Exchange (ONNX).

Modely RevoScale

Model se musí předem vytrénovat pomocí některého z podporovaných algoritmů rx uvedených níže pomocí balíčku RevoScaleR nebo revoscalepy .

Serializace modelu pomocí rxSerialize pro R a rx_serialize_model pro Python. Tyto serializační funkce jsou optimalizované tak, aby podporovaly rychlé bodování.

Podporované algoritmy RevoScale

Následující algoritmy jsou podporovány v revoscalepy a RevoScaleR.

Pokud potřebujete použít algoritmus z MicrosoftML nebo microsoftml, použijte bodování v reálném čase s sp_rxPredict.

Nepodporované typy modelů zahrnují následující typy:

  • Modely obsahující další transformace
  • Modely využívající rxGlmrxNaiveBayes algoritmy v ekvivalentech RevoScaleR nebo revoscalepy
  • Modely PMML
  • Modely vytvořené pomocí jiných opensourcových knihoven nebo knihoven třetích stran

Examples

Predikce s modelem ONNX

Tento příklad ukazuje, jak použít model ONNX uložený v dbo.models tabulce pro nativní bodování.

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;

Poznámka:

Vzhledem k tomu, že sloupce a hodnoty vrácené aplikací PREDICT se mohou lišit podle typu modelu, je nutné definovat schéma vrácených dat pomocí klauzule WITH .

PREDICT s využitím modelu RevoScale

V tomto příkladu vytvoříte model pomocí RevoScaleR v jazyce R a potom zavoláte funkci predikce v reálném čase z T-SQL.

Krok 1. Příprava a uložení modelu

Spuštěním následujícího kódu vytvořte ukázkovou databázi a požadované tabulky.

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

K naplnění tabulky dat dat dat z datové sady iris použijte následující příkaz.

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

Teď vytvořte tabulku pro ukládání modelů.

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

Následující kód vytvoří model založený na datové sadě iris a uloží ho do tabulky pojmenované modely.

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

Poznámka:

Nezapomeňte k uložení modelu použít funkci rxSerializeModel z RevoScaleR. Standardní funkce jazyka R serialize nemůže vygenerovat požadovaný formát.

Spuštěním příkazu, jako je například následující, můžete zobrazit uložený model v binárním formátu:

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

Krok 2. Spuštění funkce PREDICT v modelu

Následující jednoduchý příkaz PREDICT získá klasifikaci z modelu rozhodovacího stromu pomocí nativní funkce bodování . Predikuje druh duhovky na základě atributů, které zadáte, délku okvětního lístku a šířku.

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

Pokud se zobrazí chyba"Při provádění funkce PREDICT došlo k chybě. Model je poškozený nebo neplatný", obvykle to znamená, že dotaz nevrátil model. Zkontrolujte, jestli jste správně zadali název modelu nebo jestli je tabulka modelů prázdná.

Poznámka:

Vzhledem k tomu, že sloupce a hodnoty vrácené aplikací PREDICT se mohou lišit podle typu modelu, je nutné definovat schéma vrácených dat pomocí klauzule WITH .