Chat | État de construction de Windows | État de la version Linux |
---|---|---|
Le Microsoft Cognitive Toolkit (https://cntk.ai) est une boîte à outils d'apprentissage profond unifiée qui décrit les réseaux neuronaux comme une série d'étapes de calcul via un graphe orienté. Dans ce graphe orienté, les nœuds feuilles représentent des valeurs d'entrée ou des paramètres de réseau, tandis que d'autres nœuds représentent des opérations matricielles sur leurs entrées. CNTK permet aux utilisateurs de réaliser et de combiner facilement des types de modèles populaires tels que les DNN à action directe, les réseaux convolutifs (CNN) et les réseaux récurrents (RNN/LSTM). Il implémente l'apprentissage par descente de gradient stochastique (SGD, rétropropagation des erreurs) avec différenciation et parallélisation automatiques sur plusieurs GPU et serveurs. CNTK est disponible sous licence open source depuis avril 2015. Nous espérons que la communauté profitera de CNTK pour partager des idées plus rapidement grâce à l'échange de code de travail open source.
Si vous préférez utiliser les derniers bits CNTK du maître, utilisez l'un des packages nocturnes CNTK :
Vous pouvez en savoir plus sur l'utilisation et la contribution à CNTK avec les ressources suivantes :
Chère communauté,
Grâce à nos contributions continues à ONNX et à ONNX Runtime, nous avons facilité l'interopérabilité au sein de l'écosystème du framework d'IA et l'accès à des capacités d'inférence multiplateformes hautes performances pour les modèles ML traditionnels et les réseaux neuronaux profonds. Au cours des dernières années, nous avons eu le privilège de développer de tels projets clés d'apprentissage automatique open source, notamment le Microsoft Cognitive Toolkit, qui a permis à ses utilisateurs de tirer parti des avancées de l'apprentissage profond à l'échelle de l'industrie.
La version 2.7 d'aujourd'hui sera la dernière version principale de CNTK. Nous pouvons avoir des versions mineures ultérieures pour corriger des bugs, mais celles-ci seront évaluées au cas par cas. Il n'est pas prévu de développer de nouvelles fonctionnalités après cette version.
La version CNTK 2.7 prend entièrement en charge ONNX 1.4.1, et nous encourageons ceux qui cherchent à opérationnaliser leurs modèles CNTK à tirer parti d'ONNX et du runtime ONNX. À l’avenir, les utilisateurs peuvent continuer à tirer parti des innovations ONNX en évolution grâce au nombre de frameworks qui les prennent en charge. Par exemple, les utilisateurs peuvent exporter nativement des modèles ONNX depuis PyTorch ou convertir des modèles TensorFlow en ONNX avec le convertisseur TensorFlow-ONNX.
Nous sommes extrêmement reconnaissants pour tout le soutien que nous avons reçu de la part des contributeurs et des utilisateurs au fil des années depuis la version open source initiale de CNTK. CNTK a permis aux équipes Microsoft et aux utilisateurs externes d'exécuter des charges de travail complexes et à grande échelle dans toutes sortes d'applications d'apprentissage profond, telles que les avancées historiques en matière de reconnaissance vocale réalisées par les chercheurs de Microsoft Speech, à l'origine du framework.
Alors qu'ONNX est de plus en plus utilisé pour servir des modèles utilisés dans les produits Microsoft tels que Bing et Office, nous nous engageons à synthétiser les innovations issues de la recherche avec les exigences rigoureuses de la production pour faire progresser l'écosystème.
Avant tout, notre objectif est de rendre les innovations en matière d’apprentissage profond à travers les piles logicielles et matérielles aussi ouvertes et accessibles que possible. Nous travaillerons dur pour intégrer à la fois les atouts existants du CNTK et les nouvelles recherches de pointe dans d'autres projets open source afin d'élargir véritablement la portée de ces technologies.
Avec gratitude,
-- L'équipe CNTK
Ce projet a adopté le code de conduite Microsoft Open Source. Pour plus d’informations, consultez la FAQ sur le code de conduite ou contactez [email protected] pour toute question ou commentaire supplémentaire.
Vous pouvez trouver plus d'actualités sur le fil officiel du projet
2019-03-29. CNTK2.7.0
Pour configurer l'environnement de build et d'exécution sous Windows :
Pour configurer l'environnement de construction et d'exécution sur Linux à l'aide de Docker, veuillez créer l'image Docker Unbuntu 16.04 à l'aide de Dockerfiles ici. Pour les autres systèmes Linux, veuillez vous référer aux Dockerfiles pour configurer les bibliothèques dépendantes de CNTK.
Les modèles CNTK avec boucles récursives peuvent être exportés vers des modèles ONNX avec opérations de numérisation.
Pour exporter des modèles de plus de 2 Go au format ONNX, utilisez l'API cntk.Function : save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False) avec 'format' défini sur ModelFormat.ONNX et use_external_files_to_store_parameters défini sur True. Dans ce cas, les paramètres du modèle sont enregistrés dans des fichiers externes. Les modèles exportés doivent être utilisés avec des fichiers de paramètres externes lors de l'évaluation du modèle avec onnxruntime.
2018-11-26.
Netron prend désormais en charge la visualisation des fichiers .model
CNTK v1 et CNTK v2.
2018-09-17. CNTK2.6.0
L'implémentation de la convolution de groupe dans CNTK a été mise à jour. L'implémentation mise à jour s'éloigne de la création d'un sous-graphique pour la convolution de groupe (en utilisant le découpage et l'épissage) et utilise à la place directement les API cuDNN7 et MKL2017. Cela améliore l'expérience à la fois en termes de performances et de taille du modèle.
À titre d'exemple, pour une opération de convolution de groupe unique avec les attributs suivants :
Les numéros de comparaison pour ce nœud unique sont les suivants :
Premier en-tête | Exécutif GPU. temps (en millisecondes, moyenne sur 1 000 exécutions) | Exécuteur du processeur. temps (en millisecondes, moyenne sur 1 000 exécutions) | Taille du modèle (en Ko, format CNTK) |
---|---|---|---|
Ancienne implémentation | 9.349 | 41.921 | 38 |
Nouvelle implémentation | 6.581 | 9.963 | 5 |
Accélération/économies Env. | 30% env. | 65-75% Env. | 87% |
L'implémentation de la convolution séquentielle dans CNTK a été mise à jour. L'implémentation mise à jour crée une couche de convolution séquentielle distincte. Différente de la couche de convolution régulière, cette opération convolue également sur l'axe dynamique (séquence) et filter_shape[0] est appliqué à cet axe. L'implémentation mise à jour prend en charge des cas plus larges, tels que lorsque foulée > 1 pour l'axe de séquence.
Par exemple, une convolution séquentielle sur un lot d’images noir et blanc monocanal. Les images ont la même hauteur fixe de 640, mais chacune avec une largeur de longueurs variables. La largeur est alors représentée par un axe séquentiel. Le rembourrage est activé et les foulées pour la largeur et la hauteur sont de 2.
>>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
>>> x = C.input_variable(**Sequence[Tensor[640]])
>>> x.shape
(640,)
>>> h = f(x)
>>> h.shape
(320,)
>>> f.W.shape
(1, 1, 3, 3)
Il y a un changement radical dans les opérateurs deep_to_space et space_to_degree . Celles-ci ont été mises à jour pour correspondre aux spécifications ONNX, en particulier la permutation de la façon dont la dimension de profondeur est placée sous forme de blocs dans les dimensions spatiales, et vice versa, a été modifiée. Veuillez vous référer aux exemples de documentation mis à jour pour ces deux opérations pour voir le changement.
Ajout de la prise en charge des opérations trigonométriques Tan
et Atan
.
Ajout de la prise en charge de l'attribut alpha
dans ELU op.
Algorithmes de remplissage automatique mis à jour de Convolution
pour produire un remplissage symétrique au meilleur effort sur le CPU, sans affecter les valeurs de sortie de convolution finale. Cette mise à jour augmente la gamme de cas pouvant être couverts par l'API MKL et améliore les performances, par exemple ResNet50.
Il y a un changement radical dans la propriété arguments dans l'API python CNTK. Le comportement par défaut a été mis à jour pour renvoyer les arguments dans l'ordre Python plutôt que dans l'ordre C++. De cette façon, il renverra les arguments dans le même ordre dans lequel ils sont introduits dans les opérations. Si vous souhaitez toujours obtenir les arguments dans l'ordre C++, vous pouvez simplement remplacer l'option globale. Ce changement ne devrait affecter que les opérations suivantes : Times, TransposeTimes et Gemm (interne).
LogSoftMax
mis à jour pour utiliser une implémentation plus stable numériquement.BatchNormalization
de CNTK selon les dernières spécifications.DepthToSpace
et SpaceToDepth
pour correspondre aux spécifications ONNX sur la permutation de la façon dont la dimension de profondeur est placée en tant que dimension de bloc.alpha
dans ELU
ONNX op.Convolution
et Pooling
. Contrairement à avant, ces opérations n’exportent aucune opération Pad
explicite dans aucune situation.ConvolutionTranspose
. Les attributs tels que output_shape
, output_padding
et pads
sont entièrement pris en charge.StopGradient
de CNTK en tant que non-op.Hardmax
/ Softmax
/ LogSoftmax
.Select
.MatMul
op.Gemm
op.MeanVarianceNormalization
de CNTK selon les dernières spécifications.LayerNormalization
de CNTK selon les dernières spécifications.PRelu
de CNTK selon les dernières spécifications.Gather
de CNTK selon les dernières spécifications.ImageScaler
de CNTK selon les dernières spécifications.Reduce
l'exportation/importation des opérations selon les dernières spécifications.Flatten
de CNTK selon les dernières spécifications.Unsqueeze
.size
a la sémantique du diamètre, pas du rayon. Ajout d'une validation si la taille du noyau LRN est supérieure à la taille du canal.Min
/ Max
mise à jour pour gérer les entrées variadiques.La bibliothèque Cntk.Core.Managed a été officiellement convertie en .Net Standard et prend en charge les applications .Net Core et .Net Framework sous Windows et Linux. À partir de cette version, les développeurs .Net devraient pouvoir restaurer les packages CNTK Nuget à l'aide du nouveau fichier de projet de style SDK .Net avec le format de gestion des packages défini sur PackageReference.
Le code C# suivant fonctionne désormais sous Windows et Linux :
>>> var weightParameterName = "weight";
>>> var biasParameterName = "bias";
>>> var inputName = "input";
>>> var outputDim = 2;
>>> var inputDim = 3;
>>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
>>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
>>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
>>>
>>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;
Par exemple, il suffit d'ajouter simplement une clause ItemGroup dans le fichier .csproj d'une application .Net Core : >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
2018-04-16. CNTK2.5.1
Repack CNTK 2.5 avec des bibliothèques tierces incluses dans les bundles (packages Python Wheel)
2018-03-15. CNTK2.5
Changer le format de sortie des détails du profileur pour qu'il soit chrome://tracing
Activez la synchronisation par nœud. Exemple de travail ici
import cntk as C
C . debugging . debug . set_node_timing ( True )
C . debugging . start_profiler () # optional
C . debugging . enable_profiler () # optional
#<trainer|evaluator|function> executions
< trainer | evaluator | function > . print_node_timing ()
C . debugging . stop_profiler ()
Exemple d'affichage des détails du profileur dans chrome://tracing
Améliorations des performances d'inférence du processeur à l'aide de MKL
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
1BitSGD incorporé dans CNTK
1BitSGD
est désormais disponible avec la licence CNTK (licence MIT) sous Source/1BitSGD/
1bitsgd
a été fusionnée avec la cible GPU existanteNouvelle fonction de perte : softmax hiérarchique
Formation distribuée avec plusieurs apprenants
Opérateurs
MeanVarianceNormalization
.Corrections de bugs
CNTKBinaryFormat
lors du franchissement de la limite de balayagempi=no
cntk.convert
dans misc.converter.py
, qui empêche la conversion de réseaux complexes.ONNX
ONNX.checker
.OptimizedRNNStack
de CNTK (LSTM uniquement).MeanVarianceNormalization
.Identity
.LayerNormalization
de CNTK à l'aide de l'opération ONNX MeanVarianceNormalization
.Concat
de CNTK.LeakyReLu
(l'argument 'alpha' est revenu au type double).Divers
find_by_uid()
sous cntk.logging.graph
.2018-02-28. CNTK prend en charge la construction nocturne
Si vous préférez utiliser les derniers bits CNTK du maître, utilisez l'un des packages nocturnes CNTK.
Alternativement, vous pouvez également cliquer sur le badge de construction correspondant pour accéder à la page de construction nocturne.
2018-01-31. CNTK2.4
Points forts:
PO
top_k
: lors de la passe avant, il calcule les valeurs k supérieures (les plus grandes) et les indices correspondants le long de l'axe spécifié. Dans le passage arrière, le dégradé est dispersé vers les k éléments supérieurs (un élément qui ne se trouve pas dans les k supérieurs obtient un gradient nul).gather
prend désormais en charge un argument d'axesqueeze
et expand_dims
pour supprimer et ajouter facilement des axes singletonzeros_like
et ones_like
. Dans de nombreuses situations, vous pouvez simplement compter sur CNTK pour diffuser correctement un simple 0 ou 1, mais parfois vous avez besoin du tenseur réel.depth_to_space
: réorganise les éléments du tenseur d'entrée de la dimension de profondeur en blocs spatiaux. L'utilisation typique de cette opération consiste à implémenter une convolution sous-pixel pour certains modèles d'image à super-résolution.space_to_depth
: réorganise les éléments dans le tenseur d'entrée des dimensions spatiales vers la dimension de profondeur. C'est en grande partie l'inverse de DepthToSpace.sum
: créez une nouvelle instance de fonction qui calcule la somme par élément des tenseurs d'entrée.softsign
: créez une nouvelle instance de fonction qui calcule le softsign élément par élément d'un tenseur d'entrée.asinh
: créez une nouvelle instance de fonction qui calcule l'asinh élément par élément d'un tenseur d'entrée.log_softmax
: créez une nouvelle instance de fonction qui calcule les valeurs normalisées logsoftmax d'un tenseur d'entrée.hard_sigmoid
: créez une nouvelle instance de fonction qui calcule les valeurs normalisées hard_sigmoid d'un tenseur d'entrée.element_and
, element_not
, element_or
, element_xor
opérations logiques par élémentsreduce_l1
: calcule la norme L1 de l'élément du tenseur d'entrée le long des axes fournis.reduce_l2
: calcule la norme L2 de l'élément du tenseur d'entrée le long des axes fournis.reduce_sum_square
: calcule la somme carrée de l'élément du tenseur d'entrée le long des axes fournis.image_scaler
: modification de l’image en mettant à l’échelle ses valeurs individuelles.ONNX
Reshape
pour gérer InferredDimension
.producer_name
et producer_version
aux modèles ONNX.auto_pad
ni pads
ne sont spécifiés dans ONNX Conv
op.Pooling
InputVariable
avec un seul axe batch.Transpose
pour correspondre aux spécifications mises à jour.Conv
, ConvTranspose
et Pooling
pour correspondre aux spécifications mises à jour.Opérateurs
Convolution
CNTK changera pour les groupes > 1. Une implémentation plus optimisée de la convolution de groupe est attendue dans la prochaine version.Convolution
.Convolution binaire aux halogénures
Cntk.BinaryConvolution.so/dll
qui peut être utilisée avec le module netopt
. La bibliothèque contient des opérateurs de convolution binaire optimisés qui fonctionnent mieux que les opérateurs de convolution binarisés basés sur Python. Pour activer Halide dans la build, veuillez télécharger la version Halide et définir la variable d'environnement HALIDE_PATH
avant de démarrer une build. Sous Linux, vous pouvez utiliser ./configure --with-halide[=directory]
pour l'activer. Pour plus d'informations sur l'utilisation de cette fonctionnalité, veuillez vous référer à How_to_use_network_optimization.Pour en savoir plus, consultez les notes de version. Obtenez la version sur la page Versions CNTK.