Оценка модели в 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) в проект.

NuGet

Теперь нам нужна модель для оценки. Скачайте 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 в качестве целевого объекта публикации

Azure

В диалоговом окне AppService необходимо войти в учетную запись и выбрать соответствующую подписку и группу ресурсов. Не забудьте выбрать группу ресурсов, которая поддерживает 64-разрядные виртуальные машины (для этого не хватает бесплатной группы ресурсов). На заключительных этапах публикации необходимо выбрать конфигурацию x64 в меню "Параметры". Это также необходимо для публикации собственных двоичных компонентов CNTK в Azure.

AzureSettings

После публикации модели и вызова опубликованного WebApi в браузере появится сообщение об ошибке. Откройте портал Azure и убедитесь, что webApi работает на 64-разрядной платформе (при необходимости измените и сохраните параметр, при необходимости перезагрузит экземпляр виртуальной машины в Azure).

Azure64Settings

После выполнения этих изменений вы сможете вызвать webApi в разделе http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

В этом проекте показано, как интегрировать функции CNTK Eval с помощью управляемого API библиотеки CNTK в Azure WebApi и настроить Azure для запуска двоичных файлов EVAL CNTK. На следующем шаге можно добавить новые API для динамического предоставления данных в функцию eval-function или отправки новой версии модели. Это задачи разработки WebApi и Azure, которые необходимо найти в документации по Azure.