Оценка в реальном времени с помощью процедуры sp_rxPredict в SQL Server

Область применения: SQL Server 2016 (13.x) и более поздних версий

Узнайте, как выполнять оценку в реальном времени с помощью системной хранимой процедуры sp_rxPredict в SQL Server для высокопроизводительного получения прогнозов или оценок в рабочих нагрузках прогнозирования.

Оценка в реальном времени с помощью sp_rxPredict не зависит от языка и выполняется независимо от сред выполнения R или Python в Службах машинного обучения. Работая с моделью, созданной и обученной с помощью функций Майкрософт, а затем сериализованной в двоичный формат в SQL Server, вы можете с помощью оценки в реальном времени создавать прогнозируемые результаты на основе новых входных данных в экземплярах SQL Server, в которых не установлена надстройка R или Python.

Как работает оценка в реальном времени

Оценка в реальном времени поддерживается для определенных типов моделей на основе функций в RevoScaleR и MicrosoftML в R, или revoscalepy и microsoftml в Python. При этом используются собственные библиотеки C++ для создания оценок на основе данных, которые пользователь ввел в модель машинного обучения (в специальном двоичном формате).

Поскольку обученную модель можно использовать для оценки без необходимости вызова внешней языковой среды в Службах машинного обучения, затраты на несколько процессов сокращаются.

Оценка в реальном времени — это многоэтапный процесс.

  1. Вы включаете хранимую процедуру, которая выполняет оценку, для каждой базы данных.
  2. Предварительно обученная модель загружается в двоичном формате.
  3. Вы предоставляете модели новые входные данные для оценки — в виде таблиц или отдельных строк.
  4. Для формирования оценок вызывается хранимая процедура sp_rxPredict.

Предварительные требования

Примечание.

Оценка в реальном времени в настоящее время оптимизирована для быстрого прогнозирования на основе небольших наборов данных: от нескольких строк до сотен тысяч строк. Для больших наборов данных функция rxPredict может работать быстрее.

Включение оценки в реальном времени

Включите эту функцию для каждой базы данных, которая будет использоваться для оценки. Администратор сервера должен запустить программу командной строки RegisterRExt.exe, которая входит в состав пакета RevoScaleR.

Внимание

Чтобы оценка в режиме реального времени работала, в экземпляре необходимо включить функциональность 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.