Ocenianie w czasie rzeczywistym za pomocą sp_rxPredict w SQL Server

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje

Dowiedz się, jak przeprowadzać ocenianie w czasie rzeczywistym za pomocą systemowej procedury składowanej sp_rxPredict w SQL Server w celu uzyskiwania predykcji lub ocen o wysokiej wydajności w obciążeniach związanych z prognozowaniem.

Punktowanie w czasie rzeczywistym za pomocą sp_rxPredict jest niezależne od języka i działa bez zależności od środowisk uruchomieniowych R i Python w Machine Learning Services. Korzystając z modelu stworzonego i wytrenowanego przy użyciu funkcji Microsoft oraz serializowanego do formatu binarnego w SQL Server, możesz użyć punktacji w czasie rzeczywistym, aby generować przewidywane wyniki na nowych danych wejściowych na instancjach SQL Server, które nie mają zainstalowanego dodatku R ani Python.

Jak działa punktacja w czasie rzeczywistym

Ocenowanie w czasie rzeczywistym jest obsługiwane dla konkretnych typów modeli opartych na funkcjach w RevoScaleR lub MicrosoftML w R, a także w revoscalepy lub microsoftml w Pythonie. Wykorzystuje natywne biblioteki C++ do generowania wyników na podstawie danych wejściowych dostarczonych przez użytkownika do modelu uczenia maszynowego przechowywanego w specjalnym formacie binarnym.

Ponieważ wytrenowany model może być używany do punktowania bez konieczności wywoływania zewnętrznego języka uruchomieniowego w Machine Learning Services, redukuje się narzut wielu procesów.

Punktacja w czasie rzeczywistym to proces wieloetapowy:

  1. Włączasz procedurę przechowywaną, która wykonuje punktację na podstawie bazy danych.
  2. Ładujesz wcześniej wytrenowany model w formacie binarnym.
  3. Dostarczasz nowe dane wejściowe do oceny, tabelaryczne lub pojedyncze wiersze, jako dane wejściowe do modelu.
  4. Aby wygenerować wyniki, wywołaj procedurę sp_rxPredict przechowywaną.

Wymagania wstępne

Note

Obecnie punktacja w czasie rzeczywistym jest zoptymalizowana pod kątem szybkich przewidywań na mniejszych zbiorach danych, od kilku wierszy do setek tysięcy wierszy. Na dużych zbiorach danych korzystanie z rxPredict może być szybsze.

Włącz punktację w czasie rzeczywistym

Włącz tę funkcję dla każdej bazy danych, którą chcesz używać do punktacji. Administrator serwera powinien uruchomić narzędzie wiersza poleceń RegisterRExt.exe, które jest dołączone do pakietu RevoScaleR.

Caution

Aby punktowanie w czasie rzeczywistym działało, funkcjonalność SQL CLR musi być włączona w instancji, a baza danych oznaczona jako wiarygodna. Gdy uruchamiasz skrypt, te działania są wykonywane za ciebie. Jednak przed podjęciem decyzji warto dokładnie rozważyć dodatkowe konsekwencje bezpieczeństwa.

  1. Otwórz podwyższony wiersz poleceń i przejdź do folderu, w którym znajduje się RegisterRExt.exe. Następująca ścieżka może być użyta w domyślnej instalacji:

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

  2. Uruchom następujące polecenie, zastępując nazwę swojej instancji i docelową bazą danych, w której chcesz włączyć rozszerzone procedury przechowywane:

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

    Na przykład, aby dodać rozszerzoną procedurę przechowywaną do bazy danych CLRPredict na domyślnej instancji, wpisz:

    RegisterRExt.exe /installRts /database:CLRPRedict

    Nazwa instancji jest opcjonalna, jeśli baza danych znajduje się na domyślnej instancji. Jeśli używasz nazwanej instancji, podaj nazwę instancji.

  3. RegisterRExt.exe tworzy następujące obiekty:

    • Zaufane zgromadzenia
    • Procedura przechowywana sp_rxPredict
    • Nowa rola bazy danych, rxpredict_users. Administrator bazy danych może użyć tej roli do przyznawania uprawnień użytkownikom korzystającym z funkcji punktacji w czasie rzeczywistym.
  4. Przypisz do nowej roli wszystkich użytkowników, którzy muszą uruchomić sp_rxPredict.

Note

W SQL Server 2017 i późniejszych wprowadzono dodatkowe środki bezpieczeństwa, aby zapobiec problemom z integracją CLR. Te środki nakładają dodatkowe ograniczenia na korzystanie z tej procedury przechowywanej.

Wyłącz punktację w czasie rzeczywistym

Aby wyłączyć funkcję punktacji w czasie rzeczywistym, otwórz podwyższony wiersz poleceń i wykonaj następujące polecenie: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

Example

Ten przykład opisuje kroki potrzebne do przygotowania i zapisu modelu do predykcji w czasie rzeczywistym oraz przedstawia przykład w R, jak wywołać funkcję z T-SQL.

Krok nr 1. Przygotowywanie i zapisywanie modelu

Format binarny wymagany przez sp_rxPredict jest taki sam jak format wymagany do użycia funkcji PREDICT. Dlatego w swoim kodzie R uwzględnij wywołanie rxSerializeModel i upewnij się, że określisz realtimeScoringOnly = TRUE, jak w tym przykładzie:

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

Krok nr 2. Zadzwoń do sp_rxPredict

Wywołujesz sp_rxPredict, tak jak każdą inną procedurę przechowywaną. W obecnej wersji procedura przechowywana przyjmuje tylko dwa parametry: @model dla modelu w formacie binarnym oraz @inputData dla danych do wykorzystania w punktacji, definiowanych jako prawidłowe zapytanie SQL.

Ponieważ format binarny jest taki sam jak w funkcji PREDICT, możesz użyć modeli i tabeli danych z poprzedniego przykładu.

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'

Note

Wywołanie sp_rxPredict kończy się niepowodzeniem, jeśli dane wejściowe używane do oceny nie zawierają kolumn spełniających wymagania modelu. Obecnie obsługiwane są tylko następujące typy danych .NET: double, float, short, ushort, long, ulong oraz string.

Dlatego może być konieczne odfiltrowanie nieobsługiwanych typów w danych wejściowych przed wykorzystaniem ich do punktacji w czasie rzeczywistym.

Aby uzyskać informacje o odpowiadających typach SQL, zobacz SQL-CLR Type Mapping lub Mapping CLR Parameter Data.