Udostępnij za pomocą


Natywne ocenianie przy użyciu funkcji PREDICT T-SQL z uczeniem maszynowym SQL

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje usługi Azure SQL Managed InstanceAzure Synapse Analytics

Dowiedz się, jak używać natywnego oceniania za pomocą funkcji PREDICT T-SQL w celu generowania wartości przewidywania dla nowych danych wejściowych w czasie niemal rzeczywistym. Natywne ocenianie wymaga, aby masz już wytrenowany model.

Funkcja PREDICT korzysta z natywnych funkcji rozszerzenia języka C++ w uczeniu maszynowym SQL. Ta metodologia oferuje najszybszą możliwą szybkość przetwarzania obciążeń związanych z prognozowaniem i przewidywaniem oraz modele obsługiwane w formacie Open Neural Network Exchange (ONNX) (tylko Azure Synapse Analytics) lub modele wytrenowane przy użyciu pakietów RevoScaleR i revoscalepy.

Jak działa ocenianie natywne

Natywne ocenianie używa bibliotek, które mogą odczytywać modele w formacie ONNX lub wstępnie zdefiniowanym formacie binarnym i generować wyniki dla nowych danych wejściowych, które zostały podane. Ponieważ model jest trenowany, wdrażany i przechowywany, może być używany do oceniania bez konieczności wywoływania interpretera języka R lub Python. Oznacza to, że obciążenie związane z interakcjami wielu procesów jest zmniejszone, co skutkuje szybszą wydajnością przewidywań.

Aby użyć natywnego oceniania, wywołaj PREDICT funkcję T-SQL i przekaż następujące wymagane dane wejściowe:

  • Model zgodny oparty na obsługiwanym modelu i algorytmie.
  • Dane wejściowe, zwykle zdefiniowane jako zapytanie T-SQL.

Funkcja zwraca przewidywania danych wejściowych wraz z kolumnami danych źródłowych, które mają zostać przekazane.

Wymagania wstępne

PREDICT jest dostępny w następujących miejscach:

  • Wszystkie wersje programu SQL Server 2017 i nowszych w systemach Windows i Linux
  • Azure SQL Managed Instance
  • Azure Synapse Analytics

Funkcja jest domyślnie włączona. Nie musisz instalować języka R lub Python ani włączać dodatkowych funkcji.

Obsługiwane modele

Formaty modelu obsługiwane przez PREDICT funkcję zależą od platformy SQL, na której wykonujesz natywne ocenianie. Zapoznaj się z poniższą tabelą, aby zobaczyć, które formaty modeli są obsługiwane na jakiej platformie.

Platforma Format modelu ONNX Format modelu RevoScale
SQL Server Nie. Tak
Azure SQL Managed Instance Nie. Tak
Azure Synapse Analytics Tak Nie.

Modele ONNX

Model musi mieć format modelu Open Neural Network Exchange (ONNX).

Modele RevoScale

Model należy wytrenować z wyprzedzeniem przy użyciu jednego z obsługiwanych algorytmów rx wymienionych poniżej przy użyciu pakietu RevoScaleR lub revoscalepy .

Serializuj model przy użyciu funkcji rxSerialize dla języka R i rx_serialize_model dla języka Python. Te funkcje serializacji zostały zoptymalizowane pod kątem szybkiego przetwarzania wyników.

Obsługiwane algorytmy RevoScale

Następujące algorytmy są obsługiwane w wersjach revoscalepy i RevoScaleR.

Jeśli musisz użyć algorytmu z MicrosoftML lub microsoftml, użyj prognozowania w czasie rzeczywistym za pomocą sp_rxPredict.

Nieobsługiwane typy modeli obejmują następujące typy:

  • Modele zawierające inne przekształcenia
  • Modele korzystające z algorytmów rxGlm lub rxNaiveBayes w ramach RevoScaleR lub jego odpowiedników w revoscalepy
  • Modele PMML
  • Modele utworzone przy użyciu innych bibliotek typu open source lub innych firm

Przykłady

PRZEWIDYWANIE za pomocą modelu ONNX

W tym przykładzie pokazano, jak używać modelu ONNX przechowywanego w tabeli na potrzeby natywnego dbo.models oceniania.

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;

Uwaga / Notatka

Ponieważ kolumny i wartości zwracane przez metodę PREDICT mogą się różnić w zależności od typu modelu, należy zdefiniować schemat zwracanych danych przy użyciu klauzuli WITH .

PREDICT with RevoScale model (PRZEWIDYWANIE za pomocą modelu RevoScale)

W tym przykładzie utworzysz model przy użyciu narzędzia RevoScaleR w języku R, a następnie wywołasz funkcję przewidywania w czasie rzeczywistym z języka T-SQL.

Krok 1. Przygotowywanie i zapisywanie modelu

Uruchom następujący kod, aby utworzyć przykładową bazę danych i wymagane tabele.

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

Użyj poniższej instrukcji, aby wypełnić tabelę danych danymi z iris.

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

Teraz utwórz tabelę do przechowywania modeli.

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

Poniższy kod tworzy model na podstawie zestawu danych iris i zapisuje go w tabeli o nazwie 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) ;

Uwaga / Notatka

Pamiętaj, aby zapisać model za pomocą funkcji rxSerializeModel z pakietu RevoScaleR. Standardowa funkcja języka R serialize nie może wygenerować wymaganego formatu.

Możesz uruchomić instrukcję, taką jak poniżej, aby wyświetlić przechowywany model w formacie binarnym:

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

Krok 2. Uruchom PREDICT na modelu

Poniższa prosta instrukcja PREDICT pobiera klasyfikację z modelu drzewa decyzyjnego przy użyciu natywnej funkcji oceniania . Przewiduje gatunek irysów na podstawie atrybutów, które podajesz, długość płatka i szerokość.

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

Jeśli wystąpi błąd "Wystąpił błąd podczas wykonywania funkcji PREDICT. Model jest uszkodzony lub nieprawidłowy", zwykle oznacza to, że zapytanie nie zwróciło modelu. Sprawdź, czy nazwa modelu została wpisana poprawnie, czy tabela models jest pusta.

Uwaga / Notatka

Ponieważ kolumny i wartości zwracane przez metodę PREDICT mogą się różnić w zależności od typu modelu, należy zdefiniować schemat zwracanych danych przy użyciu klauzuli WITH .