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

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

Saiba como executar a pontuação em tempo real com o procedimento armazenado do sistema sp_rxPredict no SQL Server para previsões ou pontuações de alto desempenho em cargas de trabalho de previsão.

A pontuação em tempo real com sp_rxPredict é independente de linguagem e executada sem nenhuma dependência nos runtimes de R ou Python nos Serviços de Machine Learning. Ao usar um modelo criado e treinado com funções da Microsoft e serializado em um formato binário no SQL Server, você pode usar a pontuação em tempo real para gerar resultados previstos sobre novas entradas de dados em instâncias do SQL Server que não têm o complemento do R ou do Python instalado.

Como funciona a pontuação em tempo real

Há suporte para a pontuação em tempo real em tipos de modelo específicos com base em funções em RevoScaleR ou MicrosoftML no R ou em revoscalepy ou microsoftml no Python. Ela usa bibliotecas C++ nativas para gerar pontuações, com base na entrada de usuário fornecida a um modelo de machine learning armazenado em um formato binário especial.

Como um modelo treinado pode ser usado para pontuação sem a necessidade de chamar um runtime de linguagem externo em Serviços de Machine Learning, a sobrecarga de vários processos é reduzida.

A pontuação em tempo real é um processo de várias etapas:

  1. Você habilita o procedimento armazenado que faz a pontuação por banco de dados.
  2. Você carrega o modelo pré-treinado em formato binário.
  3. Você fornece novos dados de entrada a serem pontuados, de tabela ou linhas únicas, como entrada para o modelo.
  4. Para gerar pontuações, chame o procedimento armazenado sp_rxPredict.

Pré-requisitos

Observação

Atualmente, a pontuação em tempo real é otimizada para previsões rápidas em conjuntos de dados menores, variando de algumas linhas a centenas de milhares de linhas. Em conjuntos de dados grandes, o uso de rxPredict pode ser mais rápido.

Habilitar a pontuação em tempo real

Habilite esse recurso para cada banco de dados que você deseja usar para pontuação. O administrador do servidor deve executar o utilitário de linha de comando, RegisterRExt.exe, que está incluído no pacote do RevoScaleR.

Cuidado

Para que a pontuação em tempo real funcione, a funcionalidade CLR do SQL precisa ser habilitada na instância e o banco de dados precisa ser marcado como confiável. Quando você executa o script, essas ações são executadas para você. No entanto, considere cuidadosamente as implicações de segurança adicionais antes de fazer isso.

  1. Abra um prompt de comandos com privilégios elevados e navegue até a pasta na qual RegisterRExt.exe está localizado. O seguinte caminho pode ser usado em uma instalação padrão:

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

  2. Execute o seguinte comando, substituindo o nome da instância e do banco de dados de destino no qual deseja habilitar os procedimentos armazenados estendidos:

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

    Por exemplo, para adicionar o procedimento armazenado estendido ao banco de dados CLRPredict na instância padrão, digite:

    RegisterRExt.exe /installRts /database:CLRPRedict

    O nome da instância será opcional se o banco de dados estiver na instância padrão. Se estiver usando uma instância nomeada, especifique o nome da instância.

  3. O RegisterRExt.exe cria os seguintes objetos:

    • Assemblies confiáveis
    • O procedimento armazenado sp_rxPredict
    • Uma função de banco de dados, rxpredict_users. O administrador de banco de dados pode usar essa função para conceder permissão a usuários que usam a funcionalidade de pontuação em tempo real.
  4. Adicione os usuários que precisam executar sp_rxPredict à nova função.

Observação

No SQL Server 2017 e posteriores, medidas de segurança adicionais estão em vigor para evitar problemas com a integração CLR. Essas medidas impõem restrições adicionais no uso desse procedimento armazenado também.

Desabilitar a pontuação em tempo real

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

Exemplo

Este exemplo descreve as etapas necessárias para preparar e salvar um modelo para previsão em tempo real e fornece um exemplo em R de como chamar a função no T-SQL.

Etapa 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 código R, inclua uma chamada a rxSerializeModel e especifique realtimeScoringOnly = TRUE, como neste exemplo:

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

Etapa 2. Chamar sp_rxPredict

Você chama sp_rxPredict como chamaria qualquer outro procedimento armazenado. Na versão atual, o procedimento armazenado só usa dois parâmetros: @model para o modelo em formato binário e @inputData para os dados a serem usados na pontuação, definidos como uma consulta SQL válida.

Como o formato binário é o mesmo usado pela função PREDICT, você 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'

Observação

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

Portanto, talvez seja necessário filtrar os tipos sem suporte nos dados de entrada antes de usá-los para a pontuação em tempo real.

Para obter informações sobre os tipos SQL correspondentes, confira Mapeamento de tipos SQL-CLR ou Mapeamento de dados de parâmetro CLR.

Próximas etapas