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:
- Hay que habilitar en cada base de datos el procedimiento almacenado que realiza la puntuación.
- Hay que cargar el modelo previamente entrenado en formato binario.
- Se proporcionan nuevos datos de entrada para puntuarlos, ya sea mediante tablas o en filas individuales, como entrada para el modelo.
- Para generar puntuaciones, se llama al procedimiento almacenado sp_rxPredict.
Prerrequisitos
El modelo se debe entrenar de antemano con uno de los algoritmos rx admitidos. Para más información, consulte Algoritmos admitidos para
sp_rxPredict
.Serialice el modelo mediante rxSerialize para R o rx_serialize_model para Python. Estas funciones de serialización se han optimizado para admitir la puntuación rápida.
Guarde el modelo en la instancia del motor de base de datos desde el que quiere llamarlo. No es necesario que esta instancia tenga la extensión en tiempo de ejecución de R o de Python.
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.
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\
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.
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.
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.