Scoring en temps réel avec sp_rxPredict dans SQL Server

S’applique à : SQL Server 2016 (13.x) et versions ultérieures

Découvrez comment effectuer le scoring en temps réel avec la procédure stockée système sp_rxPredict dans SQL Server pour générer des scores ou des prédictions hautes performances dans les charges de travail de prévision.

Le scoring en temps réel avec sp_rxPredict est indépendant du langage et s’exécute sans dépendances sur les runtimes R ou Python dans Machine Learning Services. En utilisant un modèle qui a été créé et entraîné à l’aide de fonctions Microsoft, et sérialisé au format binaire dans SQL Server, vous pouvez utiliser le scoring en temps réel pour générer des résultats prédits sur de nouvelles entrées de données sur des instances SQL Server où le module complémentaire R ou Python n’est pas installé.

Fonctionnement du scoring en temps réel

Le scoring en temps réel est pris en charge sur des types de modèles spécifiques basés sur des fonctions dans RevoScaleR ou MicrosoftML dans R, ou revoscalepy ou microsoftml dans Python. Il utilise des bibliothèques C++ natives pour générer des scores en fonction de l’entrée utilisateur fournie à un modèle de Machine Learning stocké dans un format binaire spécial.

Le fait de pouvoir utiliser un modèle entraîné pour le scoring sans avoir à appeler un runtime de langage externe dans Machine Learning Services permet de réduire la charge associée à plusieurs processus.

Le scoring en temps réel est un processus qui comprend plusieurs étapes :

  1. Vous activez la procédure stockée qui effectue le scoring pour chaque base de données.
  2. Vous chargez le modèle préentraîné au format binaire.
  3. Vous fournissez au modèle de nouvelles données d’entrée, au format tabulaire ou ligne unique, en vue de leur attribuer un score.
  4. Pour générer des scores, appelez la procédure stockée sp_rxPredict.

Prérequis

Notes

Le scoring en temps réel est actuellement optimisé pour générer rapidement des prédictions sur de petits jeux de données, ceux-ci allant de quelques lignes à des centaines de milliers de lignes. Sur les jeux de données volumineux, rxPredict peut être plus rapide.

Activer le scoring en temps réel

Activez cette fonctionnalité pour chaque base de données que vous souhaitez utiliser pour le scoring. L’administrateur du serveur doit exécuter l’utilitaire de ligne de commande, RegisterRExt.exe, qui est inclus dans le package RevoScaleR.

Attention

Pour que le scoring en temps réel fonctionne, la fonctionnalité CLR SQL doit être activée dans l’instance et la base de données doit être marquée comme étant digne de confiance. Quand vous exécutez le script, ces actions sont effectuées pour vous. Toutefois, tenez compte des implications supplémentaires en matière de sécurité avant de procéder.

  1. Ouvrez une invite de commandes avec élévation de privilèges, puis accédez au dossier contenant RegisterRExt.exe. Le chemin suivant peut être utilisé dans une installation par défaut :

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

  2. Exécutez la commande suivante en indiquant le nom de votre instance et la base de données cible où vous souhaitez activer les procédures stockées étendues :

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

    Par exemple, pour ajouter la procédure stockée étendue à la base de données CLRPredict sur l’instance par défaut, tapez :

    RegisterRExt.exe /installRts /database:CLRPRedict

    Le nom de l’instance est facultatif si la base de données se trouve sur l’instance par défaut. Si vous utilisez une instance nommée, spécifiez son nom.

  3. RegisterRExt.exe crée les objets suivants :

    • Assemblys approuvés.
    • sp_rxPredict (procédure stockée).
    • rxpredict_users (nouveau rôle de base de données). L’administrateur de base de données peut utiliser ce rôle pour accorder des autorisations aux utilisateurs qui utilisent la fonctionnalité de scoring en temps réel.
  4. Ajoutez tous les utilisateurs qui doivent exécuter sp_rxPredict au nouveau rôle.

Notes

Dans SQL Server 2017 et versions ultérieures, des mesures de sécurité supplémentaires sont en place pour éviter les problèmes liés à l’intégration du CLR. Ces mesures imposent également des restrictions supplémentaires sur l’utilisation de cette procédure stockée.

Désactiver le scoring en temps réel

Pour désactiver la fonctionnalité de scoring en temps réel, ouvrez une invite de commandes avec élévation de privilèges et exécutez la commande suivante : RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

Exemple

Cet exemple décrit les étapes à effectuer pour préparer et enregistrer un modèle pour la prédiction en temps réel et montre comment appeler la fonction à partir de T-SQL à travers un exemple dans R.

Étape 1. Préparer et enregistrer le modèle

Le format binaire exigé par sp_rxPredict est le même que celui exigé pour utiliser la fonction PREDICT. Par conséquent, dans votre code R, incluez un appel à rxSerializeModel en veillant à spécifier realtimeScoringOnly = TRUE, comme dans cet exemple :

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

Étape 2. Appeler sp_rxPredict

Vous appelez sp_rxPredict comme n’importe quelle autre procédure stockée. Dans la version actuelle, la procédure stockée n’accepte que deux paramètres : @model pour le modèle au format binaire et @inputData pour les données à utiliser dans le scoring (données définies en tant que requête SQL valide).

Étant donné que le format binaire est le même que celui utilisé par la fonction PREDICT, vous pouvez utiliser les modèles et la table de données de l’exemple précédent.

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'

Notes

L’appel à sp_rxPredict échoue si les données d’entrée pour le scoring n’incluent aucune colonne conforme aux exigences du modèle. Actuellement, seuls les types de données .NET suivants sont pris en charge : double, float, short, ushort, long, ulong et string.

Vous devrez donc peut-être exclure par filtrage les types non pris en charge dans vos données d’entrée avant de les utiliser pour le scoring en temps réel.

Pour plus d’informations sur les types SQL correspondants, consultez Mappage de type SQL-CLR ou Mappage des données de paramètres CLR.

Étapes suivantes