Évaluation du modèle sur Windows
Actuellement, CNTK fournit des bibliothèques en C++, C#/.NET, Python et Java pour le chargement et l’évaluation de modèles sur Windows. À partir de la version 2.1, CNTK prend également en charge plateforme Windows universelle (UWP).
Utilisation de l’API managée C#/.NET
La bibliothèque CNTK fournit une bibliothèque managée (.NET) pour l’évaluation des modèles CNTK sur le processeur et le GPU à l’aide de C# et d’autres langages .NET. Le package NuGet CNTK. CPUOnly est conçu pour l’exécution sur l’UC et le CNTK. GPU est conçu pour l’exécution sur les appareils avec GPU NVIDIA. Reportez-vous à la page NuGet Package pour savoir comment installer CNTK bibliothèque NuGet packages. Notez que Visual Studio 2017 est obligatoire et que la plateforme cible dans la propriété du projet doit être X64.
L’API managée de bibliothèque CNTK vous permet de charger et d’évaluer des modèles préentraînés sur des appareils spécifiés (PROCESSEUR ou GPU). Il fournit également différentes façons de vous aider à préparer les données d’entrée et de sortie dans le format CSC dense, à chaud ou éparse. Les données d’entrée peuvent être un seul échantillon, un lot de plusieurs exemples, une séquence d’échantillons ou un lot de séquences avec des longueurs variables. Vous trouverez une description détaillée du format de lot et de séquence à la page CNTK Concepts. Après l’évaluation, l’API fournit des méthodes pratiques pour obtenir des résultats.
Guide de programmation C#/.NET
Les étapes habituelles pour l’évaluation du modèle à l’aide de l’API gérée par la bibliothèque CNTK sont les suivantes :
- Installez le package de NuGet approprié (processeur ou GPU en fonction de l’utilisation) à votre. Les détails sont décrits dans le package CNTK NuGet.
- Chargez le modèle par Function.Load(). La valeur retournée est une
Function
instance faisant référence au modèle chargé. - Si nécessaire, obtenez des entrées et des sorties du modèle chargé en appelant les propriétés
Arguments
ouOutput
Outputs
de l’instance de fonction retournée par Load(). Les entrées et sorties sont représentées sous la formeVariable
. Pour plus d’informations sur chaque entrée ou sortie individuelle, par exempleName
, ouShape
peut être trouvée en appelant les propriétés correspondantes de la variable. - Pour chaque entrée, préparez les données d’entrée pour l’évaluation. Selon l’utilisation, les données d’entrée peuvent se composer d’un seul échantillon, d’un lot de plusieurs exemples, d’une séquence d’échantillons ou d’un lot de séquences avec une longueur variable. En ce qui concerne le stockage, les données d’entrée peuvent être au format dense, vecteur à chaud ou format CSC éparse. L’objet
Value
est utilisé pour représenter les données d’entrée avec différents contenus et formats. L’API CNTK fournit différentes méthodes pour créer facilement l’objet Value à partir de données utilisateur simples.CreateBatch()
crée un objet Value contenant un lot d’échantillons uniques ou multiples.CreateSequence()
crée un objet Value contenant une séquence avec plusieurs exemples. Il est possible de spécifier si cette séquence est une nouvelle séquence ou une continuation d’une séquence précédente au même index dans la liste des séquences d’un appel précédent à cette méthode.CreateBatchOfSequences()
crée un objet Value contenant un lot de séquences. Chaque séquence a une longueur variable d’exemples. Toutes les méthodes ci-dessus prennent en charge le format CSC dense, à chaud ou éparse.
- Appelez la méthode pour exécuter l’évaluation
Evaluate()
. Le paramètrearguments
définit les variables d’entrée et leurs valeurs associées etoutputs
définit les variables de sortie. Si l’objet Value d’une variable de sortie estnull
, CNTK Bibliothèque alloue le stockage réel pour la valeur de sortie. Au retour, Evaluate() enregistre les résultats d’évaluation dans les objets Value associés aux variables de sortie. - Appelez la
GetDenseData()/GetOneHotData()
méthode de la valeur de sortie pour obtenir les résultats au format de données bruts. Il copie les données stockées dans l’objet Value dans la mémoire tampon en tant que liste de séquences avec des exemples de longueur variable, soit au format dense ou au format vecteur à chaud (prise en charge du format éparse sera bientôt ajoutée).
L’API gérée CNTK bibliothèque est décrite dans la page CNTK Bibliothèque C#/.NET Managed API.
Évaluation de plusieurs requêtes en parallèle
CNTK prend en charge l’évaluation de plusieurs requêtes en parallèle. Étant donné que l’exécution de l’évaluation sur la même instance de modèle n’est pas thread-safe, il est nécessaire de créer d’abord plusieurs instances de modèle en appelant Clone() avec ParameterCloningMethod.Share
, puis chaque thread utilise une instance de modèle distincte pour l’évaluation. La EvaluateMultipleImagesInParallelAsync()
méthode montre comment évaluer les demandes simultanées à l’aide d’CNTK API managée C#/.NET.
Exécuter l’évaluation de manière asynchrone
CNTK l’API C# n’a pas de méthode asynchrone pour Evaluate(), car l’évaluation est une opération liée au processeur (reportez-vous à [cet article] (https://blogs.msdn.microsoft.com/pfxteam/2012/03/24/should-i-expose-asynchronous-wrappers-for-synchronous-methods/) pour obtenir une explication détaillée. Toutefois, il est souhaité exécuter l’évaluation de manière asynchrone dans certains cas d’utilisation, par exemple le déchargement pour la réactivité, nous montrons dans l’exemple EvaluationSingleImageAsync()
comment effectuer cette opération à l’aide de la méthode EvaluateAsync()
d’extension.
Évaluer les couches intermédiaires
CNTK API C# peut évaluer une couche intermédiaire dans un graphique de modèle. À cette fin, la couche souhaitée peut être trouvée par son nom et la couche intermédiaire peut être évaluée. L’exemple EvaluateIntermediateLayer() en C# montre comment évaluer une couche intermédiaire dans un modèle.
Évaluer les sorties de plusieurs nœuds
CNTK pouvez évaluer plusieurs nœuds dans un graphique de modèle en combinant leurs sorties en un seul nœud. L’exemple EvaluateCombinedOutputs() en C# montre comment évaluer plusieurs sorties.
Exemples C#
CNTKLibraryCSEvalExamples montre comment évaluer un modèle en C# à l’aide de CNTK packages de bibliothèque NuGet. Consultez la page Exemples Eval pour créer et exécuter des exemples.
Si vous ne souhaitez pas utiliser NuGet package, vous pouvez ajouter Cntk.Core.Managed-<VERSION>.dll
comme référence à votre projet. La Cntk.Core.Managed
DLL et toutes les DLL dépendantes sont disponibles dans le package de mise en production binaire CNTK dans la page CNTK Versions. Assurez-vous que le chemin d’accès à Cntk.Core.Managed
la DLL et à ses dépendances (voir la liste à la fin de cette page) est inclus dans le chemin de recherche des DLL pour votre application.
Utilisation de C++
L’API C++ bibliothèque CNTK prend en charge l’évaluation du modèle dans les applications C++. Les applications de bureau standard et les applications plateforme Windows universelle sont prises en charge. Visual Studio 2017 est obligatoire et la plateforme cible dans la propriété du projet doit être X64.
Le package CNTK NuGet CNTK. CPUOnly et CNTK. LE GPU contient la bibliothèque de CNTK C++ pour l’utilisation de CNTK dans les applications de bureau. Pour utiliser CNTK sur plateforme Windows universelle, installez CNTK. UWP. CPUOnly. À l’aide de NuGet packages, la configuration sur les répertoires d’inclure et de bibliothèque est automatiquement ajoutée à votre propriété de projet. La génération de débogage et de mise en production est prise en charge. La page package NuGet explique comment obtenir et installer CNTK NuGet packages.
Guide de programmation C++
Les étapes suivantes décrivent comment utiliser la bibliothèque de CNTK C++ pour l’évaluation du modèle.
- Lier la bibliothèque d’importation
Cntk.Core-<VERSION>.lib
à l’application. Cette étape peut être omise si vous utilisez le package NuGet. Pour l’application UWP, le nom de la bibliothèque estCnkt.Core_app-<Version>.lib
. - Incluez le fichier d’en-tête d’évaluation « CNTKLibrary.h ».
- Chargez le modèle par
CNTK::Function::Load()
. L’objet Function retourné représente le graphique de calcul du modèle. - Préparez des données pour chaque variable d’entrée. Vous pouvez utiliser
CNTK::Value::CreateBatch()
, ouCNTK::Value::CreateSequence()
CNTK::Value::CreateBatchOfSequences()
créer un objet Value à partir de vos données d’entrée représentant un lot d’exemples, une séquence d’exemples ou un lot de séquences d’échantillons respectivement. - Appel
CNTK::Function::Evaluate()
à l’évaluation. LesEvaluate()
attentes en tant qu’entrée unordered_map pour les variables d’entrée et les valeurs d’entrée, ainsi qu’un unordered_map pour les variables de sortie et les valeurs de sortie. L’objet valeur de sortie peut êtrenull
ce qui signifie que CNTK Bibliothèque alloue le stockage réel pour cette valeur de sortie. En retour, les objets Value associés aux variables de sortie contiennent les résultats de l’évaluation. - Obtenez des données de sortie à partir des résultats d’évaluation. Permet
CNTK::Value::CopyVariableValueTo()
de copier les données stockées dans l’objet Value dans la mémoire tampon en tant que liste de séquences avec une longueur variable d’exemples.
Pour l’évaluation simultanée de plusieurs requêtes, CNTK::Function::Clone()
doit être appelée avant Évaluation(). L’api ParallelEvaluationExample()
de bibliothèque C++ montre comment évaluer plusieurs requêtes en parallèle à l’aide de CNTK API de bibliothèque C++.
Pour plus d’informations sur l’API de bibliothèque C+CNTK+ pour l’évaluation, reportez-vous à la page CNTK l’interface d’évaluation C++ de la bibliothèque.
Exemples C++
Les exemples CNTKLibraryCPPEvalCPUOnlyExamples
C++ et CNTKLibraryCPPEvalGPUExamples
illustrent le modèle d’utilisation ci-dessus. UWPImageRecognition contient un exemple utilisant CNTK bibliothèque UWP pour l’évaluation du modèle. La page Exemples Eval fournit des étapes détaillées sur la création et l’exécution d’exemples.
Vous pouvez également utiliser la bibliothèque de CNTK C++ sans le package NuGet. Vous pouvez obtenir Cntk.Core-<VERSION>.lib
(ouCntk.Core_app-<Version>.lib
) et toutes les DLL dépendantes à partir de la page CNTK Versions ou les générer à partir de CNTK code source. Vous devez également configurer le chemin d’accès d’inclure et de bibliothèque pour pointer vers le répertoire correct et vous assurer que la configuration de build (débogage ou mise en production) de la bibliothèque CNTK est identique à celle de votre paramètre de projet (sinon, vous obtiendrez des exceptions inattendues). Le package de mise en production CNTK contient uniquement la build de version des fichiers binaires.
Copie de CNTK bibliothèque avec votre application Windows
CNTK bibliothèque nécessite le package Visual C++ Redistributable pour Visual Studio 2017 à installer sur le système où votre application va s’exécuter. Et la plateforme cible dans la propriété du projet doit être X64.
Cette page décrit comment CNTK fichiers binaires sont nommés.
Pour les applications C++ de bureau, les DLL suivantes doivent être distribuées avec votre application.
Cntk.Core-<VERSION>.dll
Cntk.Math-<VERSION>.dll
libiomp5md.dll
mklml.dll
Si vous utilisez la bibliothèque managée C#/.NET, en plus des DLL mentionnées ci-dessus, vous devez inclure les DLL suivantes :
Cntk.Core.Managed-<VERSION>.dll
Cntk.Core.CSBinding-<VERSION>.dll
Pour utiliser gpu, vous devez inclure les DLL associées NVIDIA CUDA suivantes :
cublas64_90.dll
cudart64_90.dll
cudnn64_7.dll
curand64_90.dll
cusparse64_90.dll
nvml.dll
Notes
Modifié dans CNTK version 2.1.
CNTK NuGet packages sont expédiés avec cuDNN 6 (cudnn64_6.dll
).
Vous trouverez toutes ces DLL dans la version de version binaire CNTK, consultez la page CNTK Versions.
Pour les applications UWP, les DLL suivantes doivent être distribuées avec votre application. Vous trouverez ces DLL dans le package CNTK.UWP.CPUOnly
Nuget .
Cntk.Core_app-<VERSION>.dll
Cntk.Math_app-<VERSION>.dll
libopenblas.dll
Utilisation de Python
Vous pouvez utiliser Python pour évaluer un modèle préentraîné. Vous trouverez des exemples ici.
Utilisation de Java
CNTK fournit également des API pour évaluer le modèle dans l’application Java. Notez que l’API Java CNTK est toujours expérimentale et soumise à modification.
L’exemple Java montre comment évaluer un modèle CNN à l’aide de l’API Java.
Pour utiliser CNTK bibliothèque Java, ajoutez le cntk.jar
fichier à votre classpath
projet Java. Si vous utilisez un IDE, vous devez l’ajouter en tant que jar non managé. Le fichier cntk.jar se trouve dans le package de mise en production binaire CNTK (dans le dossier cntk\cntk\java). Vous pouvez également générer cntk.jar à partir de CNTK source. Définissez également java.library.path
le répertoire contenant Cntk.Core.JavaBinding-<Version>.dll
, et assurez-vous que le répertoire contenant CNTK DLL binaires se trouve dans le chemin de recherche DLL de votre système, par exemple en ajoutant le répertoire à la variable d’environnement PATH. Notez que vous devez également installer Visual C++ Redistributable package pour Visual Studio 2017. Si vous obtenez UnsatisfiedLinkErrors
en Java, c’est généralement parce que le répertoire n’est pas dans le chemin de recherche DLL (ou dans l’ordre incorrect).
La bibliothèque Java est actuellement générée et testée avec le JDK Oracle 8 64 bits.