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 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 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í CNTKPřidání funkce
public async Task<string[]> EvaluateCustomDNN(string imageUrl)
. Tuto funkci jsme přijali z našich ukázek Eval CNTK (metodaEvaluateImageClassificationModel
z úložiště CNTK v souboruExamples\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 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 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.
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
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.
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
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.