Skórování v reálném čase s sp_rxPredict v SQL Server

platí pro: SQL Server 2016 (13.x) a novější verze

Naučte se, jak provádět skórování v reálném čase pomocí uložené procedury sp_rxPredict systému v SQL Server pro vysoce výkonnostní predikce nebo skóre v předpovědních pracovních zátěžích.

Real-time skórování s sp_rxPredict je jazykově nezávislé a probíhá bez závislostí na modulech runtime jazyka R nebo Pythonu v Machine Learning Services. Pomocí modelu vytvořeného a trénovaného pomocí funkcí Microsoft a serializovaného do binárního formátu v SQL Server můžete pomocí bodování v reálném čase generovat předpovězené výsledky nových datových vstupů na instancích SQL Server, které nemají nainstalovaný dotek R nebo Python.

Jak funguje bodování v reálném čase

Hodnocení v reálném čase je podporováno u konkrétních typů modelů založených na funkcích v RevoScaleR nebo MicrosoftML v R, případně v revoscalepy či microsoftml v Python. Používá nativní knihovny C++ k generování skóre na základě uživatelských vstupů poskytnutých do modelu strojového učení uloženého ve speciálním binárním formátu.

Protože lze trénovaný model použít k vyhodnocování bez nutnosti volat externí jazykové běhové prostředí v Machine Learning Services, snižuje se režie spojená s více procesy.

Hodnocení v reálném čase je vícestupňový proces:

  1. Povolíte uloženou proceduru, která provádí skórování na základě každé databáze.
  2. Načtete předtrénovaný model v binárním formátu.
  3. Do modelu zadáváte nová vstupní data, která se hodnotí, buď tabulkově nebo jednotlivě, jako vstup do modelu.
  4. Pro generování skóre zavolejte sp_rxPredict uloženou proceduru.

Předpoklady

Poznámka:

Skórování v reálném čase je v současnosti optimalizováno pro rychlé predikce na menších datových sadách, od několika řádků až po stovky tisíc řádků. Na velkých datových sadách může být použití rxPredict rychlejší.

Povolit skórování v reálném čase

Tuto funkci povolte pro každou databázi, kterou chcete použít pro skórování. Správce serveru by měl spustit příkazový nástroj RegisterRExt.exe, který je součástí balíčku RevoScaleR.

Upozornění

Aby hodnocení v reálném čase fungovalo, musí být v instanci povolena funkce SQL CLR a databáze musí být označena jako důvěryhodná. Když spustíte skript, tyto akce se provádějí za vás. Nicméně pečlivě zvažte další bezpečnostní důsledky, než to uděláte.

  1. Otevřete vyvýšený příkazový řádek a přejděte do složky, kde se RegisterRExt.exe nachází. Následující cesta může být použita ve výchozí instalaci:

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

  2. Spustěte následující příkaz, nahraďte název vaší instance a cílovou databázi, kde chcete povolit rozšířené uložené procedury:

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

    Například pro přidání rozšířené uložené procedury do databáze CLRPredict na výchozí instanci napište:

    RegisterRExt.exe /installRts /database:CLRPRedict

    Název instance je volitelný, pokud je databáze na výchozí instanci. Pokud používáte pojmenovanou instanci, zadejte název instance.

  3. RegisterRExt.exe vytváří následující objekty:

    • Důvěryhodná shromáždění
    • Uložený postup sp_rxPredict
    • Nová databázová role, rxpredict_users. Správce databáze může tuto roli využít k udělení oprávnění uživatelům, kteří využívají funkci hodnocení v reálném čase.
  4. Přidejte uživatele, kteří potřebují běžet sp_rxPredict do nové role.

Poznámka:

V SQL Server 2017 a novějších jsou zavedena další bezpečnostní opatření, která předcházejí problémům s integrací CLR. Tato opatření také zavádějí další omezení používání této uložené procedury.

Vypnout skórování v reálném čase

Pro deaktivaci bodování v reálném čase otevřete vyvýšený příkazový řádek a spusťte následující příkaz: RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

Example

Tento příklad popisuje kroky potřebné k přípravě a uložení modelu pro predikci v reálném čase a poskytuje příklad v R, jak volat funkci z T-SQL.

Krok 1. Příprava a uložení modelu

Binární formát požadovaný sp_rxPredict je stejný jako formát potřebný pro použití funkce PREDICT. Proto do svého R kódu zahrňte volání rxSerializeModel a nezapomeňte specifikovat realtimeScoringOnly = TRUE, jako v tomto příkladu:

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

Krok 2. Zavolej sp_rxPredict

sp_rxPredict voláte stejně jako jakoukoli jinou uloženou proceduru. V aktuální verzi uložená procedura přijímá pouze dva parametry: @model pro model v binárním formátu a @inputData pro data pro použití při skórování, definovaná jako platný SQL dotaz.

Protože binární formát je stejný jako u funkce PREDICT, můžete použít modely a datovou tabulku z předchozího příkladu.

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'

Poznámka:

Volání na sp_rxPredict selže, pokud vstupní data pro skórování neobsahují sloupce, které odpovídají požadavkům modelu. V současnosti jsou podporovány pouze následující .NET datové typy: double, float, short, ushort, long, ulong a string.

Proto možná budete muset filtrovat nepodporované typy ve vstupních datech před jejich použitím pro skórování v reálném čase.

Pro informace o odpovídajících typech SQL viz SQL-CLR Mapování typů nebo Mapování parametrů CLR.