Поделиться через


Оценка модели в Azure WebApi с помощью EvalDll

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

Требования

Так как в настоящее время для сборки CNTK используется VS2015, мы сосредоточимся на этой версии 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.

Приступим к работе

Мы уже создали схему проекта с именем EvalDll_AzureTutorial. Этот проект является частью репозитория CNTK GitHub и находится в папкеExamples\Evaluation\LegacyEvalDll\EvalDll_AzureTutorial.

Обратите внимание, что пример проекта использует CNTK API EvalDll. Для пользователей, использующих модель, обученную с помощью Python, используйте API библиотеки CNTK. Руководство по использованию библиотеки CNTK можно найти на странице оценки модели в Azure WebApi с помощью управляемого API библиотеки CNTK

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

  • Мы начали с создания нового проекта или решения в VisualStudio из File->New->Project->Visual C#->Web->ASP.NET WebApplication: EvalDll_AzureTutorial. Мы выбрали шаблон приложения 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\LegacyEvalDll\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 и установите последнюю версию пакета (Microsoft.Research.CNTK.*).

NuGet

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

Project

На этом этапе вы выполнили все необходимые действия для локального выполнения модели на компьютере. В Visual Studio нажмите, F5 чтобы запустить проект. Откроется веб-браузер на веб-сайте по умолчанию и отобразится сообщение об ошибке. Это должно быть ожидаемо, так как мы создали WebApi, а не веб-сайт. Мы легко вызываем реализованный WebApi, изменив адрес в браузере следующим образом:

http://localhost:<portnumber>/api/values

Это вызовет Get() метод в ValuesController-Class, который, в свою очередь, вызовет метод EvaluateCustomDNN() и вернет результат в веб-браузер.

local

Размещение 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 с помощью EvalDll в Azure WebApi и настроить Azure для запуска двоичных файлов CNTK eval. На следующем шаге можно добавить новые API для динамического предоставления данных в функцию eval-function или отправки новой версии модели. Это задачи разработки WebApi и Azure, которые необходимо найти в документации по Azure.