Delen via


Een model evalueren in een Azure WebApi met de beheerde API van CNTK Library

Implementeren via de Azure Machine Learning-opdrachtregel

Een manier om een CNTK-model in Azure te implementeren en het geïmplementeerde model via web-API's uit te voeren, is via een opdrachtregelinterface naar Azure Machine Learning. Klik hier voor meer informatie.

Implementeren via ASP.NET

We begeleiden u naar de vereiste stappen voor het implementeren van een CNTK-model in Azure en het verzenden van webaanvragen naar het Azure-eindpunt om gegevens te evalueren op basis van het geïmplementeerde model. We bouwen deze functionaliteit in de vorm van een WebApi, maar richten ons op de meest eenvoudige Azure-functionaliteit. Raadpleeg de meer geavanceerde Azure-documentatie voor meer informatie over alle geavanceerde vaardigheden, d.w.w.v. het doorgeven van parameters, enzovoort.

Vereisten

Omdat we momenteel VS2017 gebruiken om CNTK te bouwen, richten we ons op deze versie van Visual Studio.

Functie voor webontwikkeling voor Visual Studio

U moet Web-Development functies inSchakelen in Visual Studio. U kunt zien of deze functie is ingeschakeld (en indien nodig inschakelen) door het VS-installatieprogramma opnieuw uit te voeren (Control Panel -> Program and Features -> Microsoft Visual Studio 201xklik met de rechtermuisknop en selecteer om Change het VS-installatieprogramma aan te roepen)

Azure SDK

De Azure SDK voor .NET moet worden geïnstalleerd op uw ontwikkelcomputer. De downloadpagina hiervoor is: Azure SDK Downloaden

Azure-account

Omdat we het CNTK-model in Azure gaan hosten, hebt u een Azure-account nodig. Als u een MSDN- of Visual Studio-abonnement hebt, is dat account voldoende om uw model voor deze zelfstudie te hosten. CNTK vereist een 64-bits virtuele machine om te hosten, een gratis Azure-account bevat deze mogelijkheid niet en is niet voldoende.

In eerste instantie ontwikkelen we de WebApi lokaal en uploaden we deze vervolgens naar ons Azure-exemplaar. U kunt dus het merendeel van de stappen volgen, zelfs zonder toegang tot Azure.

Laten we aan de slag gaan

We hebben al een projectblauwdruk gemaakt met de naam CNTKAzureTutorial01. Dit project maakt deel uit van de CNTK GitHub-opslagplaats en is te vinden in de map Examples\Evaluation\CNTKAzureTutorial01.

Houd er rekening mee dat het voorbeeldproject gebruikmaakt van de beheerde API van CNTK Library. Gebruik CNTK EvalDLL-API voor gebruikers die de EvalDll-API gebruiken om het model te evalueren. De zelfstudie voor het gebruik van EvalDll vindt u bij Een model evalueren in Azure WebApi met behulp van EvalDll

We raden u aan om te beginnen met deze oplossing, omdat we al alle benodigde code hebben toegevoegd. Volledigheid hier is de lijst met bewerkingen voor het maken van het zelfstudieproject:

  • We zijn begonnen met het maken van een nieuw project/nieuwe oplossing in VisualStudio van File->New->Project->Visual C#->Web->ASP.NET WebApplication: CNTKAzureTutorial01. We hebben een Azure API App-sjabloon gekozen, verwijzingen toegevoegd aan 'Web-API' en ervoor gezorgd dat deze lokaal wordt gehost (nog niet gehost in de cloud).

  • Vervolgens hebben we de volgende codewijzigingen uitgevoerd om het zelfstudieproject te bouwen:

    • In valueController.cs hebben we een aantal vereiste gebruiksrichtlijnen toegevoegd

    • De code public async Task<IEnumerable<string>> Get() is vervangen om onze CNTK-evaluatiefunctie daadwerkelijk aan te roepen

    • De functie public async Task<string[]> EvaluateCustomDNN(string imageUrl)is toegevoegd. We hebben deze functie overgenomen uit onze CNTK Eval-voorbeelden (methode EvaluateImageClassificationModel uit de CNTK-opslagplaats in het bestand Examples\Evaluation\CSEvalClient\Program.cs)

    • Het bestand CNTKImageProcessing.cs toegevoegd om de functionaliteit Bitmapgrootte toe te voegen. Dit is afkomstig van de CNTK-opslagplaats in Examples\Evaluation\ImageExtension\CNTKImageProcessing.cs naamruimte en klassenaam

    • De map van de gemaakte binaire bestanden in onze oplossing moet worden toegevoegd aan de PATH omgeving van de toepassing. Dit is vereist omdat ons project systeemeigen DLL's bevat en die alleen worden geladen als ze bereikbaar zijn in het standaardzoekpad. We hebben de volgende code toegevoegd aan de Application_Start() methode in global.asax:

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

