Оценка модели в Azure WebApi с помощью управляемого API библиотеки CNTK
Развертывание с помощью командной строки Машинного обучения Azure
Один из способов развертывания модели CNTK в Azure и возможности запуска развернутой модели с помощью веб-API — через интерфейс командной строки в Машинном обучении Azure. Щелкните здесь , чтобы узнать, как это сделать.
Развертывание с помощью ASP.NET
Мы рассмотрим необходимые действия по развертыванию модели CNTK в Azure и отправке веб-запросов в конечную точку Azure для оценки данных по развернутой модели. Мы создадим эту функциональность в виде WebApi, но сосредоточимся на наиболее основных функциях Azure. Дополнительные сведения о расширенных возможностях см. в документации По Azure, т. е. передаче параметров и т. д.
Требования
Так как в настоящее время мы используем VS2017 для сборки CNTK, мы сосредоточимся на этой версии Visual Studio.
Функция веб-разработки для Visual Studio
Необходимо включить Web-Development функции в Visual Studio. Вы можете узнать, включена ли эта функция (и включена при необходимости), повторно выполнив установщик VS (Control Panel -> Program and Features -> Microsoft Visual Studio 201x
щелкните правой кнопкой мыши и выберите Change
, чтобы вызвать установщик VS)
Пакет Azure SDK
Пакет Azure SDK для .NET должен быть установлен на компьютере разработки. Страница загрузки: скачивание пакета AZURE SDK
Учетная запись Azure
Так как мы будем размещать модель CNTK в Azure, вам потребуется учетная запись Azure. Если у вас есть подписка MSDN или Visual Studio, эта учетная запись будет достаточной для размещения модели для работы с этим руководством. Для размещения CNTK требуется 64-разрядная виртуальная машина, бесплатная учетная запись Azure не включает эту возможность и не будет достаточной.
Изначально мы будем разрабатывать WebApi локально, а затем передать его в наш экземпляр Azure. Таким образом, вы сможете выполнять большинство шагов даже без доступа к Azure.
Приступим к работе
Мы уже создали схему проекта CNTKAzureTutorial01. Этот проект является частью репозитория GitHub CNTK и находится в папке Examples\Evaluation\CNTKAzureTutorial01
.
Обратите внимание, что в примере проекта используется управляемый API библиотеки CNTK. Для пользователей, использующих API EvalDll, для оценки модели используйте API CNTK EvalDLL. Руководство по использованию EvalDll можно найти на странице "Оценка модели в Azure WebApi с помощью EvalDll"
Мы рекомендуем начать с этого решения, так как мы уже добавили весь необходимый код. Полный список операций по созданию учебного проекта:
Мы начали с создания нового проекта или решения в VisualStudio из
File->New->Project->Visual C#->Web->ASP.NET WebApplication
: CNTKAzureTutorial01. Мы выбрали шаблон приложения API Azure, добавили ссылки на веб-API и убедились, что он размещен локально (пока не размещен в облаке).Затем мы выполнили следующие изменения кода для создания учебного проекта:
В файле ValueController.cs мы добавили несколько обязательных директив using
Заменен код
public async Task<IEnumerable<string>> Get()
на фактический вызов функции оценки CNTKДобавлена функция
public async Task<string[]> EvaluateCustomDNN(string imageUrl)
. Мы приняли эту функцию из наших примеров CNTK Eval (методEvaluateImageClassificationModel
из репозитория CNTK в файлеExamples\Evaluation\CSEvalClient\Program.cs
)Добавлен файл
CNTKImageProcessing.cs
для добавления функциональных возможностей изменения размера растрового изображения. Это происходит из репозитория CNTK вExamples\Evaluation\ImageExtension\CNTKImageProcessing.cs
пространстве имен и имени класса.Каталог созданных двоичных файлов в нашем решении должен быть добавлен в
PATH
среду приложения. Это необходимо, так как наш проект включает собственные библиотеки DLL, и они загружаются только в том случае, если они доступны в стандартном пути поиска. В метод добавлен следующий кодApplication_Start()
:global.asax
string pathValue = Environment.GetEnvironmentVariable("PATH"); string domainBaseDir = AppDomain.CurrentDomain.BaseDirectory; string cntkPath = domainBaseDir + @"bin\"; pathValue += ";" + cntkPath; Environment.SetEnvironmentVariable("PATH", pathValue);
Локальное размещение WebApi
Это изменения, которые мы выполнили до сих пор. Нам по-прежнему нужно получить функциональные возможности CNTK Eval, включенные в проект, и требуется модель для оценки.
Добавьте в проект функцию CNTK Eval. Это доступно в виде пакета NuGet. В vs select Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution...
выберите nuget.org
в качестве источника в интернете, найдите CNTK
и установите последнюю версию пакета (CNTK.GPU
или CNTK.CPUOnly
) в проект.
Теперь нам нужна модель для оценки. Скачайте ResNet20_CIFAR10_CNTK.model и сохраните его в каталоге CNTK\Models
в папке проекта. Файл модели также должен быть включен в решение (Project -> Add existing Item
)
Для CNTK требуется 64-разрядная среда выполнения. Убедитесь, что в Configuration Manager проект компилируется для платформы x64. Кроме того, создаваемое приложение WebApi должно размещаться в 64-разрядном экземпляре IIS. Это можно применить, выбрав "Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов" в разделе "Использовать 64-разрядную версию IIS Express"Tools -> Options -> Project and Solutions -> WebProjects
На этом этапе вы выполнили все необходимые действия для локального выполнения модели на компьютере. В Visual Studio нажмите, F5
чтобы запустить проект. Откроется веб-браузер на веб-сайте по умолчанию и отобразится сообщение об ошибке. Это должно быть ожидаемо, так как мы создали WebApi, а не веб-сайт. Мы легко вызываем реализованный WebApi, изменив адрес в браузере следующим образом:
http://localhost:<portnumber>/api/values
Это вызовет Get()
метод в ValuesController-Class, который, в свою очередь, вызовет метод EvaluateCustomDNN()
и вернет результат в веб-браузер.
Размещение WebApi в Azure
Благодаря этому мы выполнили первую часть нашей миссии, теперь нам нужна эта функция, размещенная в Azure!
В меню "Сборка" проекта выберите Publish
команду. Выбор Microsoft Azure App Service
в качестве целевого объекта публикации
В диалоговом окне AppService необходимо войти в учетную запись и выбрать соответствующую подписку и группу ресурсов. Не забудьте выбрать группу ресурсов, которая поддерживает 64-разрядные виртуальные машины (для этого не хватает бесплатной группы ресурсов). На заключительных этапах публикации необходимо выбрать конфигурацию x64 в меню "Параметры". Это также необходимо для публикации собственных двоичных компонентов CNTK в Azure.
После публикации модели и вызова опубликованного WebApi в браузере появится сообщение об ошибке. Откройте портал Azure и убедитесь, что webApi работает на 64-разрядной платформе (при необходимости измените и сохраните параметр, при необходимости перезагрузит экземпляр виртуальной машины в Azure).
После выполнения этих изменений вы сможете вызвать webApi в разделе http://<yourwebapp>.azurewebsites.net/api/values
В этом проекте показано, как интегрировать функции CNTK Eval с помощью управляемого API библиотеки CNTK в Azure WebApi и настроить Azure для запуска двоичных файлов EVAL CNTK. На следующем шаге можно добавить новые API для динамического предоставления данных в функцию eval-function или отправки новой версии модели. Это задачи разработки WebApi и Azure, которые необходимо найти в документации по Azure.