Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
- Włączasz procedurę przechowywaną, która wykonuje punktację na podstawie bazy danych.
- Ładujesz wcześniej wytrenowany model w formacie binarnym.
- Dostarczasz nowe dane wejściowe do oceny, tabelaryczne lub pojedyncze wiersze, jako dane wejściowe do modelu.
- Aby wygenerować wyniki, wywołaj procedurę sp_rxPredict przechowywaną.
Wymagania wstępne
Model musi być wcześniej wytrenowany przy użyciu jednego z obsługiwanych algorytmów rx . Szczegóły można znaleźć w artykule Obsługiwane algorytmy dla
sp_rxPredict.Serializuj model za pomocą rxSerialize dla R lub rx_serialize_model dla Python. Te funkcje serializacji zostały zoptymalizowane pod kątem szybkiego przetwarzania wyników.
Zapisz model w instancji silnika bazy danych, z której chcesz go wywołać. Ta instancja nie musi mieć rozszerzenia uruchomieniowego R ani Python.
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.
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\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:databasenameNa przykład, aby dodać rozszerzoną procedurę przechowywaną do bazy danych CLRPredict na domyślnej instancji, wpisz:
RegisterRExt.exe /installRts /database:CLRPRedictNazwa instancji jest opcjonalna, jeśli baza danych znajduje się na domyślnej instancji. Jeśli używasz nazwanej instancji, podaj nazwę instancji.
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.
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.