Новые Службы машинного обучения Azure основаны на Python. Если вы хотите ввести в действие прогностические модели, разработанные в R в Azure, нет простого способа сделать это.

Недавно я прочитал следующие две статьи:

Оба вышеупомянутых метода относятся к одной и той же архитектуре. Но оба решения довольно сложные. Для них требуются следующие технологии:

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

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

Как вы, вероятно, уже знаете, модуль Execute R Script в Azure Machine Learning Studio позволяет импортировать содержимое zip-файла в этом контексте выполнения через входные данные Script Bundle:

Машинное обучение Azure распакует архив, переданный на вход Script Bundle, и распакованные файлы будут доступны в каталоге src/.

Тем не менее, я нашел два способа (основанных на том же принципе) для развертывания функции прогнозирования в веб-службе Студии машинного обучения Azure:

  • Самый простой способ
  • Структурированный способ

Самый простой способ

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

Теперь вы можете найти модель случайного леса Boston Housing, сохраненную в виде файла rda в папке temp. Просто заархивируйте и загрузите его в Студию машинного обучения Azure с помощью функции Загрузить новый набор данных из локального файла:

Затем создайте следующий эксперимент:

Вот скрипты, которые я использовал для обоих модулей Execute R Script, модулей «Получить тестовый фрейм данных» и «Предсказать из пользовательской модели» соответственно:

Результат крайнего левого вывода модуля «Predict» Execute R Script дает нам 10 прогнозов, полученных из пользовательской модели R:

Структурированный способ

Если вы не знали, RStudio позволяет создавать пакеты R. Они представляют собой идеальный способ упаковки и распространения кода и данных R для повторного использования другими. Идея состоит в том, чтобы создать пакет R, который будет использоваться в качестве шаблона для прогнозов на основе пользовательских моделей R в веб-службах Студии машинного обучения Azure.

Подготовьте новый пакет R

Прежде всего, убедитесь, что на вашем компьютере установлена ​​версия LaTex. Я использую виртуальную машину Windows, поэтому я установил MiKTeX по этой ссылке (если вы используете Mac, вы можете установить MacTeX). После установки и обновления пакетов LaTeX убедитесь, что pdflatex.exe найден RStudio, добавив папку MiKTeX bin в переменную среды PATH. Вы можете сделать это непосредственно в R (просто проверьте следующий полный путь в своей среде; если вы скопируете следующий код отсюда, также проверьте символ двойной кавычки, который вы вставите в своей R IDE):

Sys.setenv (PATH = paste (Sys.getenv («PATH»), «C: / Program Files / MiKTeX 2.9 / miktex / bin / x64 /», sep = »;»))

Теперь давайте создадим новый проект «R package» (ФайлНовый проект…):

Затем я выбрал папку, в которой нужно создать новый проект пакета, и имя пакета (я выбрал «AzureMLBostonRF»):

Быть в курсе, что

папка, в которой будет создан каталог проекта, не должна находиться в общей папке виртуальной машины. Он должен быть местным. На этапе сборки (мы увидим это через некоторое время) я получил сообщение об ошибке: «Ошибка 1 (неправильная функция). Функции отключены: индексирование исходного файла R, диагностика», потому что я пытался использовать общую папку виртуальной машины для его хранения. .

При выборе опции «Создать проект» в RStudio будет показан новый файл hello.R. Если вы прочитаете включенные комментарии, вы поймете, что новый сценарий R в этом проекте будет связан с новой функцией в пакете. Вы можете закрыть файл hello.R, поскольку мы не будем его использовать. Под капотом в выбранном каталоге создается новая папка «AzureMLBostonRF»:

Эта папка будет рабочим каталогом для нового проекта и представляет собой рабочую папку по умолчанию для скриптов, которые мы включим в пакет. Поэтому важно скопировать файл bos_rf.rda, созданный в предыдущем разделе, в папку AzureMLBostonRF. На этом этапе давайте просто создадим новый сценарий R (ярлык CTRL + SHIFT + N) и просто загрузим предыдущую сохраненную модель в переменную:

Просто сохраните этот файл (CTRL + S) с именем «get_model_rda» (IDE автоматически присвоит расширение R имени файла).

Теперь давайте создадим еще один сценарий R, который будет содержать функцию прогнозирования:

Сохраните этот файл с именем «pred_from_model».

Вышеупомянутая папка «AzureMLBostonRF» содержит подпапку «R», которая теперь содержит три файла сценария R:

Файл hello.R необходимо удалить, это просто файл примера функции.

