Sdílet prostřednictvím


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ří:

  1. 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.
  2. Načtěte model podle function.Load(). Vrácená Function hodnota je instance odkazující na načtený model.
  3. V případě potřeby získejte vstupy a výstupy načteného modelu voláním vlastností ArgumentsOutput nebo Outputs instance funkce vrácené load(). Vstupy a výstupy jsou reprezentovány jako Variable. Další informace o jednotlivých vstupech nebo výstupech, např. Name nebo Shape lze najít voláním odpovídajících vlastností proměnné.
  4. 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.
  5. Zavolejte metodu Evaluate() pro provedení vyhodnocení. Parametr arguments definuje vstupní proměnné a jejich přidružené hodnoty a outputs definuje výstupní proměnné. Pokud je nullobjekt 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.
  6. 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.Sharea 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.

  1. Propojte knihovnu importu Cntk.Core-<VERSION>.lib do aplikace. Tento krok můžete vynechat, pokud použijete balíček NuGet. Pro aplikaci UPW je Cnkt.Core_app-<Version>.libnázev knihovny .
  2. Zahrňte soubor hlavičky vyhodnocení CNTKLibrary.h.
  3. Načtěte model podle CNTK::Function::Load(). Vrácený objekt Funkce představuje výpočetní graf modelu.
  4. Připravte data pro každou vstupní proměnnou. Můžete použít CNTK::Value::CreateBatch(), CNTK::Value::CreateSequence()nebo CNTK::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í.
  5. 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ýt null 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í.
  6. 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.CPUOnlyNuGet .

  • 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>.dlla 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.