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 :
- Vous activez la procédure stockée qui effectue le scoring pour chaque base de données.
- Vous chargez le modèle préentraîné au format binaire.
- 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.
- Pour générer des scores, appelez la procédure stockée sp_rxPredict.
Prérequis
Le modèle doit être entraîné à l’avance à l’aide de l’un des algorithmes rx pris en charge. Pour plus d’informations, consultez Algorithmes pris en charge pour
sp_rxPredict
.Sérialisez le modèle avec rxSerialize pour R ou rx_serialize_model pour Python. Ces fonctions de sérialisation ont été optimisées pour prendre en charge le scoring rapide.
Enregistrez le modèle dans l’instance du moteur de base de données à partir de laquelle vous souhaitez l’appeler. Cette instance ne doit pas nécessairement avoir l’extension de runtime R ou Python.
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.
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\
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.
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.
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.