Vyhodnocení modelu na Windows
V současné době CNTK poskytuje knihovny v C++, C#/.NET, Pythonu a Javě pro načítání a vyhodnocování modelů na Windows. Od verze 2.1 CNTK také podporuje Univerzální platforma Windows (UPW).
Použití spravovaného rozhraní API jazyka C#/.NET
Knihovna CNTK poskytuje spravovanou knihovnu (.NET) pro vyhodnocení modelů CNTK na procesoru a GPU pomocí jazyka C# a dalších jazyků .NET. Balíček NuGet CNTK. CpuOnly je navržený pro spouštění procesoru a CNTK. GPU je navržené pro spouštění na zařízeních s NVIDIA GPU. Podrobnosti o instalaci balíčků CNTK knihovny NuGet najdete na stránce NuGet Balíček. Upozorňujeme, že Visual Studio 2017 se vyžaduje a cílová platforma ve vlastnosti projektu by měla být X64.
Spravované rozhraní API knihovny CNTK umožňuje načítat a vyhodnocovat předem natrénované modely na zadaných zařízeních (cpu nebo GPU). Poskytuje také různé způsoby, jak vám pomoct připravit vstupní a výstupní data v hustším, řídkém vektoru nebo řídkém formátu CSC. Vstupní data mohou být jedním vzorkem, dávkou více vzorků, posloupností vzorků nebo dávkou sekvencí s proměnlivou délkou. Podrobný popis dávkového a pořadového formátu najdete na stránce CNTK Koncepty. Po vyhodnocení poskytuje rozhraní API praktické metody pro získání výsledků.
Průvodce programováním v C#/.NET
Mezi obvyklé kroky pro vyhodnocení modelu pomocí spravovaného rozhraní API knihovny CNTK patří:
- Nainstalujte příslušný balíček NuGet (procesor nebo GPU v závislosti na využití) do vašeho zařízení. Podrobnosti jsou popsány v balíčku CNTK NuGet.
- Načtěte model podle function.Load(). Vrácená
Function
hodnota je instance odkazující na načtený model. - V případě potřeby získejte vstupy a výstupy načteného modelu voláním vlastností
Arguments
Output
neboOutputs
instance funkce vrácené load(). Vstupy a výstupy jsou reprezentovány jakoVariable
. Další informace o jednotlivých vstupech nebo výstupech, např.Name
neboShape
lze najít voláním odpovídajících vlastností proměnné. - Pro každý vstup připravte vstupní data pro vyhodnocení. V závislosti na využití se vstupní data můžou skládat z jednoho vzorku, dávky více vzorků, sekvence vzorků nebo dávky sekvencí s proměnlivou délkou. Pokud jde o úložiště, vstupní data můžou být v hustším formátu, vektoru s jedním horkým nebo zhuštěným formátem CSC. Objekt
Value
se používá k reprezentaci vstupních dat s různými obsahy a formáty. Rozhraní API CNTK poskytuje různé metody pro snadné vytvoření objektu Value z prostých uživatelských dat.CreateBatch()
vytvoří objekt Value obsahující dávku jednoho nebo více vzorků.CreateSequence()
vytvoří objekt Value obsahující sekvenci s více ukázkami. Je možné určit, zda je tato sekvence novou posloupností nebo pokračováním předchozí sekvence ve stejném indexu v seznamu sekvencí z předchozího volání této metody.CreateBatchOfSequences()
vytvoří objekt Value obsahující dávku sekvencí. Každá sekvence má proměnlivou délku vzorků. Všechny výše uvedené metody podporují jak zhuštěný, jednosměrný vektor, tak řídký formát CSC.
- Zavolejte metodu
Evaluate()
pro provedení vyhodnocení. Parametrarguments
definuje vstupní proměnné a jejich přidružené hodnoty aoutputs
definuje výstupní proměnné. Pokud jenull
objekt Value výstupní proměnné , CNTK Knihovna přidělí skutečné úložiště pro výstupní hodnotu. Při vrácení funkce Evaluate() uloží výsledky vyhodnocení do objektů Value přidružených k výstupním proměnným. GetDenseData()/GetOneHotData()
Voláním metody výstupní hodnoty získáte výsledky ve formátu prostých dat. Zkopíruje data uložená v objektu Value do vyrovnávací paměti jako seznam sekvencí s proměnnými délkami vzorků, a to buď v zhuštěné podobě, nebo ve formátu 1-hot (podpora pro řídký formát bude přidána brzy).
Spravované rozhraní API knihovny CNTK je popsáno na stránce CNTK Library C#/.NET Managed API.
Paralelní vyhodnocení více požadavků
CNTK podporuje paralelní vyhodnocování více požadavků. Vzhledem k tomu, že spuštění vyhodnocení pro stejnou instanci modelu není bezpečné z více vláken, je nejprve nutné vytvořit více instancí modelu voláním Clone() s ParameterCloningMethod.Share
a pak každé vlákno používá k vyhodnocení samostatnou instanci modelu. UkazujeEvaluateMultipleImagesInParallelAsync()
, jak vyhodnotit souběžné požadavky pomocí CNTK rozhraní C#/.NET Managed API.
Asynchronní spuštění vyhodnocení
CNTK rozhraní API jazyka C# nemá asynchronní metodu pro Evaluate(), protože vyhodnocení je operace svázaná s procesorem (podrobné vysvětlení najdete v [tomto článku] (https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/). V některých případech použití je však žádoucí spustit vyhodnocení asynchronně, například snižování rychlosti odezvy, ukážeme si v příkladu EvaluationSingleImageAsync()
, jak toho dosáhnout pomocí metody EvaluateAsync()
rozšíření .
Vyhodnocení mezilehlých vrstev
CNTK rozhraní API jazyka C# dokáže vyhodnotit zprostředkující vrstvu v grafu modelu. Za tímto účelem lze požadovanou vrstvu najít podle názvu a zprostředkující vrstvu je možné vyhodnotit. Příklad EvaluateIntermediateLayer() v jazyce C# ukazuje, jak vyhodnotit zprostředkující vrstvu v modelu.
Vyhodnocení výstupů z více uzlů
CNTK může vyhodnotit více uzlů v grafu modelu tím, že zkombinuje jejich výstupy do jednoho uzlu. Příklad EvaluateCombinedOutputs() v jazyce C# ukazuje, jak vyhodnotit více výstupů.
Příklady jazyka C#
CnTKLibraryCSEvalExamples ukazuje, jak vyhodnotit model v jazyce C# pomocí balíčků CNTK knihovny NuGet. Informace o vytváření a spouštění příkladů najdete na stránce Příklady vyhodnocení .
Pokud nechcete používat NuGet Balíček, můžete přidat Cntk.Core.Managed-<VERSION>.dll
jako odkaz na projekt. Knihovnu Cntk.Core.Managed
DLL a všechny závislé knihovny DLL naleznete v CNTK binárním balíčku vydané verze na stránce CNTK Release. Ujistěte se, že cesta k Cntk.Core.Managed
knihovně DLL a její závislosti (viz seznam na konci této stránky) jsou součástí vyhledávací cesty knihoven DLL pro vaši aplikaci.
Použití jazyka C++
Rozhraní API knihovny CNTK C++ podporuje vyhodnocování modelů v aplikacích C++. Podporují se standardní desktopové aplikace i aplikace Univerzální platforma Windows. Visual Studio 2017 se vyžaduje a cílová platforma v vlastnosti projektu by měla být X64.
Balíček CNTK NuGet CNTK. CpuOnly a CNTK. GPU obsahuje knihovnu CNTK C++ pro použití CNTK v desktopových aplikacích. Pokud chcete používat CNTK na Univerzální platforma Windows, nainstalujte CNTK. UPW. CpuOnly. Pomocí NuGet balíčků se do vlastnosti projektu automaticky přidá konfigurace o zahrnutí a adresářích knihoven. Podporuje se sestavení ladění i vydané verze. Stránka NuGet Balíček vysvětluje, jak získat a nainstalovat balíčky CNTK NuGet.
Průvodce programováním v C++
Následující kroky popisují použití knihovny CNTK C++ k vyhodnocení modelu.
- Propojte knihovnu importu
Cntk.Core-<VERSION>.lib
do aplikace. Tento krok můžete vynechat, pokud použijete balíček NuGet. Pro aplikaci UPW jeCnkt.Core_app-<Version>.lib
název knihovny . - Zahrňte soubor hlavičky vyhodnocení CNTKLibrary.h.
- Načtěte model podle
CNTK::Function::Load()
. Vrácený objekt Funkce představuje výpočetní graf modelu. - Připravte data pro každou vstupní proměnnou. Můžete použít
CNTK::Value::CreateBatch()
,CNTK::Value::CreateSequence()
neboCNTK::Value::CreateBatchOfSequences()
vytvořit objekt Value ze vstupních dat představující dávku vzorků, posloupnost vzorků nebo dávku sekvencí vzorků v uvedeném pořadí. - Zavolejte
CNTK::Function::Evaluate()
na vyhodnocení. OčekáváEvaluate()
se jako vstup unordered_map pro vstupní proměnné a vstupní hodnoty a unordered_map pro výstupní proměnné a výstupní hodnoty. Objekt výstupní hodnoty může býtnull
to, že CNTK Knihovna přidělí skutečné úložiště pro tuto výstupní hodnotu. Při vrácení obsahují objekty Value přidružené k výstupním proměnným výsledky vyhodnocení. - Získejte výstupní data z výsledků vyhodnocení. Slouží
CNTK::Value::CopyVariableValueTo()
ke kopírování dat uložených v objektu Value do vyrovnávací paměti jako seznam sekvencí s proměnlivou délkou vzorků.
Pro souběžné vyhodnocení více požadavků CNTK::Function::Clone()
by se mělo volat před Evaluate(). UkazujeParallelEvaluationExample()
, jak paralelně vyhodnotit více požadavků pomocí rozhraní API knihovny CNTK C++.
Podrobnosti o rozhraní API knihovny C++ CNTK pro vyhodnocení najdete na stránce rozhraní CNTK Knihovny C++.
Příklady jazyka C++
Příklady CNTKLibraryCPPEvalCPUOnlyExamples
jazyka C++ a CNTKLibraryCPPEvalGPUExamples
znázornění výše uvedeného vzoru použití. UWPImageRecognition obsahuje příklad použití CNTK knihovny UPW pro vyhodnocení modelu. Stránka Eval Examples (Eval Examples ) obsahuje podrobné kroky k vytváření a spouštění příkladů.
Alternativně můžete použít knihovnu CNTK C++ bez balíčku NuGet. Můžete buď získat Cntk.Core-<VERSION>.lib
(nebo Cntk.Core_app-<Version>.lib
) a všechny závislé knihovny DLL ze stránky CNTK vydané verze, nebo je sestavit ze zdrojového kódu CNTK. Musíte také nakonfigurovat cestu k zahrnutí a knihovně tak, aby odkazovali na správný adresář, a ujistěte se, že konfigurace sestavení (ladění nebo verze) knihovny CNTK je stejná jako nastavení projektu (jinak se zobrazí neočekávané výjimky). Balíček verze CNTK obsahuje pouze sestavení binárních souborů vydané verze.
Expediční knihovna CNTK s vaší aplikací Windows
CNTK Knihovna vyžaduje instalaci balíčku Visual C++ Redistributable pro Visual Studio 2017 v systému, ve kterém bude vaše aplikace spuštěná. Cílová platforma ve vlastnosti projektu by měla být X64.
Tato stránka popisuje, jak se CNTK binární soubory pojmenovávají.
V případě desktopových aplikací C++ je potřeba distribuovat následující knihovny DLL s vaší aplikací.
Cntk.Core-<VERSION>.dll
Cntk.Math-<VERSION>.dll
libiomp5md.dll
mklml.dll
Pokud používáte spravovanou knihovnu C#/.NET vedle knihoven DLL uvedených výše, musíte navíc zahrnout následující knihovny DLL:
Cntk.Core.Managed-<VERSION>.dll
Cntk.Core.CSBinding-<VERSION>.dll
Pokud chcete používat GPU, musíte kromě následujících knihoven DLL souvisejících s NVIDIA CUDA zahrnout:
cublas64_90.dll
cudart64_90.dll
cudnn64_7.dll
curand64_90.dll
cusparse64_90.dll
nvml.dll
Poznámka
Změna v CNTK verze 2.1
CNTK NuGet balíčky se dodávají s cuDNN 6 (cudnn64_6.dll
).
Všechny tyto knihovny DLL najdete v CNTK binární verzi verze, viz stránka CNTK vydané verze.
V případě aplikací pro UPW je potřeba distribuovat následující knihovny DLL s vaší aplikací. Tyto knihovny DLL najdete v balíčku CNTK.UWP.CPUOnly
NuGet .
Cntk.Core_app-<VERSION>.dll
Cntk.Math_app-<VERSION>.dll
libopenblas.dll
Pomocí Pythonu
Pomocí Pythonu můžete vyhodnotit předem vytrénovaný model. Příklady najdete tady.
Pomocí Javy
CNTK také poskytuje rozhraní API pro vyhodnocení modelu v aplikaci v Javě. Upozorňujeme, že CNTK rozhraní Java API je stále experimentální a může se změnit.
Příklad Javy ukazuje, jak vyhodnotit model CNN pomocí rozhraní Java API.
Pokud chcete použít CNTK knihovnu Java, přidejte cntk.jar
soubor do classpath
projektu Java. Pokud pracujete s prostředím IDE, měli byste ho přidat jako nespravovaný soubor JAR. Soubor cntk.jar najdete v CNTK balíčku binární verze (ve složce cntk\cntk\java). Můžete také sestavit cntk.jar z CNTK zdroje. Nastavte java.library.path
také adresář obsahující Cntk.Core.JavaBinding-<Version>.dll
a ujistěte se, že adresář obsahující CNTK binární knihovny DLL je ve vyhledávací cestě knihovny DLL vašeho systému, například přidáním adresáře do proměnné prostředí PATH. Upozorňujeme, že pro Visual Studio 2017 je také potřeba nainstalovat balíček Visual C++ Redistributable. Pokud se dostanete UnsatisfiedLinkErrors
do Javy, obvykle je to proto, že adresář není ve vyhledávací cestě knihovny DLL (nebo v nesprávném pořadí).
Knihovna Java je aktuálně sestavená a otestovaná s 64bitovou sadou Oracle JDK 8.