Поделиться через


Оценка в реальном времени с помощью процедуры 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.

Внимание

Чтобы оценка в реальном времени работала, в экземпляре необходимо включить возможности среды CLR SQL. Кроме того, базу данных необходимо пометить как заслуживающую доверия. При запуске скрипта эти действия выполняются автоматически. Но перед этим обдумайте возможные последствия для безопасности.

  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.

Следующие шаги