Udostępnij za pośrednictwem


Ocena modelu w usłudze Azure WebApi przy użyciu interfejsu API zarządzanego biblioteki CNTK

Wdrażanie za pomocą wiersza polecenia usługi Azure Machine Learning

Jednym ze sposobów wdrażania modelu CNTK na platformie Azure i możliwości uruchamiania wdrożonego modelu za pośrednictwem internetowych interfejsów API jest użycie interfejsu wiersza polecenia do usługi Azure Machine Learning. Kliknij tutaj , aby dowiedzieć się, jak to zrobić.

Wdrażanie za pośrednictwem ASP.NET

Przeprowadzimy Cię do wymaganych kroków wdrażania modelu CNTK na platformie Azure i wysyłania żądań internetowych do punktu końcowego platformy Azure w celu oceny danych względem wdrożonego modelu. Skompilujemy tę funkcję w postaci interfejsu WebApi, ale skupimy się na najbardziej podstawowych funkcjach platformy Azure. Zapoznaj się z bardziej zaawansowaną dokumentacją platformy Azure, aby dowiedzieć się więcej na temat wszystkich zaawansowanych możliwości, np. przekazywania parametrów itp.

Wymagania

Obecnie używamy programu VS2017 do kompilowania pliku CNTK, skupiamy się na tej wersji programu Visual Studio.

Funkcja tworzenia aplikacji internetowych dla programu Visual Studio

Musisz włączyć funkcje Web-Development w programie Visual Studio. Możesz sprawdzić, czy ta funkcja jest włączona (i włączyć w razie potrzeby), ponownie wykonując instalatora vs (Control Panel -> Program and Features -> Microsoft Visual Studio 201xkliknij prawym przyciskiem myszy i wybierz Change , aby wywołać instalatora programu VS)

Zestaw Azure SDK

Zestaw Azure SDK dla platformy .NET musi być zainstalowany na komputerze deweloperskim. Strona pobierania: Pobieranie zestawu Azure SDK

Konto platformy Azure

Ponieważ będziemy hostować model CNTK na platformie Azure, potrzebne będzie konto platformy Azure. Jeśli masz subskrypcję MSDN lub Visual Studio, to konto będzie wystarczające do hostowania modelu na potrzeby tego samouczka. CnTK wymaga 64-bitowej maszyny wirtualnej do hostowania, bezpłatne konto platformy Azure nie obejmuje tej możliwości i nie będzie wystarczające.

Początkowo utworzymy interfejs WebApi lokalnie, a następnie przekażemy go do naszego wystąpienia platformy Azure. Dzięki temu możesz wykonać większość kroków nawet bez dostępu do platformy Azure.

Zaczynajmy

Utworzyliśmy już strategię projektu o nazwie CNTKAzureTutorial01. Ten projekt jest częścią repozytorium GITHub CNTK i można go znaleźć w folderze Examples\Evaluation\CNTKAzureTutorial01.

Należy pamiętać, że przykładowy projekt korzysta z interfejsu API zarządzanego biblioteki CNTK. W przypadku użytkowników korzystających z interfejsu API EvalDll do oceny modelu użyj interfejsu API EvalDLL CNTK. Samouczek dotyczący korzystania z usługi EvalDll można znaleźć w temacie Evaluate a model in Azure WebApi using EvalDll (Ocena modelu w usłudze Azure WebApi przy użyciu platformy EvalDll)

Zalecamy rozpoczęcie od tego rozwiązania, ponieważ dodaliśmy już cały potrzebny kod. Aby uzyskać kompletność, oto lista operacji do utworzenia projektu samouczka:

  • Zaczęliśmy od utworzenia nowego projektu/rozwiązania w programie VisualStudio z witryny File->New->Project->Visual C#->Web->ASP.NET WebApplication: CNTKAzureTutorial01. Wybraliśmy szablon aplikacji interfejsu API platformy Azure, dodaliśmy odwołania do interfejsu API sieci Web i upewniliśmy się, że jest ona hostowana lokalnie (nie jest jeszcze hostowana w chmurze).

  • Następnie wykonaliśmy następujące zmiany kodu w celu skompilowania projektu samouczka:

    • W pliku ValueController.cs dodaliśmy kilka wymaganych dyrektyw przy użyciu dyrektyw

    • Zastąpiono kod w pliku , public async Task<IEnumerable<string>> Get() aby faktycznie wywołać naszą funkcję oceny CNTK

    • Dodano funkcję public async Task<string[]> EvaluateCustomDNN(string imageUrl). Przyjęliśmy tę funkcję z naszych przykładów CNTK Eval (metoda EvaluateImageClassificationModel z repozytorium CNTK w pliku Examples\Evaluation\CSEvalClient\Program.cs)

    • Dodano plik CNTKImageProcessing.cs , aby dodać funkcję zmiany rozmiaru mapy bitowej. Pochodzi to z repozytorium CNTK do Examples\Evaluation\ImageExtension\CNTKImageProcessing.cs przestrzeni nazw i nazwy klasy

    • Katalog utworzonych plików binarnych w naszym rozwiązaniu musi być dodawany do PATH środowiska aplikacji. Jest to wymagane, ponieważ nasz projekt zawiera natywne biblioteki DLL, a te są ładowane tylko wtedy, gdy są osiągalne w standardowej ścieżce wyszukiwania. Dodaliśmy następujący kod w metodzie Application_Start() w pliku global.asax:

         string pathValue = Environment.GetEnvironmentVariable("PATH");
         string domainBaseDir = AppDomain.CurrentDomain.BaseDirectory;
         string cntkPath = domainBaseDir + @"bin\";
         pathValue += ";" + cntkPath;
         Environment.SetEnvironmentVariable("PATH", pathValue);
      

