В статье описано, как настроить сервисы машинного обучения для R и Python. Несмотря на большой опыт в IT, сразу у меня не работает примерно ничего. Поэтому будут ссылки на то, что делать, если сразу не завелось. В итоге я поставила новый экземпляр (instance) SQL Server с сервисами машинного обучения, которые, наконец! заработали.  

Изначально в SQL Server 2016 появилась возможность выполнить скрипты на R на данных в SQL Server, новый компонент назывался “SQL Server R Services”.  В 2017 добавили поддержку Python, и с 2019 года — Java, а компонент переименовали в «Сервисы машинного обучения» (Machine Learning Services). 

Сначала расскажу, что сделать, чтобы заработало, а потом кратко изложу свои двухдневные страдания. В идеальном мире, после установки экземпляра MS SQL Server, остался дистрибутив и он той же версии, что и сам экземпляр. В этом случае запускаете Setup. Выбираете пункт "New SQL Server stand-alone installation or add features to an existing instance"

И далее на списке компонент выбираете "Instance Features -> Machine Learning Services and Languages"

НЕ выбирайте Standalone Shared сервисы машинного обучения (Shared Features Machine Leaning Services Standalone).

Когда установка завершена, запускаете SQL Server Configuration Manager. На Windows 10 Configuration Manager прячется тут C:\Windows\SysWOW64\SQLServerManager15.msc для

В SQL Server Configuration Manager перезапустите экземпляр MS SQL Server, к которому добавляли сервисы машинного обучения.

Далее создаем системную переменную окружения "MKL_CBWR" со значением "AUTO"

Снова возвращаемся в SQL Configuration Manager и запускаем службу SQL Server Launchpad. После того, как служба успешно запустилась, запускаем SQL Server Management Studio и выполняем активацию сервисов машинного обучения. 

EXEC sp_configure  'external scripts enabled', 1

RECONFIGURE

EXEC sp_configure 'external scripts enabled'

И видим результат

Выполняем Hello world на R и Python 

EXEC sp_execute_external_script  @language =N'R'
    , @script=N'OutputDataSet <- InputDataSet;'
    , @input_data_1 =N'SELECT 1 AS hello'
WITH RESULT SETS (([hello] int not null));
GO

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'OutputDataSet = InputDataSet'
    , @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([hello] INT));
GO

И получаем результат 

Счастье – сервисы машинного обучения настроены!

Итак, мой путь, видимо, прошел почти со всеми граблями, на которые можно было наступить. Я ставила SQL Server довольно давно и удалила исходный дистрибутив, поэтому скачала его заново SQL Server 2019 Developer Edition, что бы использовать в качестве источника компоненты машинного обучения.

Мне попалась статья, которая предлагала установить Standalone Shared Services, и я их установила. Не заработало. Смотрим документацию Microsoft и видим, что shared features устанавливать не рекомендуется, если есть SQL Server на машине («если ничего не помогает, прочтите наконец документацию»)

Затем установила Machine Learning Services из документации (теперь уже те, что нужно), попробовала запустить службу – ошибка. В журнале событий (в Windows 10 Просмотр событий –> Журнал событий Windows -> Система) 

Несмотря на то, что в документации этого не сказано напрямую, я подумала, что могут влиять установленные Shared Services, поскольку памяти на компьютере не очень много и они конкурируют за ресурс. Удалила Shared Services через Удаление программ. Не помогло. 

Нашлось два варианта статей на тему "Что делать, если служба не стартует?":

Первый говорит, что служба не стартует, потому что версия установленных сервисов машинного обучения отличается от экземпляра.  (где-то тут).

Второй называет причиной то, что не хватает прав, но при проверке у меня не оказалось пользователя SQLRUserGroup, и я решила вернуться к идее с неверной версией.

Я решила вернуться к идее с различными версиями и поставила кумулятивное обновление, надеясь, что обновится и SQL Server и Machine Learning Services. Не помогло. Более того, после обновления дистрибутив перестал давать возможность добавить компонент к существующему экземпляру. Пострадав немного, все-таки поставила новый экземпляр SQL Server и, как вы понимаете, теперь можно увидеть разницу версий.

 

SQL server кумулятивный апдейт считает, что служба обновлена вместе с экземпляром SQL Server

Версия службы в SQL Configuration Manager все еще как до обновления.

Stackoverflow тред про незапускающуюся службу и попытку исправить это через разрешение TCP соединени также, к сожалению, не помог.

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

Именно поэтому я стараюсь не рассказывать про установку и настройку софта на открытых уроках, а показываю уже использование установленного продукта. Приходите на открытый урок, на котором разберем примеры аналитики данных и библиотек машинного обучения, встроенных в SQL Server.

Комментарии (2)


  1. Isiirk
    04.08.2022 09:38
    +1

    Не могли бы вы написать статью про то, как теперь это использовать?


    1. KristinaMyLife Автор
      04.08.2022 09:56
      +2

      Конечно, "продолжение в следующих сериях" :) будет статья про использование на R и на Python. На открытых уроках тоже будет соответственно примеры с использованием скриптов на R и соответственно отдельно на Python.