Condividi tramite


Valutazione del modello in Windows

Attualmente, CNTK fornisce librerie in C++, C#/.NET, Python e Java per il caricamento e la valutazione dei modelli in Windows. A partire dalla versione 2.1, CNTK supporta anche piattaforma UWP (Universal Windows Platform) (UWP).

Uso dell'API gestita C#/.NET

La libreria CNTK fornisce una libreria gestita (.NET) per la valutazione dei modelli CNTK in CPU e GPU usando C# e altri linguaggi .NET. Pacchetto NuGet CNTK. CPUOnly è progettato per l'esecuzione sulla CPU e sulla CNTK. La GPU è progettata per l'esecuzione su dispositivi con GPU NVIDIA. Fare riferimento alla pagina NuGet Package (Pacchetto di NuGet) per informazioni dettagliate su come installare CNTK Libreria NuGet Pacchetti. Si noti che Visual Studio 2017 è obbligatorio e che la piattaforma di destinazione nella proprietà del progetto deve essere X64.

L'API gestita della libreria CNTK consente di caricare e valutare modelli con training preliminare nei dispositivi specificati (CPU o GPU). Offre anche diversi modi per preparare i dati di input e output nel formato CSC denso, one-hot o sparse. I dati di input possono essere un singolo campione, un batch di più campioni, una sequenza di campioni o un batch di sequenze con lunghezze variabili. Una descrizione dettagliata del formato batch e sequenza è disponibile nella pagina CNTK Concetti. Dopo la valutazione, l'API fornisce metodi pratici per ottenere risultati.

Guida per programmatori C#/.NET

