Vyhodnocení modelu ve službě Azure WebApi pomocí spravovaného rozhraní API knihovny CNTK

Nasazení prostřednictvím příkazového řádku služby Azure Machine Learning

Jedním ze způsobů, jak nasadit model CNTK v Azure a spustit nasazený model prostřednictvím webových rozhraní API, je rozhraní příkazového řádku do Služby Azure Machine Learning. Kliknutím sem zjistíte, jak na to.

Nasazení prostřednictvím ASP.NET

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 k sestavení CNTK v současné době používáme VS2017, zaměřujeme se na tuto verzi sady Visual Studio.

Funkce vývoje webu pro Visual Studio

Potřebujete povolit funkce Web-Development v sadě Visual Studio. 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 dostačující k hostování modelu pro účely tohoto kurzu. CNTK vyžaduje k hostování 64bitový virtuální počítač, bezplatný účet Azure tuto funkci nezahrnuje 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 CNTKAzureTutorial01. Tento projekt je součástí úložiště GITHub CNTK a najdete ho ve složce Examples\Evaluation\CNTKAzureTutorial01.

Upozorňujeme, že ukázkový projekt používá spravované rozhraní API knihovny CNTK. Pro uživatele, kteří používají rozhraní API EvalDll, použijte rozhraní CNTK EvalDLL API. Kurz použití EvalDll najdete v tématu Vyhodnocení modelu v Azure WebApi pomocí EvalDll.

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: CNTKAzureTutorial01. 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

    • Nahrazení kódu public async Task<IEnumerable<string>> Get() tak, aby skutečně volala 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 Eval CNTK (metoda EvaluateImageClassificationModel z úložiště CNTK v souboru Examples\Evaluation\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 funkce CNTK Eval zahrnuté v projektu a potřebujeme model k vyhodnocení.

Přidejte do projektu funkci CNTK Eval. Toto 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 (CNTK.GPU nebo CNTK.CPUOnly) do projektu.

NuGet

Teď potřebujeme model k vyhodnocení. Stáhněte ResNet20_CIFAR10_CNTK.model a uložte ho do adresáře CNTK\Models ve složce projektu. 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 sadě Visual Studio spusťte projekt stisknutím klávesy F5 . 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.

Místní

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

V tomto projektu jste ukázali, jak integrovat funkce CNTK Eval pomocí rozhraní CNTK Library Managed API ve službě Azure WebApi a nastavit Azure tak, aby spouštět binární soubory evalů 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.