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 201x
klik 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 roepenDe functie
public async Task<string[]> EvaluateCustomDNN(string imageUrl)
is toegevoegd. We hebben deze functie overgenomen uit onze CNTK Eval-voorbeelden (methodeEvaluateImageClassificationModel
uit de CNTK-opslagplaats in het bestandExamples\Evaluation\CSEvalClient\Program.cs
)Het bestand
CNTKImageProcessing.cs
toegevoegd om de functionaliteit Bitmapgrootte toe te voegen. Dit is afkomstig van de CNTK-opslagplaats inExamples\Evaluation\ImageExtension\CNTKImageProcessing.cs
naamruimte en klassenaamDe 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 deApplication_Start()
methode inglobal.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.
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
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
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
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
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).
Zodra u deze wijzigingen hebt uitgevoerd, kunt u webapi aanroepen onder http://<yourwebapp>.azurewebsites.net/api/values
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.