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 201x
kliknutí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í CNTKPřidání funkce
public async Task<string[]> EvaluateCustomDNN(string imageUrl)
. Tuto funkci jsme přijali z našich ukázek CNTK Eval (metodaEvaluateImageClassificationModel
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 jsmeApplication_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.*
).
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
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.
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í
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.
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).
Po provedení těchto změn budete moct zavolat WebApi v části http://<yourwebapp>.azurewebsites.net/api/values
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.