Теперь откройте файл ОПИСАНИЕ на вкладке Файлы в RStudio.

а затем измените его следующим образом:

Не стесняйтесь изменять все, что хотите, в соответствии с этим руководством, но оставьте раздел Импорт как есть, поскольку пакет randomForest является обязательным для функции прогнозирования, которую мы хотим развернуть.

Теперь перейдем в папку «man» и переименуем файл «hello.Rd», который вы там найдете (связанный с автоматически созданным файлом, который мы уже удалили), в «pred_from_model.Rd»:

Это файл, используемый в качестве документации для функции, которую мы хотим развернуть. Вы можете получить более подробную информацию о файлах Rd здесь. Откройте и измените его следующим образом:

Теперь все готово для успешной сборки пакета. Нажмите кнопку «Установить и перезапустить» на вкладке «Сборка» в правом верхнем углу RStudio.

Если все пойдет правильно, в журнале сборки будет найдено сообщение «DONE»:

Сессия R будет автоматически перезапущена, и будет загружен новый собранный пакет:

Теперь откройте новый сценарий R и проверьте функцию прогнозирования, используя этот фрагмент кода:

Результат будет следующий:

Пакет готов к использованию позже в Azure:

Вышеупомянутая папка пакета должна быть заархивирована как есть, без переименования архива. Когда файл AzureMLBostonRF.zip будет готов, его необходимо снова заархивировать, чтобы подготовить его в файле оболочки для загрузки в Студию машинного обучения Azure:

Использование пакета R в Студии машинного обучения Azure

После загрузки в Студию машинного обучения Azure файл AzureMLBostonRF-AzureMLStudioWrapper.zip можно использовать в качестве входных данных в модуле Выполнить сценарий R. Давайте создадим следующий новый эксперимент:

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

Обратите внимание, что в этом случае нам не нужно загружать библиотеку randomForest, поскольку она «встроена» в нашу настраиваемую библиотеку AzureMLBostonRF.

Как и следовало ожидать, кадр выходных данных модуля «Прогноз на основе пользовательской модели в пакете» такой же, как на рис.15:

Публикация веб-службы

Получение предыдущего обучающего эксперимента в качестве отправной точки (если вы получите первый, он будет таким же), после нажатия на Настроить веб-службу и после изменения источника вывода веб-службы значок прогнозный эксперимент будет выглядеть следующим образом:

Теперь запустите эксперимент, чтобы проверить рабочий процесс, а затем нажмите «Развернуть веб-службу». После этого просто нажмите ссылку «New Web Services Experience»:

Вы получите перенаправление на новую домашнюю страницу веб-службы, где сможете протестировать только что настроенную конечную точку:

На этом этапе после выбора «Включить тестовые данные»:

вы можете протестировать только что опубликованный прогнозный веб-сервис, используя значения по умолчанию, которые вы можете найти в текстовых полях, и нажав кнопку «Тестовый запрос-ответ»:

Измерение времени отклика веб-службы

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

Прежде всего, код R, необходимый для использования только что развернутой веб-службы, уже доступен в домашней странице веб-служб машинного обучения Microsoft Azure:

Используя этот фрагмент кода (немного измененный) в RStudio, давайте оценим среднее время ответа веб-службы после 50 последовательных запросов, используя следующий код:

Просто имейте в виду, что вам нужно изменить пару строк в коде (api_key и url) в зависимости от вашего рабочего пространства и автоматически сгенерированного кода развернутой веб-службы. После этого у вас будут следующие результаты:

В среднем время отклика нашего веб-сервиса составляет 678 мс. Неплохо для этой простой прогнозной модели!

Имейте в виду, что проблемы с производительностью могут возникнуть из-за инициализации R-модели (и переменных). Если это может быть ваш случай, вы можете инициализировать все данные один раз (только при первом вызове веб-службы) без необходимости делать это для всех вызовов. Для получения более подробной информации об этой реализации, пожалуйста, проверьте эту ссылку.

Если вам нужно управлять большим количеством транзакций в месяц, доступны разные планы в зависимости от количества транзакций и часов вычислений API. Вы можете проверить все подробности на этой странице.

Заключение

Многие клиенты, использующие R в качестве языка сценариев для Advanced Analytics, не имеют простого решения для простого развертывания своих настраиваемых функций прогнозирования в облаке Microsoft.

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

Не забудьте измерить производительность веб-службы, прежде чем использовать ее в производственной среде, поскольку для десериализации сложных моделей может потребоваться немало времени.