Partilhar via


Pontuação nativa usando a função PREDICT T-SQL com aprendizado de máquina SQL

Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Azure SQL Managed InstanceAzure Synapse Analytics

Saiba como usar a pontuação nativa com a função PREDICT T-SQL para gerar valores de previsão para novas entradas de dados quase em tempo real. A pontuação nativa requer que você tenha um modelo já treinado.

A PREDICT função usa os recursos de extensão C++ nativos no aprendizado de máquina SQL. Essa metodologia oferece a maior velocidade de processamento possível para cargas de trabalho de previsão e prognóstico e modelos de apoio no formato Open Neural Network Exchange (ONNX) (somente em Azure Synapse Analytics) ou modelos treinados usando os pacotes RevoScaleR e revoscalepy.

Como funciona a pontuação nativa

A pontuação nativa usa bibliotecas que podem ler modelos em ONNX ou em um formato binário predefinido e gerar pontuações para novas entradas de dados que você fornece. Como o modelo é treinado, implantado e armazenado, ele pode ser usado para pontuação sem ter que chamar o interpretador R ou Python. Isso significa que a sobrecarga de várias interações de processo é reduzida, resultando em um desempenho de previsão mais rápido.

Para usar a pontuação nativa, chame a PREDICT função T-SQL e passe as seguintes entradas necessárias:

  • Um modelo compatível baseado num modelo e algoritmo suportados.
  • Dados de entrada, normalmente definidos como uma consulta T-SQL.

A função retorna previsões para os dados de entrada, juntamente com quaisquer colunas de dados de origem que você deseja passar.

Pré-requisitos

PREDICT está disponível em:

  • Todas as edições do SQL Server 2017 e posteriores no Windows e Linux
  • Azure SQL Managed Instance
  • Azure Synapse Analytics

A função está ativada por padrão. Você não precisa instalar R ou Python ou ativar recursos adicionais.

Modelos suportados

Os formatos de modelo suportados PREDICT pela função dependem da plataforma SQL na qual você executa a pontuação nativa. Consulte a tabela abaixo para ver quais formatos de modelo são suportados em qual plataforma.

Platform Formato do modelo ONNX Formato do modelo RevoScale
SQL Server Não Yes
Azure SQL Managed Instance Não Yes
Azure Synapse Analytics Yes Não

Modelos ONNX

O modelo deve estar em um formato de modelo Open Neural Network Exchange (ONNX).

Modelos RevoScale

O modelo deve ser treinado com antecedência usando um dos algoritmos rx suportados listados abaixo usando o pacote RevoScaleR ou revoscalepy .

Serialize o modelo usando rxSerialize para R e rx_serialize_model para Python. Essas funções de serialização foram otimizadas para suportar pontuação rápida.

Algoritmos RevoScale suportados

Os algoritmos a seguir são suportados em revoscalepy e RevoScaleR.

Caso necessite usar um algoritmo do MicrosoftML ou do microsoftml, utilize a pontuação em tempo real com sp_rxPredict.

Os tipos de modelo sem suporte incluem os seguintes tipos:

  • Modelos contendo outras transformações
  • Modelos que utilizam os algoritmos rxGlm ou rxNaiveBayes em RevoScaleR ou nos equivalentes revoscalepy
  • Modelos de PMML
  • Modelos criados usando outras bibliotecas de código aberto ou de terceiros

Examples

PREVER com um modelo ONNX

Este exemplo mostra como usar um modelo ONNX armazenado na dbo.models tabela para pontuação nativa.

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;

Observação

Como as colunas e os valores retornados por PREDICT podem variar de acordo com o tipo de modelo, você deve definir o esquema dos dados retornados usando uma cláusula WITH .

PREDICT com o modelo RevoScale

Neste exemplo, você cria um modelo usando RevoScaleR em R e, em seguida, chama a função de previsão em tempo real do T-SQL.

Passo 1. Preparar e salvar o modelo

Execute o código a seguir para criar o banco de dados de exemplo e as tabelas necessárias.

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

Use a instrução a seguir para preencher a tabela de dados com dados do conjunto de dados 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

Agora, crie uma tabela para armazenar modelos.

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

O código seguinte cria um modelo com base no conjunto de dados iris e grava-o na tabela chamada 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) ;

Observação

Certifique-se de usar a função rxSerializeModel de RevoScaleR para salvar o modelo. A função R serialize padrão não pode gerar o formato necessário.

Você pode executar uma instrução como a seguinte para exibir o modelo armazenado em formato binário:

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

Passo 2. Executar PREDICT no modelo

A instrução PREDICT simples a seguir obtém uma classificação do modelo de árvore de decisão usando a função de pontuação nativa . Ele prevê as espécies de íris com base nos atributos que você fornece, comprimento e largura da pétala.

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

Se você receber o erro, "Ocorreu um erro durante a execução da função PREDICT. O modelo está corrompido ou inválido", isso geralmente significa que sua consulta não retornou um modelo. Verifique se você digitou o nome do modelo corretamente ou se a tabela de modelos está vazia.

Observação

Como as colunas e os valores retornados por PREDICT podem variar de acordo com o tipo de modelo, você deve definir o esquema dos dados retornados usando uma cláusula WITH .