使用 SQL Server 中的 sp_rxPredict 進行即時評分

適用於:SQL Server 2016 (13.x) 和更新版本

了解如何使用 SQL Server 中的 sp_rxPredict 系統預存程序執行即時評分,在預測工作負載中取得高效能的預測或分數。

使用 sp_rxPredict 的即時評分與語言無關,且執行時無須依賴機器學習服務中的 R 或 Python 執行階段。 使用以 Microsoft 函數建立並訓練的模型,然後序列化為 SQL Server 的二進位格式,您可以在未安裝 R 或 Python 附加元件的 SQL Server 執行個體上,使用即時評分產生新資料輸入的預測輸出。

即時評分的運作方式

目前僅有以 RevoScaleR 或 R 之 MicrosoftML 中的函數,或者 Python 中的 revoscalepymicrosoftml 函數為基礎的特定模型類型支援即時評分。 其會根據提供給機器學習模型 (以特殊二進位格式儲存) 的使用者輸入,使用原生 C++ 程式庫產生分數。

因為完成訓練的模型可以用於評分,卻不需要呼叫機器學習服務中的外部語言執行階段,因此可減少使用多個處理序的額外負荷。

即時評分是一個多步驟的程序:

  1. 您可對每個資料庫逐一啟用執行評分的預存程序。
  2. 您會以二進位格式載入預先定型的模型。
  3. 您會提供用於評分的新輸入資料 (表格式或單一資料列) 作為模型的輸入。
  4. 若要產生分數,請呼叫 sp_rxPredict 預存程序。

Prerequisites

  • 啟用 SQL Server CLR 整合

  • 啟用即時評分

  • 必須預先使用其中一個支援的 rx 演算法來定型模型。 如需詳細資訊,請參閱 sp_rxPredict支援演算法

  • 使用適用於 R 的 rxSerialize 或適用於 Python 的 rx_serialize_model 將模型序列化。 這些序列化函式已經過最佳化,可支援快速評分。

  • 將模型儲存到您想要從中進行呼叫的資料庫引擎執行個體。 此執行個體不需要有 R 或 Python 執行階段延伸模組。

注意

即時評分目前已針對較小資料集進行快速預測的最佳化,從幾個資料列到數十萬個資料列皆涵蓋在範圍內。 在大型資料集上,使用 rxPredict 可能會更快。

啟用即時評分

請對想要用於評分的每個資料庫啟用這項功能。 伺服器管理員應該執行包含在 RevoScaleR 套件中的命令列公用程式 Registerrext.exe。

警告

您必須在需要標示為值得信任的執行個體和資料庫中啟用 SQL CLR 功能,即時評分才能夠運作。 當您執行指令碼時,系統會為您執行這些動作。 不過,在這麼做之前,請先考慮額外的安全性影響。

  1. 開啟提升權限的命令提示字元,並瀏覽至 RegisterRExt.exe 所在的資料夾。 下列路徑可以在預設安裝中使用:

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

  2. 執行下列命令,並以您的執行個體名稱和您要啟用擴充預存程序的目標資料庫進行替代:

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

    例如,若要將擴充預存程序新增至預設執行個體上的 CLRPredict 資料庫,請輸入:

    RegisterRExt.exe /installRts /database:CLRPRedict

    如果資料庫位於預設執行個體上,則執行個體名稱為選擇性。 如果您使用的是具名執行個體,請指定執行個體名稱。

  3. RegisterRExt.exe 會建立下列物件:

    • 信任的組件
    • 預存程序 sp_rxPredict
    • 新的資料庫角色:rxpredict_users。 資料庫管理員可以使用此角色,將權限授與使用即時評分功能的使用者。
  4. 將需要執行 sp_rxPredict 的任何使用者新增至新角色。

注意

SQL Server 2017 和更新版本中有額外的安全性措施,可避免 CLR 整合發生問題。 這些量值也會對此預存程序的用法施加額外限制。

停用即時評分

若要停用即時計分功能,請開啟提升權限的命令提示字元,然後執行下列命令:RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]

範例

本範例說明準備並儲存即時預測模型所需的步驟,並提供如何從 T-SQL 呼叫函數的 R 範例。

步驟 1: 準備及儲存模型

sp_rxPredict 需要的二進位格式與使用 PREDICT 函數所需的格式相同。 因此,在您的 R 程式碼中,請包含對 rxSerializeModel 的呼叫,並務必指定 realtimeScoringOnly = TRUE,如下列範例所示:

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

步驟 2: 呼叫 sp_rxPredict

您可以像呼叫任何其他預存程序一樣地呼叫 sp_rxPredict。 在目前的版本中,預存程序只採用兩個參數:@model 適用於二進位格式的模型,而 @inputData 適用於評分所用的資料,定義為有效的 SQL 查詢。

因為二進位格式與 PREDICT 函數所使用的格式相同,因此您可以使用上述範例中的模型和資料表。

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'

注意

如果用於評分的輸入資料不包含符合模型需求的資料行,則呼叫 sp_rxPredict 的作業就會失敗。 目前僅支援下列 .NET 資料類型:double、float、short、ushort、long、ulong 和 string。

因此,您可能需要在輸入資料中篩選掉不受支援的類型,才能使用該資料來進行即時評分。

如需相對應 SQL 類型的詳細資訊,請參閱 SQL-CLR 類型對應對應 CLR 參數資料

後續步驟