Sdílet prostřednictvím


Vyhodnocení modelu v Azure WebApi pomocí EvalDll

Provedeme vás požadovanými kroky k nasazení modelu CNTK v Azure a odeslání webových požadavků do koncového bodu Azure za účelem vyhodnocení dat oproti nasazeného modelu. Tuto funkci vytvoříme ve formě WebApi, ale zaměříme se na nejzásadnější funkce Azure. Další informace o všech pokročilých schopnostech, tj. předávání parametrů atd. najdete v pokročilejší dokumentaci k Azure.

Požadavky

Vzhledem k tomu, že v současné době používáme VS2015 k sestavení CNTK, zaměříme se na tuto verzi Visual Studio.

Funkce vývoje webu pro Visual Studio

V Visual Studio je potřeba povolit funkce Web-Development. Můžete zjistit, jestli je tato funkce povolená (a v případě potřeby ji povolit) opětovným spuštěním instalačního programu VS (Control Panel -> Program and Features -> Microsoft Visual Studio 201xkliknutím pravým tlačítkem a výběrem Change vyvoláte instalační program VS).

Azure SDK

Sada Azure SDK pro .NET musí být nainstalovaná na vašem vývojovém počítači. Stránka pro stažení je: Stažení sady Azure SDK

Účet Azure

Vzhledem k tomu, že budeme hostovat model CNTK v Azure, budete potřebovat účet Azure. Pokud máte předplatné MSDN nebo Visual Studio, bude tento účet stačit k hostování modelu pro účely tohoto kurzu. CNTK k hostování 64bitového virtuálního počítače vyžaduje bezplatný účet Azure tuto funkci a nebude stačit.

Nejprve vytvoříme WebApi místně a pak ho nahrajeme do naší instance Azure. Takže budete moct postupovat podle většiny kroků i bez přístupu k Azure.

Začneme

Už jsme vytvořili podrobný plán projektu s názvem EvalDll_AzureTutorial. Tento projekt je součástí úložiště CNTK GitHub a nachází se ve složce Examples\Evaluation\LegacyEvalDll\EvalDll_AzureTutorial.

Upozorňujeme, že ukázkový projekt používá rozhraní API EvalDll CNTK. Pro uživatele, kteří používají model trénovaný v Pythonu, použijte rozhraní API knihovny CNTK. Kurz použití knihovny CNTK najdete v tématu Vyhodnocení modelu ve službě Azure WebApi pomocí CNTK spravovaného rozhraní API knihovny.

Doporučujeme začít od tohoto řešení, protože jsme už přidali veškerý kód, který potřebujeme. Tady je seznam operací pro vytvoření projektu kurzu:

  • Začali jsme vytvořením nového projektu nebo řešení v sadě VisualStudio z File->New->Project->Visual C#->Web->ASP.NET WebApplication: EvalDll_AzureTutorial. Vybrali jsme šablonu aplikace Azure API, přidali jsme odkazy na webové rozhraní API a ujistili jsme se, že je hostovaná místně (zatím není hostovaná v cloudu).

  • Pak jsme provedli následující změny kódu pro sestavení projektu kurzu:

    • Do souboru ValueController.cs jsme přidali několik požadovaných direktiv using

    • Nahradil kód public async Task<IEnumerable<string>> Get() tak, aby ve skutečnosti volal naši funkci vyhodnocení CNTK

    • Přidání funkce public async Task<string[]> EvaluateCustomDNN(string imageUrl). Tuto funkci jsme přijali z našich ukázek CNTK Eval (metoda EvaluateImageClassificationModel z úložiště CNTK v souboruExamples\Evaluation\LegacyEvalDll\CSEvalClient\Program.cs)

    • Přidání souboru CNTKImageProcessing.cs pro přidání funkce Bitmap-resize Pochází z úložiště Examples\Evaluation\ImageExtension\CNTKImageProcessing.cs CNTK do oboru názvů a názvu třídy.

    • Adresář vytvořených binárních souborů v našem řešení se musí přidat do PATH prostředí aplikace. To se vyžaduje, protože náš projekt obsahuje nativní knihovny DLL a ty se načtou jenom v případě, že jsou dostupné ve standardní cestě hledání. Do metody jsme Application_Start() přidali následující kód:global.asax

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

Místní hostování WebApi

Jedná se o změny, které jsme zatím provedli. Stále potřebujeme získat CNTK funkce Eval zahrnuté v projektu a k vyhodnocení potřebujeme model.

Přidejte do projektu funkci CNTK Eval. Tento balíček je k dispozici jako balíček NuGet. Ve VS vyberte Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution..., vyberte nuget.org jako online zdroj, vyhledejte CNTK a nainstalujte nejnovější verzi balíčku (Microsoft.Research.CNTK.*).

NuGet

Teď potřebujeme model k vyhodnocení. Stáhněte si ResNet_18.model a uložte ho do adresáře CNTK\Models v řešení. Soubor modelu musí být také součástí řešení (Project -> Add existing Item)

CNTK vyžaduje 64bitové prostředí runtime. Ujistěte se v Configuration Manager, že je projekt zkompilován pro platformu x64. Kromě toho je potřeba webApi, který vytváříme, hostovat v 64bitové instanci služby IIS. Můžete to vynutit výběrem možnosti Použít 64bitovou verzi IIS Express pro weby a projekty v částiTools -> Options -> Project and Solutions -> WebProjects

Project

V tomto okamžiku jste provedli všechny potřebné kroky ke spuštění modelu místně na vašem počítači. V Visual Studio stiskněte a F5 spusťte projekt. Otevře se internetový prohlížeč na výchozím webu a zobrazí se chybová zpráva. To se má očekávat, protože jsme vytvořili WebApi, a ne web. Implementované webApi jednoduše zavoláme tak, že změníme adresu v prohlížeči na:

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

Zavolá metodu Get() v ValuesController-Class, která metodu zavolá EvaluateCustomDNN() a vrátí výsledek do webového prohlížeče.

local

Hostování WebApi v Azure

Díky tomu jsme dosáhli první části naší mise, teď potřebujeme tuto funkci hostovanou v Azure! V nabídce Sestavení projektu vyberte Publish příkaz. Výběr Microsoft Azure App Service cíle publikování

Azure

V dialogovém okně AppService se musíte přihlásit pomocí svého účtu a vybrat odpovídající předplatné a skupinu prostředků. Nezapomeňte vybrat skupinu prostředků, která podporuje 64bitové virtuální počítače (pro tuto možnost není dostatečná skupina prostředků free). Během konečného postupu publikování musíte vybrat konfiguraci x64 v nabídce Nastavení. To se vyžaduje také k publikování nativních binárních komponent CNTK do Azure.

AzureSettings

Jakmile model publikujete a zavoláte publikovanou webApi v prohlížeči, zobrazí se chybová zpráva. Otevřete Azure Portal a ujistěte se, že je vaše webováapi spuštěná na 64bitové platformě (v případě potřeby změňte a uložte nastavení, restartuje se také instance virtuálního počítače v Azure).

Azure64Settings

Po provedení těchto změn budete moct zavolat WebApi v části http://<yourwebapp>.azurewebsites.net/api/values

AzureSettings

Tento projekt vám ukázal, jak integrovat funkce CNTK Eval pomocí EvalDll ve službě Azure WebApi a nastavit Azure tak, aby spouštěla binární soubory CNTK. V dalším kroku teď můžete přidat nová rozhraní API pro dynamické poskytování dat funkci eval-function nebo nahrání nové verze modelu. Jedná se o úlohy vývoje pro WebApi/Azure a měli byste se podívat na dokumentaci k Azure.