Assegnazione dei punteggi in tempo reale con sp_rxPredict in SQL Server
Si applica a: SQL Server 2016 (13.x) e versioni successive
Istruzioni per l'assegnazione dei punteggi in tempo reale con la stored procedure di sistema sp_rxPredict in SQL Server per ottenere previsioni ad alte prestazioni o punteggi per i carichi di lavoro di previsione.
Il punteggio in tempo reale con sp_rxPredict
è indipendente dal linguaggio e viene eseguito senza dipendenze dai runtime di R o Python in Machine Learning Services. Usando un modello creato e sottoposto a training con le funzioni Microsoft e serializzato in un formato binario in SQL Server, è possibile usare l'assegnazione dei punteggi in tempo reale per generare risultati stimati su nuovi input di dati in istanze di SQL Server in cui non è installato il componente aggiuntivo R o Python.
Funzionamento dell'assegnazione dei punteggi in tempo reale
L'assegnazione dei punteggi in tempo reale è supportata in tipi di modelli specifici in base a funzioni di RevoScaleR o MicrosoftML in R o revoscalepy o microsoftml in Python. Usa librerie C++ native per generare punteggi, in base all'input dell'utente fornito a un modello di Machine Learning archiviato in un formato binario speciale.
Poiché è possibile usare un modello sottoposto a training per l'assegnazione dei punteggi senza dover chiamare un runtime di linguaggio esterno in Machine Learning Services, il sovraccarico di più processi viene ridotto.
L'assegnazione dei punteggi in tempo reale è un processo in più passaggi:
- Si abilita la stored procedure che esegue l'assegnazione dei punteggi per ogni singolo database.
- Il modello con training preliminare viene caricato in formato binario.
- Si forniscono nuovi dati di input a cui assegnare un punteggio, sia in formato tabulare che come righe singole, come input per il modello.
- Per generare i punteggi, chiamare la stored procedure sp_rxPredict.
Prerequisiti
Il training del modello deve essere eseguito in anticipo tramite uno degli algoritmi rx supportati. Per informazioni dettagliate, vedere Algoritmi supportati per
sp_rxPredict
.Serializzare il modello usando rxSerialize per R o rx_serialize_model per Python. Queste funzioni di serializzazione sono state ottimizzate per supportare l'assegnazione rapida dei punteggi.
Salvare il modello nell'istanza del motore di database da cui si vuole chiamarlo. Per questa istanza non è necessario avere l'estensione di runtime R o Python.
Nota
L'assegnazione dei punteggi in tempo reale è attualmente ottimizzata per stime rapide su set di dati più piccoli, che vanno da poche righe a centinaia di migliaia di righe. Nei set di grandi dimensioni potrebbe essere più veloce usare rxPredict.
Abilitare l'assegnazione dei punteggi in tempo reale
Abilitare questa funzionalità per ogni database che si vuole usare per l'assegnazione dei punteggi. L'amministratore del server deve eseguire l'utilità da riga di comando RegisterRExt.exe, inclusa nel pacchetto RevoScaleR.
Attenzione
Per consentire il funzionamento dell'assegnazione dei punteggi in tempo reale, è necessario abilitare la funzionalità CLR SQL nell'istanza ed è necessario contrassegnare il database come attendibile. Quando si esegue lo script, queste operazioni vengono eseguite automaticamente. Tuttavia, prima di procedere, valutare attentamente le ulteriori implicazioni in termini di sicurezza.
Aprire un prompt dei comandi con privilegi elevati e passare alla cartella in cui si trova RegisterRExt.exe. Il percorso seguente può essere usato in un'installazione predefinita:
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\
Eseguire il comando seguente, sostituendo il nome dell'istanza e il database di destinazione in cui si vogliono abilitare le stored procedure estese:
RegisterRExt.exe /installRts [/instance:name] /database:databasename
Ad esempio, per aggiungere la stored procedure estesa al database CLRPredict nell'istanza predefinita, digitare:
RegisterRExt.exe /installRts /database:CLRPRedict
Il nome dell'istanza è facoltativo se il database si trova nell'istanza predefinita. Se si usa un'istanza denominata, specificare il nome dell'istanza.
RegisterRExt.exe crea gli oggetti seguenti:
- Assembly attendibili
- Stored procedure
sp_rxPredict
- Nuovo ruolo del database
rxpredict_users
, che l'amministratore del database può usare per concedere l'autorizzazione agli utenti che usano la funzionalità di assegnazione dei punteggi in tempo reale.
Aggiungere tutti gli utenti che devono eseguire
sp_rxPredict
al nuovo ruolo.
Nota
In SQL Server 2017 e versioni successive sono disponibili misure di sicurezza aggiuntive per evitare problemi con l'integrazione CLR. Queste misure impongono anche ulteriori restrizioni sull'uso di questa stored procedure.
Disabilitare l'assegnazione dei punteggi in tempo reale
Per disabilitare la funzionalità di assegnazione dei punteggi in tempo reale, aprire un prompt dei comandi con privilegi elevati ed eseguire il comando seguente: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]
Esempio
In questo esempio vengono descritti i passaggi necessari per preparare e salvare un modello per la previsione in tempo reale, con un esempio in R di come chiamare la funzione da T-SQL.
Passaggio 1: Preparare e salvare il modello
Il formato binario richiesto da sp_rxPredict è uguale al formato necessario per usare la funzione PREDICT. Includere quindi nel codice R una chiamata a rxSerializeModel e assicurarsi di specificare realtimeScoringOnly = TRUE
, come nell'esempio seguente:
model <- rxSerializeModel(model.name, realtimeScoringOnly = TRUE)
Passaggio 2. Chiamare sp_rxPredict
sp_rxPredict
viene chiamata come qualsiasi altra stored procedure. Nella versione corrente la stored procedure accetta solo due parametri: @model per il modello in formato binario e @inputData per i dati da usare per l'assegnazione dei punteggi, definiti come query SQL valida.
Poiché il formato binario è lo stesso usato dalla funzione PREDICT, è possibile usare i modelli e la tabella dati dell'esempio precedente.
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
La chiamata sp_rxPredict
ha esito negativo se i dati di input per l'assegnazione dei punteggi non includono colonne che soddisfano i requisiti del modello. Attualmente sono supportati solo i tipi di dati .NET seguenti: double, float, short, ushort, long, ulong e string.
Potrebbe quindi essere necessario filtrare ed escludere i tipi non supportati nei dati di input prima di usarli per l'assegnazione dei punteggi in tempo reale.
Per informazioni sui tipi SQL corrispondenti, vedere Mapping del tipo SQL-CLR o Mapping dei dati dei parametri CLR.