WebApi lokaal hosten

Dit zijn de wijzigingen die we tot nu toe hebben uitgevoerd. We moeten nog steeds de CNTK Eval-functionaliteit in het project ophalen en een model nodig hebben om te evalueren.

Voeg de CNTK Eval-functionaliteit toe aan het project. Dit is beschikbaar als NuGet-pakket. Selecteer in VS Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution..., kies nuget.org als de onlinebron, zoek CNTK en installeer de meest recente pakketversie (CNTK.GPU of CNTK.CPUOnly) naar het project.

NuGet

We hebben nu een model nodig om te evalueren. Download het ResNet20_CIFAR10_CNTK.model en sla het op in de map CNTK\Models onder de projectmap. Het modelbestand moet ook worden opgenomen in de oplossing (Project -> Add existing Item)

CNTK vereist een 64-bits runtime-omgeving. Zorg ervoor dat in de Configuration Manager dat het project is gecompileerd voor het x64-platform. Daarnaast moet de WebApi die we maken, worden gehost in een 64-bits exemplaar van IIS. U kunt dit afdwingen door '64-bits versie van IIS Express gebruiken voor websites en projecten' te selecteren inTools -> Options -> Project and Solutions -> WebProjects

Project

Op dit moment hebt u alle benodigde stappen uitgevoerd om het model lokaal op uw computer uit te voeren. Druk in Visual Studio F5 om het project uit te voeren. Hiermee opent u een internetbrowser op de standaardwebsite en wordt er een foutbericht weergegeven. Dit is te verwachten omdat we een WebApi hebben gemaakt en geen website. We noemen de geïmplementeerde WebApi eenvoudig door het adres in de browser te wijzigen in:

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

Hiermee wordt de Get() methode aangeroepen in de ValuesController-Class die de methode EvaluateCustomDNN() op zijn beurt aanroept en een resultaat retourneert naar uw webbrowser

Lokale

De WebApi hosten in Azure

Hiermee hebben we het eerste deel van onze missie bereikt, nu hebben we deze functionaliteit nodig die wordt gehost in Azure. Selecteer de Publish opdracht in het menu Opbouwen van uw project. Kiezen Microsoft Azure App Service als publicatiedoel

Azure

In het dialoogvenster AppService moet u zich aanmelden met uw account en het juiste abonnement en de juiste resourcegroep selecteren. Zorg ervoor dat u een resourcegroep kiest die ondersteuning biedt voor 64-bits virtuele machines (de 'gratis' resourcegroep is hiervoor niet voldoende). Tijdens de laatste publicatiestappen moet u een x64-configuratie kiezen in het menu Instelling. Dit is vereist om ook de systeemeigen binaire onderdelen van CNTK naar Azure te publiceren

AzureSettings

Zodra u het model hebt gepubliceerd en u uw gepubliceerde WebApi in de browser aanroept, wordt er een foutbericht weergegeven. Open de Azure Portal en zorg ervoor dat uw WebApi wordt uitgevoerd op een 64-bits platform (wijzig en sla de instelling op indien nodig op. Hierdoor wordt uw exemplaar van de virtuele machine ook opnieuw opgestart in Azure).

Azure64Settings

Zodra u deze wijzigingen hebt uitgevoerd, kunt u webapi aanroepen onder http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

In dit project hebt u geleerd hoe u de CNTK Eval-functionaliteit integreert met de beheerde API van CNTK Library in een Azure WebApi en Azure instelt om de binaire CNTK-evalbestanden uit te voeren. In een volgende stap kunt u nu nieuwe API's toevoegen om gegevens dynamisch aan de evaluatiefunctie te leveren of een nieuwe modelversie te uploaden. Dit zijn WebApi-/Azure-ontwikkelingstaken. Raadpleeg hiervoor de Azure-documentatie.