Оценка в реальном времени с помощью процедуры 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++ для создания оценок на основе данных, которые пользователь ввел в модель машинного обучения (в специальном двоичном формате).
Поскольку обученную модель можно использовать для оценки без необходимости вызова внешней языковой среды в Службах машинного обучения, затраты на несколько процессов сокращаются.
Оценка в реальном времени — это многоэтапный процесс.
- Хранимую процедуру, с помощью которой выполняется оценка, необходимо включить для каждой базы данных.
- Предварительно обученная модель загружается в двоичном формате.
- В модель вводятся входные данные для оценки. Это могут быть таблицы или отдельные строки.
- Для формирования оценок вызывается хранимая процедура sp_rxPredict.
Необходимые компоненты
Модель должна быть заранее обучена с помощью одного из поддерживаемых алгоритмов rx. Дополнительные сведения см. в разделе Поддерживаемые алгоритмы для
sp_rxPredict
.Сериализуйте модель с помощью rxSerialize для R или rx_serialize_model для Python. Эти функции сериализации оптимизированы для поддержки быстрой оценки.
Сохраните модель в экземпляре ядра СУБД, из которого она будет вызываться. В этом экземпляр не обязательно должно быть установлено расширение среды выполнения R или Python.
Примечание.
Оценка в реальном времени в настоящее время оптимизирована для быстрого прогнозирования на основе небольших наборов данных: от нескольких строк до сотен тысяч строк. Для больших наборов данных функция rxPredict может работать быстрее.
Включение оценки в реальном времени
Включите эту функцию для каждой базы данных, которая будет использоваться для оценки. Администратор сервера должен запустить программу командной строки RegisterRExt.exe, которая входит в состав пакета RevoScaleR.
Внимание
Чтобы оценка в реальном времени работала, в экземпляре необходимо включить возможности среды CLR SQL. Кроме того, базу данных необходимо пометить как заслуживающую доверия. При запуске скрипта эти действия выполняются автоматически. Но перед этим обдумайте возможные последствия для безопасности.
Откройте командную строку с повышенными привилегиями и перейдите в папку, где находится программа RegisterRExt.exe. По умолчанию путь к ней следующий:
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\
Выполните следующую команду, подставив имя своего экземпляра и целевую базу данных, в которой необходимо включить расширенные хранимые процедуры:
RegisterRExt.exe /installRts [/instance:name] /database:databasename
Например, чтобы включить расширенную хранимую процедуру в базе данных CLRPredict в экземпляре по умолчанию, введите следующую команду:
RegisterRExt.exe /installRts /database:CLRPRedict
Имя экземпляра является необязательным, если база данных находится в экземпляре по умолчанию. Если вы используете именованный экземпляр, укажите его имя.
Программа RegisterRExt.exe создает следующие объекты:
- доверенные сборки;
- хранимую процедуру
sp_rxPredict
; - новую роль базы данных
rxpredict_users
. Администратор базы данных может использовать эту роль для предоставления разрешения пользователям, которые используют функцию оценки в реальном времени.
Добавьте всех пользователей, которым требуется выполнять
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.