Hostowanie interfejsu WebApi lokalnie

Są to zmiany, które wykonaliśmy do tej pory. Nadal musimy pobrać funkcje Eval CNTK zawarte w projekcie i użyć modelu do oceny.

Dodaj funkcję CNTK Eval do projektu. Jest to dostępne jako pakiet NuGet. W programie VS wybierz Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution...pozycję , wybierz nuget.org jako źródło online, wyszukaj CNTK i zainstaluj najnowszą wersję pakietu (CNTK.GPU lub CNTK.CPUOnly) w projekcie.

NuGet

Teraz potrzebujemy modelu do oceny. Pobierz plik ResNet20_CIFAR10_CNTK.model i zapisz go w katalogu CNTK\Models w folderze projektu. Plik modelu musi być również uwzględniony w rozwiązaniu (Project -> Add existing Item)

CnTK wymaga 64-bitowego środowiska uruchomieniowego. Upewnij się, że w Configuration Manager, że projekt jest kompilowany dla platformy x64. Ponadto tworzony przez nas interfejs WebApi musi być hostowany w 64-bitowym wystąpieniu usług IIS. Możesz to wymusić, wybierając pozycję "Użyj 64-bitowej wersji IIS Express dla witryn internetowych i projektów" wTools -> Options -> Project and Solutions -> WebProjects

Project

W tym momencie wykonano wszystkie niezbędne kroki, aby wykonać model lokalnie na maszynie. W programie Visual Studio naciśnij klawisz F5 , aby uruchomić projekt. Spowoduje to otwarcie przeglądarki internetowej w domyślnej witrynie sieci Web i wyświetlenie komunikatu o błędzie. Należy się tego spodziewać, ponieważ utworzyliśmy interfejs WebApi, a nie witrynę internetową. Łatwo wywołujemy zaimplementowany interfejs WebApi, zmieniając adres w przeglądarce na:

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

Spowoduje to wywołanie metody w ValuesController-Class, która z kolei wywoła Get() metodę EvaluateCustomDNN() i zwróci wynik do przeglądarki internetowej

Lokalnych

Hostowanie interfejsu WebApi na platformie Azure

Dzięki temu wykonaliśmy pierwszą część naszej misji, teraz potrzebujemy tej funkcji hostowanej na platformie Azure! W menu Kompilacja projektu wybierz Publish polecenie . Wybierz Microsoft Azure App Service jako element docelowy publikowania

Azure

W oknie dialogowym AppService musisz zalogować się przy użyciu konta i wybrać odpowiednią subskrypcję i grupę zasobów. Pamiętaj, aby wybrać grupę zasobów, która obsługuje 64-bitowe maszyny wirtualne (grupa zasobów "bezpłatna" nie jest wystarczająca do tego). Podczas ostatnich kroków publikowania musisz wybrać konfigurację x64 w menu Ustawienia. Jest to również wymagane do opublikowania natywnych składników binarnych CNTK na platformie Azure

AzureSettings

Po opublikowaniu modelu i wywołaniu opublikowanego interfejsu WebApi w przeglądarce zostanie wyświetlony komunikat o błędzie. Otwórz Azure Portal i upewnij się, że aplikacja WebApi jest uruchomiona na 64-bitowej platformie (w razie potrzeby zmień i zapisz" ustawienie, co spowoduje również ponowne uruchomienie wystąpienia maszyny wirtualnej na platformie Azure).

Azure64Settings

Po wykonaniu tych zmian będzie można wywołać interfejs WebApi w obszarze http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

W tym projekcie pokazano, jak zintegrować funkcję CNTK Eval przy użyciu interfejsu API zarządzanego biblioteki CNTK w usłudze Azure WebApi i skonfigurować platformę Azure w celu uruchomienia plików binarnych owalnych CNTK. W następnym kroku możesz teraz dodać nowe interfejsy API, aby dynamicznie dostarczać dane do funkcji eval lub przekazywać nową wersję modelu. Są to zadania programistyczne WebApi/Azure i zapoznaj się z dokumentacją platformy Azure.