Puntuación en tiempo real con sp_rxPredict en SQL Server

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores

Obtenga información sobre cómo realizar la puntuación en tiempo real con el procedimiento almacenado del sistema sp_rxPredict en SQL Server para las puntuaciones o predicciones de alto rendimiento en cargas de trabajo de predicción.

La puntuación en tiempo real con sp_rxPredict es independiente del lenguaje y se ejecuta sin dependencias en los entornos de ejecución de R o Python en Machine Learning Services. Mediante un modelo creado y entrenado con las funciones de Microsoft y serializado a un formato binario en SQL Server, puede usar la puntuación en tiempo real para generar resultados previstos sobre nuevas entradas de datos en instancias de SQL Server que no tengan instalado el complemento de R o Python.

Funcionamiento de la puntuación en tiempo real

La puntuación en tiempo real se admite en determinados tipos de modelo basados en funciones de RevoScaleR o MicrosoftML en R, o de revoscalepy o microsoftml en Python. Emplea bibliotecas de C++ nativas para generar puntuaciones basadas en las entradas de usuario que se proporcionan a un modelo de aprendizaje automático almacenado en un formato binario especial.

Como los modelos entrenados se pueden usar para la puntuación sin necesidad de llamar a un entorno de tiempo de ejecución de lenguaje externo en Machine Learning Services, se reduce la sobrecarga de varios procesos.

La puntuación en tiempo real es un proceso que consta de varios pasos:

  1. Hay que habilitar en cada base de datos el procedimiento almacenado que realiza la puntuación.
  2. Hay que cargar el modelo previamente entrenado en formato binario.
  3. Se proporcionan nuevos datos de entrada para puntuarlos, ya sea mediante tablas o en filas individuales, como entrada para el modelo.
  4. Para generar puntuaciones, se llama al procedimiento almacenado sp_rxPredict.

Prerrequisitos

Nota:

En la actualidad, la puntuación en tiempo real está optimizada para predicciones rápidas en conjuntos de datos más pequeños, que van desde unas pocas filas hasta cientos de miles de filas. En conjuntos de datos grandes, el uso de rxPredict podría ser más rápido.

Habilitar la puntuación en tiempo real

Habilite esta característica para cada base de datos que quiera usar para la puntuación. El administrador del servidor debe ejecutar la utilidad de línea de comandos, RegisterRExt.exe, que se incluye con el paquete RevoScaleR.

Precaución

Para que funcione la puntuación en tiempo real, es necesario habilitar la funcionalidad CLR de SQL en la instancia; además, la base de datos debe estar marcada como de confianza. Al ejecutar el script, estas acciones se realizan automáticamente. Sin embargo, no olvide las implicaciones de seguridad adicionales antes de hacerlo.

  1. Abra un símbolo del sistema con privilegios elevados y navegue hasta la carpeta donde se encuentra RegisterRExt.exe. Puede usar esta ruta de acceso en una instalación predeterminada:

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

  2. Ejecute el siguiente comando, pero sustituya el nombre de la instancia y la base de datos de destino donde quiera habilitar los procedimientos almacenados extendidos:

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

    Por ejemplo, para agregar el procedimiento almacenado extendido a la base de datos CLRPredict en la instancia predeterminada, escriba:

    RegisterRExt.exe /installRts /database:CLRPRedict

    El nombre de la instancia es opcional si la base de datos está en la instancia predeterminada. Si usa una instancia con nombre, especifique el nombre de la instancia.

  3. RegisterRExt.exe crea estos objetos:

    • ensamblados de confianza;
    • el procedimiento almacenado sp_rxPredict,
    • un nuevo rol de base de datos, rxpredict_users. El administrador de bases de datos puede usar este rol para conceder permiso a los usuarios que usan la función de puntuación en tiempo real.
  4. Agregue los usuarios que tengan que ejecutar sp_rxPredict en el nuevo rol.

Nota:

En SQL Server 2017 y versiones posteriores, se aplican medidas de seguridad adicionales para evitar problemas con la integración de CLR. Estas medidas también imponen restricciones adicionales sobre el uso de este procedimiento almacenado.

Deshabilitar la puntuación en tiempo real

Para deshabilitar la función de puntuación en tiempo real, abra un símbolo del sistema con privilegios elevados y ejecute este comando: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

Ejemplo

En este ejemplo se describen los pasos necesarios para preparar y guardar un modelo para la predicción en tiempo real y se muestra un caso en R de cómo llamar a la función desde T-SQL.

Paso 1. Preparar y guardar el modelo

El formato binario que sp_rxPredict necesita es el mismo que el formato necesario para usar la función PREDICT. Por lo tanto, en el código de R, incluya una llamada a rxSerializeModel y asegúrese de especificar realtimeScoringOnly = TRUE, como en este ejemplo:

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

Paso 2. Llamar a sp_rxPredict

Llame a sp_rxPredict como lo haría con cualquier otro procedimiento almacenado. En la versión actual, el procedimiento almacenado solo toma dos parámetros: @model para el modelo en formato binario y @inputData para los datos que se van a usar en la puntuación, definidos como una consulta SQL válida.

Como el formato binario es el mismo que el que usa la función PREDICT, puede utilizar los modelos y la tabla de datos del ejemplo 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'

Nota:

Se produce un error en la llamada a sp_rxPredict si los datos de entrada para la puntuación no incluyen columnas que coincidan con los requisitos del modelo. Actualmente, solo se admiten los siguientes tipos de datos de .NET: double, float, short, ushort, long, ulong y string.

Por tanto, es posible que tenga que filtrar los tipos no admitidos en los datos de entrada antes de usarlos para la puntuación en tiempo real.

Para obtener información sobre los tipos de SQL correspondientes, vea Asignación de tipos de SQL-CLR o Asignación de datos de parámetros de CLR.

Pasos siguientes