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 201x
kliknij 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 CNTKDodano funkcję
public async Task<string[]> EvaluateCustomDNN(string imageUrl)
. Przyjęliśmy tę funkcję z naszych przykładów CNTK Eval (metodaEvaluateImageClassificationModel
z repozytorium CNTK w plikuExamples\Evaluation\CSEvalClient\Program.cs
)Dodano plik
CNTKImageProcessing.cs
, aby dodać funkcję zmiany rozmiaru mapy bitowej. Pochodzi to z repozytorium CNTK doExamples\Evaluation\ImageExtension\CNTKImageProcessing.cs
przestrzeni nazw i nazwy klasyKatalog 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 metodzieApplication_Start()
w plikuglobal.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.
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
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
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
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
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).
Po wykonaniu tych zmian będzie można wywołać interfejs WebApi w obszarze http://<yourwebapp>.azurewebsites.net/api/values
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.