Pontuação em tempo real com sp_rxPredict em SQL Server

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores

Saiba como efetuar a classificação em tempo real com o procedimento armazenado de sistema sp_rxPredict no SQL Server para previsões ou classificações de elevado desempenho em cargas de trabalho de previsão.

A pontuação em tempo real com sp_rxPredict é independente da linguagem e executa-se sem dependências dos runtimes R ou Python em Machine Learning Services. Usando um modelo criado e treinado com funções Microsoft e serializado para um formato binário no SQL Server, pode usar pontuação em tempo real para gerar resultados previstos em novas entradas de dados em instâncias do SQL Server que não tenham instalado o add-on R ou Python.

Como funciona a pontuação em tempo real

A pontuação em tempo real é suportada em tipos específicos de modelos baseados em funções em RevoScaleR ou MicrosoftML em R, ou revoscalepy ou microsoftml em Python. Utiliza bibliotecas nativas em C++ para gerar pontuações com base na entrada do utilizador fornecida num modelo de aprendizagem automática armazenado num formato binário especial.

Como um modelo treinado pode ser usado para pontuação sem ter de chamar um runtime de linguagem externa no Machine Learning Services, a sobrecarga de múltiplos processos é reduzida.

A pontuação em tempo real é um processo em vários passos:

  1. Ativas o procedimento armazenado que faz a pontuação por base de dados.
  2. Carregas o modelo pré-treinado em formato binário.
  3. Fornece novos dados de entrada a serem pontuados, seja tabulares ou linhas individuais, como entrada para o modelo.
  4. Para gerar pontuações, chame o sp_rxPredict procedimento armazenado.

Pré-requisitos

Note

A pontuação em tempo real está atualmente otimizada para previsões rápidas em conjuntos de dados mais pequenos, que vão desde algumas linhas até centenas de milhares de linhas. Em grandes conjuntos de dados, usar o rxPredict pode ser mais rápido.

Permitir a pontuação em tempo real

Ativa esta funcionalidade para cada base de dados que pretendes usar para pontuação. O administrador do servidor deve executar a utilidade de linha de comandos, RegisterRExt.exe, que está incluída no pacote RevoScaleR.

Atenção

Para que a pontuação em tempo real funcione, a funcionalidade SQL CLR precisa de estar ativada na instância e a base de dados deve ser considerada fiável. Ao executar o script, estas ações são executadas automaticamente. No entanto, considere cuidadosamente as implicações adicionais de segurança antes de o fazer.

  1. Abra uma linha de comandos elevada e navegue até à pasta onde se encontra o RegisterRExt.exe. O seguinte caminho pode ser usado numa instalação predefinida:

    <SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\

  2. Execute o seguinte comando, substituindo o nome da sua instância e a base de dados alvo onde pretende ativar os procedimentos armazenados estendidos:

    RegisterRExt.exe /installRts [/instance:name] /database:databasename

    Por exemplo, para adicionar o procedimento armazenado estendido à base de dados CLRPredict na instância predefinida, escreva:

    RegisterRExt.exe /installRts /database:CLRPRedict

    O nome da instância é opcional se a base de dados estiver na instância padrão. Se estiveres a usar uma instância nomeada, especifica o nome da instância.

  3. RegisterRExt.exe cria os seguintes objetos:

    • Assemblies fidedignas
    • O procedimento armazenado sp_rxPredict
    • Uma nova função de base de dados, rxpredict_users. O administrador da base de dados pode usar este papel para conceder permissão a utilizadores que utilizam a funcionalidade de pontuação em tempo real.
  4. Adicione os utilizadores que precisem de executar sp_rxPredict à nova função.

Note

No SQL Server 2017 e posteriores, estão implementadas medidas de segurança adicionais para evitar problemas com a integração do CLR. Estas medidas também impõem restrições adicionais à utilização deste procedimento armazenado.

Desativar a pontuação em tempo real

Para desativar a funcionalidade de pontuação em tempo real, abra um prompt de comandos elevado e execute o seguinte comando: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

Example

Este exemplo descreve os passos necessários para preparar e guardar um modelo para previsão em tempo real , e fornece um exemplo em R de como chamar a função a partir do T-SQL.

Passo 1. Preparar e salvar o modelo

O formato binário exigido por sp_rxPredict é o mesmo que o formato necessário para usar a função PREDICT. Portanto, no seu código R, inclua uma chamada para rxSerializeModel e certifique-se de especificar realtimeScoringOnly = TRUE, como neste exemplo:

model <- rxSerializeModel(model.name, realtimeScoringOnly = TRUE)

Passo 2. Chame sp_rxPredict

Chama-o sp_rxPredict como faria com qualquer outro procedimento armazenado. Na versão atual, o procedimento armazenado utiliza apenas dois parâmetros: @model para o modelo em formato binário, e @inputData para os dados a usar na pontuação, definido como uma consulta SQL válida.

Como o formato binário é o mesmo usado pela função PREDICT, pode usar os modelos e a tabela de dados do exemplo anterior.

DECLARE @irismodel varbinary(max)
SELECT @irismodel = [native_model_object] from [ml_models]
WHERE model_name = 'iris.dtree' 
AND model_version = 'v1'

EXEC sp_rxPredict
@model = @irismodel,
@inputData = N'SELECT * FROM iris_rx_data'

Note

A chamada para sp_rxPredict falha se os dados de entrada para pontuação não incluírem colunas que correspondam aos requisitos do modelo. Atualmente, apenas os seguintes tipos de dados .NET são suportados: double, float, short, ushort, long, ulong e string.

Por isso, pode ser necessário filtrar tipos não suportados nos seus dados de entrada antes de os usar para pontuação em tempo real.

Para informações sobre os tipos SQL correspondentes, veja SQL-CLR Mapeamento de Tipos ou Mapeamento de Dados do Parâmetros CLR.