Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2017 (14.x) e versões
posteriores Azure SQL Managed Instance
Azure 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.
algoritmos revoscalepy
Algoritmos 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
rxGlmourxNaiveBayesem 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 .