Dela via


Utvärdera en modell i en Azure WebApi med hjälp av EvalDll

Vi vägleder dig till de steg som krävs för att distribuera en CNTK modell i Azure och skicka webbförfrågningar till Azure-slutpunkten för att utvärdera data mot den distribuerade modellen. Vi kommer att skapa den här funktionen i form av en WebApi, men fokusera på de mest grundläggande Azure-funktionerna. Läs mer i mer avancerad Azure-dokumentation om du vill veta mer om alla avancerade funktioner, t.ex. parameteröverföring osv.

Krav

Eftersom vi för närvarande använder VS2015 för att skapa CNTK fokuserar vi på den här versionen av Visual Studio.

Webbutvecklingsfunktion för Visual Studio

Du måste aktivera Web-Development funktioner i Visual Studio. Du kan se om den här funktionen är aktiverad (och aktivera vid behov) genom att köra VS-installationsprogrammet igen (Control Panel -> Program and Features -> Microsoft Visual Studio 201xhögerklicka och välj Change för att anropa VS-installationsprogrammet)

Azure SDK

Azure SDK för .NET måste installeras på utvecklingsdatorn. Nedladdningssidan för detta är: Azure SDK Download

Azure-konto

Eftersom vi ska vara värd för den CNTK modellen i Azure behöver du ett Azure-konto. Om du har en MSDN- eller Visual Studio-prenumeration räcker det kontot för att vara värd för din modell för den här självstudien. CNTK kräver en 64-bitars virtuell dator som värd, inkluderar inte ett kostnadsfritt Azure-konto den här funktionen och räcker inte.

Först utvecklar vi WebApi lokalt och laddar sedan upp det till vår Azure-instans. Så du kommer att kunna följa de flesta av stegen även utan åtkomst till Azure.

Nu ska vi komma igång

Vi har redan skapat en projektritning med namnet EvalDll_AzureTutorial. Det här projektet är en del av CNTK GitHub-lagringsplatsen och finns i mappen Examples\Evaluation\LegacyEvalDll\EvalDll_AzureTutorial.

Observera att exempelprojektet använder CNTK EvalDll API. För användare som använder en modell som tränats med Python använder du CNTK Library API. Självstudien för att använda CNTK-bibliotek finns i Utvärdera en modell i Azure WebApi med hjälp av hanterat API för CNTK-bibliotek

Vi rekommenderar att du börjar med den här lösningen eftersom vi redan har lagt till all kod vi behöver. För fullständighet här är listan över åtgärder för att skapa självstudieprojektet:

  • Vi började med att skapa ett nytt projekt/en ny lösning i VisualStudio från File->New->Project->Visual C#->Web->ASP.NET WebApplication: EvalDll_AzureTutorial. Vi valde en Azure API App-mall, lade till referenser till "Webb-API" och såg till att den finns lokalt (finns INTE i molnet – ännu).

  • Sedan utförde vi följande kodändringar för att skapa självstudieprojektet:

    • I ValueController.cs har vi lagt till några nödvändiga med hjälp av direktiv

    • Ersatte koden i public async Task<IEnumerable<string>> Get() för att faktiskt anropa vår CNTK utvärderingsfunktion

    • Funktionen public async Task<string[]> EvaluateCustomDNN(string imageUrl)har lagts till . Vi har implementerat den här funktionen från våra CNTK Eval-exempel (metod EvaluateImageClassificationModel från CNTK-lagringsplatsen i filen Examples\Evaluation\LegacyEvalDll\CSEvalClient\Program.cs)

    • CNTKImageProcessing.cs Filen har lagts till för att lägga till en bitmappsändringsfunktion. Detta kommer från den CNTK lagringsplatsen i Examples\Evaluation\ImageExtension\CNTKImageProcessing.cs till namnområdet och klassnamnet

    • Katalogen med de skapade binärfilerna i vår lösning måste läggas till i PATH programmets miljö. Detta krävs eftersom vårt projekt innehåller interna DLL:er, och de läses bara in om de kan nås i standardsökvägen. Vi har lagt till följande kod i Application_Start() -metoden i global.asax:

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

Vara värd för WebApi lokalt

Det här är de ändringar som vi har utfört hittills. Vi behöver fortfarande få CNTK Eval-funktionen som ingår i projektet och behöver en modell för att utvärdera.

Lägg till funktionen CNTK Eval i projektet. Detta är tillgängligt som ett NuGet-paket. I VS väljer du , väljer nuget.org som onlinekälla, söker CNTK efter och installerar den senaste paketversionen (Microsoft.Research.CNTK.*).Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution...

NuGet

Nu behöver vi en modell för att utvärdera. Ladda ned ResNet_18.model och spara den i katalogen CNTK\Models i lösningen. Modellfilen måste också ingå i lösningen (Project -> Add existing Item)

CNTK kräver en 64-bitars körningsmiljö. Kontrollera i Configuration Manager att projektet har kompilerats för x64-plattformen. Dessutom måste den WebApi som vi skapar finnas i en 64-bitars instans av IIS. Du kan framtvinga detta genom att välja "Använd 64-bitarsversion av IIS Express för webbplatser och projekt" iTools -> Options -> Project and Solutions -> WebProjects

Project

Nu har du utfört alla nödvändiga steg för att köra modellen lokalt på datorn. Tryck på Visual Studio F5 för att köra projektet. Då öppnas en webbläsare på standardwebbplatsen och ett felmeddelande visas. Detta är förväntat eftersom vi har skapat en WebApi och inte en webbplats. Vi anropar enkelt den implementerade WebApi genom att ändra adressen i webbläsaren till:

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

Då anropas Get() metoden i ValuesController-Class som i sin tur anropar metoden EvaluateCustomDNN() och returnerar ett resultat till webbläsaren

local

Vara värd för WebApi på Azure

Med detta har vi slutfört den första delen av vårt uppdrag, nu behöver vi den här funktionen i Azure! På menyn Skapa i projektet väljer du kommandot Publish . Välj Microsoft Azure App Service som publiceringsmål

Azure

I dialogrutan AppService måste du logga in med ditt konto och välja lämplig prenumeration och resursgrupp. Se till att välja en resursgrupp som stöder 64-bitars virtuella datorer (den kostnadsfria resursgruppen räcker inte för detta). Under de sista publiceringsstegen måste du välja en x64-konfiguration på inställningsmenyn. Detta krävs för att även publicera de interna binära komponenterna i CNTK till Azure

AzureSettings

När du publicerar din modell och anropar din publicerade WebApi i webbläsaren visas ett felmeddelande. Öppna Azure Portal och se till att din WebApi körs på en 64-bitarsplattform (ändra och "spara" inställningen om det behövs. Detta startar även om din virtuella datorinstans i Azure).

Azure64Settings

När du har utfört ändringarna kan du anropa webapi under http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

Det här projektet visade hur du integrerar funktionen CNTK Eval med hjälp av EvalDll i en Azure WebApi och konfigurerar Azure för att köra CNTK eval binärfiler. I nästa steg kan du nu lägga till nya API:er för att dynamiskt tillhandahålla data till eval-funktionen eller ladda upp en ny modellversion. Det här är webapi-/Azure-utvecklingsuppgifter och du bör läsa Azure-dokumentationen för detta.