I passaggi consueti per la valutazione del modello tramite CNTK'API gestita della libreria includono:

  1. Installare il pacchetto di NuGet appropriato (CPU o GPU a seconda dell'utilizzo) al proprio. I dettagli sono descritti nel pacchetto CNTK NuGet.
  2. Caricare il modello in base a Function.Load(). Il valore restituito è un'istanza Function che fa riferimento al modello caricato.
  3. Se necessario, ottenere input e output del modello caricato chiamando le proprietà Argumentso OutputOutputs dell'istanza di Function restituita da Load(). Gli input e gli output sono rappresentati come Variable. Altre informazioni su ogni singolo input o output, ad esempio Name o Shape sono disponibili chiamando le proprietà corrispondenti della variabile.
  4. Per ogni input, preparare i dati di input per la valutazione. A seconda dell'utilizzo, i dati di input possono essere costituiti da un singolo campione, batch di più campioni, una sequenza di campioni o un batch di sequenze con lunghezza variabile. Per quanto riguarda l'archiviazione, i dati di input possono essere in formato denso, un vettore a caldo o CSC sparse. L'oggetto Value viene utilizzato per rappresentare i dati di input con contenuti e formati diversi. L'API CNTK fornisce metodi diversi per creare facilmente l'oggetto Value dai dati utente semplici.
    • CreateBatch() crea un oggetto Value contenente un batch di campioni singoli o multipli.
    • CreateSequence() crea un oggetto Value contenente una sequenza con più esempi. È possibile specificare se questa sequenza è una nuova sequenza o una continuazione di una sequenza precedente con lo stesso indice nell'elenco sequenze da una chiamata precedente a questo metodo.
    • CreateBatchOfSequences() crea un oggetto Value contenente un batch di sequenze. Ogni sequenza ha una lunghezza variabile di campioni. Tutti i metodi precedenti supportano sia il formato CSC dense, one-hot o sparse.
  5. Chiamare il metodo per eseguire la Evaluate() valutazione. Il parametro arguments definisce le variabili di input e i relativi valori associati e outputs definisce le variabili di output. Se l'oggetto Value di una variabile di output è null, CNTK Library alloca l'archiviazione effettiva per il valore di output. In caso di restituzione, Evaluate() salva i risultati della valutazione negli oggetti Value associati alle variabili di output.
  6. Chiamare il GetDenseData()/GetOneHotData() metodo del valore di output per ottenere i risultati in formato dati normale. Copia i dati archiviati nell'oggetto Value nel buffer come elenco di sequenze con campioni di lunghezza variabile, in formato denso o a vettori a caldo (il supporto per il formato sparse verrà aggiunto a breve).

L'API gestita della libreria CNTK è descritta nella pagina API gestita della libreria CNTK C#/.NET.

Valutazione di più richieste in parallelo

CNTK supporta la valutazione di più richieste in parallelo. Poiché l'esecuzione della valutazione nella stessa istanza del modello non è thread-safe, è necessario prima creare più istanze del modello chiamando Clone() con ParameterCloningMethod.Sharee quindi ogni thread usa un'istanza del modello separata per la valutazione. EvaluateMultipleImagesInParallelAsync() Illustra come valutare le richieste simultanee usando CNTK'API gestita C#/.NET.

Eseguire la valutazione in modo asincrono

CNTK'API C# non dispone di un metodo asincrono per Evaluate(), perché la valutazione è un'operazione associata alla CPU (fare riferimento a [questo articolo] (https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/) per una spiegazione dettagliata. Tuttavia, si vuole eseguire la valutazione in modo asincrono in alcuni casi d'uso, ad esempio l'offload per la velocità di risposta, viene illustrato nell'esempio EvaluationSingleImageAsync() come ottenere tale risultato usando il metodo EvaluateAsync()di estensione .

Valutare i livelli intermedi

CNTK'API C# è in grado di valutare un livello intermedio in un grafico del modello. A tale scopo, il livello desiderato può essere trovato in base al nome e il livello intermedio può essere valutato. L'esempio EvaluateIntermediateLayer() in C# illustra come valutare un livello intermedio in un modello.

Valutare gli output da più nodi

CNTK possibile valutare più nodi in un grafico del modello combinando gli output in un singolo nodo. L'esempio EvaluateCombinedOutputs() in C# illustra come valutare più output.

Esempi di C#

CNTKLibraryCSEvalExamples illustra come valutare un modello in C# usando i pacchetti NuGet della libreria CNTK. Per la compilazione e l'esecuzione di esempi, vedere la pagina Esempi di Eval .

Se non si vuole usare NuGet Package, è possibile aggiungere Cntk.Core.Managed-<VERSION>.dll come riferimento al progetto. La Cntk.Core.Managed DLL e tutte le DLL dipendenti sono disponibili nel pacchetto di versione binaria CNTK nella pagina delle versioni di CNTK. Assicurarsi che il percorso della Cntk.Core.Managed DLL e le relative dipendenze (vedere l'elenco alla fine di questa pagina) siano inclusi nel percorso di ricerca delle DLL per l'applicazione.

Utilizzo di C++

L'API C++ della libreria CNTK supporta la valutazione del modello nelle applicazioni C++. Sono supportate sia le applicazioni desktop standard che le applicazioni piattaforma UWP (Universal Windows Platform). Visual Studio 2017 è necessario e la piattaforma di destinazione nella proprietà del progetto deve essere X64.

CNTK del pacchetto di CNTK NuGet. CPUOnly e CNTK. La GPU contiene la libreria di CNTK C++ per l'uso di CNTK nelle applicazioni desktop. Per l'uso di CNTK in piattaforma UWP (Universal Windows Platform), installare CNTK. UWP. CPUOnly. Usando i pacchetti NuGet, la configurazione relativa all'inclusione e alle directory della libreria viene aggiunta automaticamente alla proprietà del progetto. Sono supportate sia la build di debug che quella di rilascio. Nella pagina NuGet Package viene illustrato come ottenere e installare pacchetti CNTK NuGet.

Guida per programmatori C++

I passaggi seguenti descrivono come usare la libreria di CNTK C++ per la valutazione del modello.

  1. Collegare la Cntk.Core-<VERSION>.lib libreria di importazione all'applicazione. Questo passaggio può essere omesso se si usa il pacchetto NuGet. Per l'applicazione UWP, il nome della libreria è Cnkt.Core_app-<Version>.lib.
  2. Includere il file di intestazione di valutazione "CNTKLibrary.h".
  3. Caricare il modello in base a CNTK::Function::Load(). L'oggetto Function restituito rappresenta il grafico di calcolo del modello.
  4. Preparare i dati per ogni variabile di input. È possibile usare CNTK::Value::CreateBatch(), CNTK::Value::CreateSequence()o CNTK::Value::CreateBatchOfSequences() per creare un oggetto Value dai dati di input che rappresentano rispettivamente un batch di campioni, una sequenza di campioni o un batch di sequenze di campioni.
  5. Chiamare CNTK::Function::Evaluate() per la valutazione. l'oggetto Evaluate() prevede l'input di un unordered_map per le variabili di input e i valori di input e un unordered_map per le variabili di output e i valori di output. L'oggetto valore di output può essere null il che significa che CNTK Library alloca l'archiviazione effettiva per questo valore di output. In caso di restituzione, gli oggetti Value associati alle variabili di output contengono i risultati della valutazione.
  6. Ottenere i dati di output dai risultati della valutazione. Utilizzare CNTK::Value::CopyVariableValueTo() per copiare i dati archiviati nell'oggetto Value nel buffer come elenco di sequenze con lunghezza variabile di campioni.

Per la valutazione simultanea di più richieste, CNTK::Function::Clone() deve essere chiamato prima di Evaluate(). ParallelEvaluationExample() Illustra come valutare più richieste in parallelo usando CNTK API della libreria C++.

Per informazioni dettagliate sull'API della libreria CNTK C++ per la valutazione, vedere la pagina interfaccia di valutazione C++ della libreria CNTK.

Esempi di C++

Gli esempi CNTKLibraryCPPEvalCPUOnlyExamples di C++ e CNTKLibraryCPPEvalGPUExamples illustrano il modello di utilizzo precedente. UWPImageRecognition contiene un esempio che usa CNTK libreria UWP per la valutazione del modello. La pagina Esempi di Eval fornisce passaggi dettagliati sulla compilazione e l'esecuzione di esempi.

In alternativa, è possibile usare la libreria CNTK C++ senza il pacchetto NuGet. È possibile ottenere Cntk.Core-<VERSION>.lib (o Cntk.Core_app-<Version>.lib) e tutte le DLL dipendenti dalla pagina delle versioni di CNTK o compilarle da CNTK codice sorgente. È anche necessario configurare il percorso di inclusione e libreria in modo che punti alla directory corretta e assicurarsi che la configurazione di compilazione (debug o versione) della libreria di CNTK sia uguale a quella dell'impostazione del progetto (in caso contrario si otterranno eccezioni impreviste). Il pacchetto di versione CNTK contiene solo la build di versione dei file binari.

Spedizione della libreria CNTK con l'applicazione Windows

CNTK Library richiede l'installazione del pacchetto Visual C++ Redistributable per Visual Studio 2017 nel sistema in cui verrà eseguita l'applicazione. La piattaforma di destinazione nella proprietà del progetto deve essere X64.

Questa pagina descrive come vengono denominati CNTK file binari.

Per le applicazioni C++ desktop, è necessario distribuire le DLL seguenti con l'applicazione.

  • Cntk.Core-<VERSION>.dll
  • Cntk.Math-<VERSION>.dll
  • libiomp5md.dll
  • mklml.dll

Se si usa la libreria gestita C#/.NET, accanto alle DLL indicate in precedenza, è necessario includere anche le DLL seguenti:

  • Cntk.Core.Managed-<VERSION>.dll
  • Cntk.Core.CSBinding-<VERSION>.dll

Per l'uso della GPU, è necessario includere le DLL correlate a NVIDIA CUDA seguenti:

  • cublas64_90.dll
  • cudart64_90.dll
  • cudnn64_7.dll
  • curand64_90.dll
  • cusparse64_90.dll
  • nvml.dll

Nota

Modificato in CNTK versione 2.1.

CNTK NuGet pacchetti sono in spedizione con cuDNN 6 (cudnn64_6.dll).

Tutte queste DLL sono disponibili nella versione CNTK versione binaria, vedere la pagina CNTK Release.

Per le applicazioni UWP, le DLL seguenti devono essere distribuite con l'applicazione. È possibile trovare queste DLL nel pacchetto CNTK.UWP.CPUOnlyNuget .

  • Cntk.Core_app-<VERSION>.dll
  • Cntk.Math_app-<VERSION>.dll
  • libopenblas.dll

Uso di Python

È possibile usare Python per valutare un modello pre-sottoposto a training. Gli esempi sono disponibili qui.

Uso di Java

CNTK fornisce anche API per la valutazione del modello nell'applicazione Java. Si noti che l'API Java CNTK è ancora sperimentale e soggetta a modifiche.

L'esempio Java illustra come valutare un modello CNN usando l'API Java.

Per usare CNTK Libreria Java, aggiungere il cntk.jar file al classpath progetto Java. Se si usa un IDE, è consigliabile aggiungerlo come jar non gestito. Il file cntk.jar è disponibile nel pacchetto di versione binario CNTK (nella cartella cntk\cntk\java). È anche possibile compilare cntk.jar dall'origine CNTK. Impostare anche java.library.path sulla directory contenente , e assicurarsi che la directory contenente Cntk.Core.JavaBinding-<Version>.dllCNTK DLL binaria sia nel percorso di ricerca DLL del sistema, ad esempio aggiungendo la directory alla variabile di ambiente PATH. Si noti che è necessario installare anche Visual C++ Redistributable Pacchetto per Visual Studio 2017. Se si ottiene UnsatisfiedLinkErrors in Java, è in genere perché la directory non è nel percorso di ricerca dll (o nell'ordine errato).

La libreria Java è attualmente costruita e testata con Oracle JDK 8 a 64 bit.