Echtzeitbewertung mit sp_rxPredict in SQL Server

Gilt für: SQL Server 2016 (13.x) und spätere Versionen

Erfahren Sie, wie Sie mit der gespeicherten Systemprozedur sp_rxPredict in SQL Server eine Echtzeitbewertung für Hochleistungsvorhersagen oder Bewertungen bei der Vorhersage von Workloads durchführen können.

Die Echtzeitbewertung mit sp_rxPredict ist sprachunabhängig und wird ohne Abhängigkeiten von den R- oder Python-Runtimes in Machine Learning Services ausgeführt. Bei einem Modell, das mithilfe von Microsoft-Funktionen erstellt und trainiert und anschließend in SQL Server in ein Binärformat serialisiert wurde, können Sie die Echtzeitbewertung verwenden, um vorhergesagte Ergebnisse für neue Dateneingaben in SQL Server-Instanzen zu generieren, in denen das R- oder Python-Add-On nicht installiert ist.

Funktionsweise der Echtzeitbewertung

Die Echtzeitbewertung wird für bestimmte Modelltypen unterstützt, die auf Funktionen in RevoScaleR oder MicrosoftML in R oder revoscalepy oder microsoftml in Python basieren. Dabei werden native C++-Bibliotheken verwendet, um Bewertungen basierend auf Benutzereingaben zu generieren, die für ein Machine Learning-Modell bereitgestellt werden, das in einem speziellen Binärformat gespeichert ist.

Da ein trainiertes Modell zur Bewertung verwendet werden kann, ohne eine externe Sprachlaufzeit in Machine Learning Services aufrufen zu müssen, verringert sich der Aufwand für mehrere Prozesse.

Die Echtzeitbewertung ist ein mehrstufiger Prozess:

  1. Sie aktivieren die gespeicherte Prozedur, mit der die Bewertung durchgeführt wird, für jede Datenbank einzeln.
  2. Sie laden das vortrainierte Modell im Binärformat.
  3. Sie stellen neue Eingabedaten, die bewertet werden sollen, entweder in tabellarischer Form oder in Form einzelner Zeilen als Eingabe für das Modell bereit.
  4. Zum Generieren von Bewertungen rufen Sie die gespeicherte Prozedur sp_rxPredict auf.

Voraussetzungen

Hinweis

Die Echtzeitbewertung ist derzeit für schnelle Vorhersagen für kleinere Datasets optimiert, die von einigen wenigen Zeilen bis hin zu Hunderttausenden von Zeilen reichen. Bei großen Datasets kann die Verwendung von rxPredict schneller sein.

Aktivieren der Echtzeitbewertung

Aktivieren Sie diese Funktion für jede Datenbank, die Sie für die Bewertung verwenden wollen. Der Serveradministrator sollte das Befehlszeilen-Hilfsprogramm RegisterRExt.exe ausführen, das im RevoScaleR-Paket enthalten ist.

Achtung

Damit die Echtzeitbewertung funktioniert, muss die SQL CLR-Funktionalität in der Instanz aktiviert werden und die Datenbank als vertrauenswürdig gekennzeichnet sein. Wenn Sie das Skript ausführen, werden diese Aktionen für Sie durchgeführt. Beachten Sie jedoch die zusätzlichen Sicherheitsaspekte, bevor Sie dies tun.

  1. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten, und navigieren Sie zu dem Ordner, in dem sich RegisterRExt.exe befindet. Bei einer Standardinstallation kann der folgende Pfad verwendet werden:

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

  2. Führen Sie den folgenden Befehl aus, und setzen Sie dabei den Namen Ihrer Instanz und die Zieldatenbank ein, in der Sie die erweiterten gespeicherten Prozeduren aktivieren möchten:

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

    Geben Sie beispielsweise Folgendes ein, um die erweiterte gespeicherte Prozedur der CLRPredict-Datenbank auf der Standardinstanz hinzuzufügen:

    RegisterRExt.exe /installRts /database:CLRPRedict

    Der Instanzname ist optional, wenn sich die Datenbank auf der Standardinstanz befindet. Geben Sie bei Verwendung einer benannten Instanz den Namen der Instanz an.

  3. RegisterRExt.exe erstellt die folgenden Objekte:

    • Vertrauenswürdige Assemblys.
    • Die gespeicherte Prozedur sp_rxPredict.
    • Eine neue Datenbankrolle rxpredict_users. Der Datenbankadministrator kann diese Rolle zum Erteilen von Berechtigungen für Benutzer verwenden, die die Echtzeitbewertungsfunktionalität nutzen.
  4. Fügen Sie alle Benutzer, die sp_rxPredict ausführen müssen, der neuen Rolle hinzu.

Hinweis

In SQL Server 2017 und höher sind zusätzliche Sicherheitsmaßnahmen vorhanden, um Probleme bei der CLR-Integration zu vermeiden. Diese Maßnahmen bewirken zusätzliche Einschränkungen bei der Verwendung dieser gespeicherten Prozedur.

Deaktivieren der Echtzeitbewertung

Zum Deaktivieren der Echtzeitbewertungsfunktionalität öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten, und führen Sie den folgenden Befehl aus: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

Beispiel

In diesem Beispiel werden die Schritte beschrieben, die zum Vorbereiten und Speichern eines Modells für die Echtzeitvorhersage erforderlich sind. Außerdem ist ein Beispiel in R für das Aufrufen der Funktion aus T-SQL enthalten.

Schritt 1: Vorbereiten und Speichern des Modells

Das für sp_rxPredict erforderliche Binärformat entspricht dem Format, das für die Verwendung der PREDICT-Funktion erforderlich ist. Fügen Sie daher in Ihrem R-Code einen Aufruf von rxSerializeModel ein, und stellen Sie sicher, dass realtimeScoringOnly = TRUE wie im folgenden Beispiel angegeben ist:

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

Schritt 2: Aufrufen von sp_rxPredict

Sie rufen sp_rxPredict wie jede andere gespeicherte Prozedur auf. Im aktuellen Release benötigt die gespeicherte Prozedur nur zwei Parameter: @model für das Modell im Binärformat und @inputData für die bei der Bewertung zu verwendenden Daten, die als gültige SQL-Abfrage definiert sind.

Da das Binärformat mit dem von der PREDICT-Funktion verwendeten Format identisch ist, können Sie die Modelle und die Datentabelle aus dem vorherigen Beispiel verwenden.

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'

Hinweis

Beim Aufruf von sp_rxPredict tritt ein Fehler auf, wenn die Eingabedaten für die Bewertung keine Spalten enthalten, die den Anforderungen des Modells entsprechen. Derzeit werden nur die folgenden .NET-Datentypen unterstützt: double, float, short, ushort, long, ulong und string.

Daher müssen Sie möglicherweise nicht unterstützte Typen in ihren Eingabedaten herausfiltern, bevor Sie diese für die Echtzeitbewertung verwenden.

Informationen zu entsprechenden SQL-Typen finden Sie unter SQL-CLR-Typzuordnung oder Zuordnen von CLR-Parameterdaten.

Nächste Schritte