Chatten | Windows-Build-Status | Linux-Build-Status |
---|---|---|
Das Microsoft Cognitive Toolkit (https://cntk.ai) ist ein einheitliches Deep-Learning-Toolkit, das neuronale Netze als eine Reihe von Rechenschritten über einen gerichteten Graphen beschreibt. In diesem gerichteten Graphen stellen Blattknoten Eingabewerte oder Netzwerkparameter dar, während andere Knoten Matrixoperationen an ihren Eingaben darstellen. Mit CNTK können Benutzer gängige Modelltypen wie Feed-Forward-DNNs, Faltungsnetze (CNNs) und wiederkehrende Netzwerke (RNNs/LSTMs) einfach realisieren und kombinieren. Es implementiert stochastisches Gradientenabstiegslernen (SGD, Error Backpropagation) mit automatischer Differenzierung und Parallelisierung über mehrere GPUs und Server hinweg. CNTK ist seit April 2015 unter einer Open-Source-Lizenz verfügbar. Wir hoffen, dass die Community CNTK nutzen wird, um Ideen durch den Austausch von Open-Source-Arbeitscode schneller auszutauschen.
Wenn Sie lieber die neuesten CNTK-Bits vom Master verwenden möchten, verwenden Sie eines der nächtlichen CNTK-Pakete:
Mit den folgenden Ressourcen können Sie mehr über die Nutzung und Mitwirkung an CNTK erfahren:
Liebe Community,
Mit unseren fortlaufenden Beiträgen zu ONNX und der ONNX Runtime haben wir die Interoperabilität innerhalb des KI-Framework-Ökosystems und den Zugriff auf leistungsstarke, plattformübergreifende Inferenzfunktionen sowohl für traditionelle ML-Modelle als auch für tiefe neuronale Netze erleichtert. In den letzten Jahren hatten wir das Privileg, solche wichtigen Open-Source-Projekte für maschinelles Lernen zu entwickeln, darunter das Microsoft Cognitive Toolkit, das es seinen Benutzern ermöglicht hat, branchenweite Fortschritte im Bereich Deep Learning in großem Maßstab zu nutzen.
Die heutige Version 2.7 wird die letzte Hauptversion von CNTK sein. Möglicherweise verfügen wir über einige spätere Nebenversionen zur Fehlerbehebung, diese werden jedoch von Fall zu Fall bewertet. Es gibt keine Pläne für die Entwicklung neuer Funktionen nach dieser Veröffentlichung.
Die Version CNTK 2.7 bietet volle Unterstützung für ONNX 1.4.1, und wir ermutigen diejenigen, die ihre CNTK-Modelle operationell machen möchten, die Vorteile von ONNX und der ONNX Runtime zu nutzen. Auch in Zukunft können Benutzer die sich entwickelnden ONNX-Innovationen über die Anzahl der Frameworks, die sie unterstützen, weiterhin nutzen. Benutzer können beispielsweise ONNX-Modelle nativ aus PyTorch exportieren oder TensorFlow-Modelle mit dem TensorFlow-ONNX-Konverter in ONNX konvertieren.
Wir sind unglaublich dankbar für die Unterstützung, die wir von Mitwirkenden und Benutzern im Laufe der Jahre seit der ersten Open-Source-Veröffentlichung von CNTK erhalten haben. CNTK hat es sowohl Microsoft-Teams als auch externen Benutzern ermöglicht, komplexe und umfangreiche Arbeitslasten in allen Arten von Deep-Learning-Anwendungen auszuführen, wie beispielsweise historische Durchbrüche in der Spracherkennung, die von Microsoft Speech-Forschern, den Urhebern des Frameworks, erzielt wurden.
Da ONNX zunehmend zur Bereitstellung von Modellen eingesetzt wird, die in Microsoft-Produkten wie Bing und Office verwendet werden, widmen wir uns der Synthese von Innovationen aus der Forschung mit den strengen Anforderungen der Produktion, um das Ökosystem voranzubringen.
Unser Ziel ist es vor allem, Innovationen im Deep Learning über die Software- und Hardware-Stacks hinweg so offen und zugänglich wie möglich zu machen. Wir werden hart daran arbeiten, sowohl die bestehenden Stärken von CNTK als auch neue, hochmoderne Forschungsergebnisse in andere Open-Source-Projekte einzubringen, um die Reichweite solcher Technologien wirklich zu erweitern.
Mit Dankbarkeit,
– Das CNTK-Team
Dieses Projekt hat den Microsoft Open Source Verhaltenskodex übernommen. Weitere Informationen finden Sie in den FAQ zum Verhaltenskodex oder wenden Sie sich bei weiteren Fragen oder Kommentaren an [email protected].
Weitere Neuigkeiten finden Sie im offiziellen Projekt-Feed
29.03.2019. CNTK 2.7.0
So richten Sie die Build- und Laufzeitumgebung unter Windows ein:
Um die Build- und Laufzeitumgebung unter Linux mit Docker einzurichten, erstellen Sie bitte hier das Unbuntu 16.04 Docker-Image mit Dockerfiles. Für andere Linux-Systeme lesen Sie bitte die Docker-Dateien, um abhängige Bibliotheken für CNTK einzurichten.
CNTK-Modelle mit rekursiven Schleifen können mit Scan-Ops in ONNX-Modelle exportiert werden.
Um Modelle mit mehr als 2 GB im ONNX-Format zu exportieren, verwenden Sie die cntk.Function-API: save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False), wobei „format“ auf ModelFormat.ONNX und use_external_files_to_store_parameters auf „True“ festgelegt ist. In diesem Fall werden Modellparameter in externen Dateien gespeichert. Exportierte Modelle müssen mit externen Parameterdateien verwendet werden, wenn eine Modellevaluierung mit onnxruntime durchgeführt wird.
26.11.2018.
Netron unterstützt jetzt die Visualisierung von CNTK v1- und CNTK v2 .model
Dateien.
17.09.2018. CNTK 2.6.0
Die Implementierung der Gruppenfaltung in CNTK wurde aktualisiert. Die aktualisierte Implementierung verzichtet auf die Erstellung eines Untergraphen für die Gruppenfaltung (mithilfe von Slicing und Splicing) und verwendet stattdessen direkt die APIs cuDNN7 und MKL2017. Dies verbessert das Erlebnis sowohl hinsichtlich der Leistung als auch der Modellgröße.
Als Beispiel für eine einzelne Gruppenfaltungsoperation mit den folgenden Attributen:
Die Vergleichszahlen für diesen einzelnen Knoten lauten wie folgt:
Erster Header | GPU-Exec. Zeit (in Millisekunden, durchschnittlich 1000 Läufe) | CPU-Exec. Zeit (in Millisekunden, durchschnittlich 1000 Läufe) | Modellgröße (in KB, CNTK-Format) |
---|---|---|---|
Alte Implementierung | 9.349 | 41.921 | 38 |
Neue Implementierung | 6.581 | 9.963 | 5 |
Beschleunigung/Einsparung ca. | 30 % ca. | 65-75 % Ca. | 87 % |
Die Implementierung der sequentiellen Faltung in CNTK wurde aktualisiert. Die aktualisierte Implementierung erstellt eine separate sequentielle Faltungsschicht. Anders als bei der regulären Faltungsschicht wird bei dieser Operation auch die dynamische Achse (Sequenz) gefaltet, und filter_shape[0] wird auf diese Achse angewendet. Die aktualisierte Implementierung unterstützt umfassendere Fälle, beispielsweise wenn Schritt > 1 für die Sequenzachse ist.
Zum Beispiel eine sequentielle Faltung über einen Stapel von Einkanal-Schwarzweißbildern. Die Bilder haben die gleiche feste Höhe von 640, aber jeweils eine Breite mit variabler Länge. Die Breite wird dann durch die sequentielle Achse dargestellt. Die Polsterung ist aktiviert und die Schritte für Breite und Höhe betragen 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)
Es gibt eine bahnbrechende Änderung bei den Operatoren Depth_to_space und Space_to_ Depth . Diese wurden aktualisiert, um der ONNX-Spezifikation zu entsprechen, insbesondere wurde die Permutation für die Platzierung der Tiefendimension als Blöcke in den räumlichen Dimensionen und umgekehrt geändert. Bitte sehen Sie sich die aktualisierten Dokumentbeispiele für diese beiden Operationen an, um die Änderung zu sehen.
Unterstützung für trigonometrische Operationen Tan
und Atan
hinzugefügt.
Unterstützung für alpha
-Attribut in ELU op hinzugefügt.
Aktualisierte automatische Auffüllalgorithmen der Convolution
um symmetrisches Auffüllen mit bestmöglicher CPU-Leistung zu erzeugen, ohne die endgültigen Ausgabewerte der Faltung zu beeinträchtigen. Dieses Update erweitert den Bereich der Fälle, die von der MKL-API abgedeckt werden könnten, und verbessert die Leistung, z. B. ResNet50.
Es gibt eine bahnbrechende Änderung in der Argumenteigenschaft in der CNTK-Python-API. Das Standardverhalten wurde aktualisiert, um Argumente in Python-Reihenfolge statt in C++-Reihenfolge zurückzugeben. Auf diese Weise werden Argumente in derselben Reihenfolge zurückgegeben, in der sie in ops eingespeist werden. Wenn Sie weiterhin Argumente in der C++-Reihenfolge erhalten möchten, können Sie einfach die globale Option überschreiben. Diese Änderung sollte sich nur auf die folgenden Operationen auswirken: Times, TransposeTimes und Gemm (intern).
LogSoftMax
wurde aktualisiert, um eine numerisch stabilere Implementierung zu verwenden.BatchNormalization
op export/import von CNTK wurde auf die neueste Spezifikation aktualisiert.DepthToSpace
und SpaceToDepth
wurden aktualisiert, um den ONNX-Spezifikationen für die Permutation für die Platzierung der Tiefendimension als Blockdimension zu entsprechen.alpha
-Attributen in ELU
ONNX op hinzugefügt.Convolution
und Pooling
Exports. Anders als zuvor exportieren diese Operationen in keiner Situation eine explizite Pad
-Operation.ConvolutionTranspose
Exports und -Imports. Attribute wie output_shape
, output_padding
und pads
werden vollständig unterstützt.StopGradient
von CNTK als No-Op hinzugefügt.Hardmax
/ Softmax
/ LogSoftmax
wurde korrigiert.Select
op export“ hinzugefügt.MatMul
op.Gemm
op.MeanVarianceNormalization
op/export/import wurde auf die neueste Spezifikation aktualisiert.LayerNormalization
Op-Export/Import wurde auf die neueste Spezifikation aktualisiert.PRelu
op export/import wurde auf die neueste Spezifikation aktualisiert.Gather
op Export/Import wurde auf die neueste Spezifikation aktualisiert.ImageScaler
Op-Export/Import von CNTK wurde auf die neueste Spezifikation aktualisiert.Reduce
des Betriebsexports/-imports wurde auf die neueste Spezifikation aktualisiert.Flatten
op-Export/Import wurde auf die neueste Spezifikation aktualisiert.Unsqueeze
op hinzugefügt.size
die Semantik des Durchmessers und nicht des Radius hat. Validierung hinzugefügt, wenn die LRN-Kernelgröße größer als die Kanalgröße ist.Min
/ Max
-Importimplementierung aktualisiert, um variadische Eingaben zu verarbeiten.Die Cntk.Core.Managed-Bibliothek wurde offiziell auf .Net Standard konvertiert und unterstützt .Net Core- und .Net Framework-Anwendungen sowohl unter Windows als auch unter Linux. Ab dieser Version sollten .Net-Entwickler in der Lage sein, CNTK-Nuget-Pakete mithilfe einer neuen Projektdatei im .Net SDK-Stil wiederherzustellen, wobei das Paketverwaltungsformat auf PackageReference eingestellt ist.
Der folgende C#-Code funktioniert jetzt sowohl unter Windows als auch unter 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;
Beispielsweise reicht das einfache Hinzufügen einer ItemGroup-Klausel in der .csproj-Datei einer .Net Core-Anwendung aus: >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
16.04.2018. CNTK 2.5.1
CNTK 2.5 mit in den Bundles enthaltenen Bibliotheken von Drittanbietern neu verpacken (Python-Wheel-Pakete)
15.03.2018. CNTK 2.5
Ändern Sie das Ausgabeformat der Profilerdetails in chrome://tracing
Aktivieren Sie das Timing pro Knoten. Arbeitsbeispiel hier
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 ()
Beispiel einer Profiler-Detailansicht in chrome://tracing
Leistungsverbesserungen bei der CPU-Inferenz mithilfe von MKL
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
ein-/ausgeschaltet werden.1BitSGD in CNTK integriert
1BitSGD
Quellcode ist jetzt mit CNTK-Lizenz (MIT-Lizenz) unter Source/1BitSGD/
verfügbar.1bitsgd
Build-Ziel wurde mit dem vorhandenen GPU-Ziel zusammengeführtNeue Verlustfunktion: hierarchisches Softmax
Verteiltes Training mit mehreren Lernenden
Betreiber
MeanVarianceNormalization
hinzugefügt.Fehlerbehebungen
CNTKBinaryFormat
Deserializer beim Überschreiten der Sweep-Grenze behobenmpi=no
cntk.convert
API in misc.converter.py
behoben, der die Konvertierung komplexer Netzwerke verhindert.ONNX
ONNX.checker
kompatibel.OptimizedRNNStack
-Operator von CNTK hinzugefügt (nur LSTM).MeanVarianceNormalization
hinzugefügt.Identity
hinzugefügt.LayerNormalization
Layers von CNTK mit ONNX MeanVarianceNormalization
op hinzugefügt.Concat
Operator von CNTK optional.LeakyReLu
(Argument „Alpha“ wurde auf den Typ „Double“ zurückgesetzt).Sonstiges
cntk.logging.graph
wurde eine neue API find_by_uid()
hinzugefügt.28.02.2018. CNTK unterstützt den nächtlichen Build
Wenn Sie lieber die neuesten CNTK-Bits vom Master verwenden möchten, verwenden Sie eines der CNTK-Nightly-Pakete.
Alternativ können Sie auch auf das entsprechende Build-Badge klicken, um zur nächtlichen Build-Seite zu gelangen.
31.01.2018. CNTK 2.4
Höhepunkte:
OPs
top_k
-Operation: Im Vorwärtsdurchlauf werden die obersten (größten) k-Werte und die entsprechenden Indizes entlang der angegebenen Achse berechnet. Beim Rückwärtsdurchlauf wird der Gradient auf die oberen k Elemente gestreut (ein Element, das nicht zu den obersten k gehört, erhält einen Nullgradienten).gather
-Vorgang unterstützt jetzt ein Achsenargumentsqueeze
und expand_dims
-Operationen zum einfachen Entfernen und Hinzufügen von Singleton-Achsenzeros_like
und ones_like
Operationen. In vielen Situationen können Sie sich einfach darauf verlassen, dass CNTK eine einfache 0 oder 1 korrekt sendet, aber manchmal benötigen Sie den tatsächlichen Tensor.depth_to_space
: Ordnet Elemente im Eingabetensor von der Tiefendimension in räumliche Blöcke um. Typische Verwendung dieser Operation ist die Implementierung der Subpixel-Faltung für einige hochauflösende Bildmodelle.space_to_depth
: Ordnet Elemente im Eingabetensor von den räumlichen Dimensionen in die Tiefendimension um. Es ist größtenteils das Gegenteil von DepthToSpace.sum
: Erstellen Sie eine neue Funktionsinstanz, die die elementweise Summe der Eingabetensoren berechnet.softsign
-Operation: Erstellen Sie eine neue Funktionsinstanz, die das elementweise Softsign eines Eingabetensors berechnet.asinh
-Operation: Erstellen Sie eine neue Funktionsinstanz, die elementweise den Asinh eines Eingabetensors berechnet.log_softmax
-Vorgang: Erstellen Sie eine neue Funktionsinstanz, die die logsoftmax-normalisierten Werte eines Eingabetensors berechnet.hard_sigmoid
-Operation: Erstellen Sie eine neue Funktionsinstanz, die die hard_sigmoid-normalisierten Werte eines Eingabetensors berechnet.element_and
, element_not
, element_or
, element_xor
elementweise logische Operationenreduce_l1
: Berechnet die L1-Norm des Elements des Eingabetensors entlang der bereitgestellten Achsen.reduce_l2
: Berechnet die L2-Norm des Elements des Eingabetensors entlang der bereitgestellten Achsen.reduce_sum_square
: Berechnet das Summenquadrat des Elements des Eingabetensors entlang der bereitgestellten Achsen.image_scaler
-Operation: Veränderung des Bildes durch Skalierung seiner einzelnen Werte.ONNX
Reshape
op wurde aktualisiert, um InferredDimension
zu verarbeiten.producer_name
und producer_version
zu ONNX-Modellen.Conv
op weder auto_pad
noch pads
atrribute angegeben sind.Pooling
Operationsserialisierung behobenInputVariable
mit nur einer Batch-Achse.Transpose
op, um den aktualisierten Spezifikationen zu entsprechen.Conv
, ConvTranspose
und Pooling
Operationen, um den aktualisierten Spezifikationen zu entsprechen.Betreiber
Convolution
ändert sich für Gruppen > 1. Eine optimierte Implementierung der Gruppenfaltung wird in der nächsten Version erwartet.Convolution
.Binäre Halogenidfaltung
Cntk.BinaryConvolution.so/dll
zu erstellen, die mit dem netopt
-Modul verwendet werden kann. Die Bibliothek enthält optimierte binäre Faltungsoperatoren, die eine bessere Leistung als die auf Python basierenden binarisierten Faltungsoperatoren erzielen. Um Halide im Build zu aktivieren, laden Sie bitte die Halide-Version herunter und legen Sie die Umgebungsvariable HALIDE_PATH
fest, bevor Sie einen Build starten. Unter Linux können Sie ./configure --with-halide[=directory]
verwenden, um es zu aktivieren. Weitere Informationen zur Verwendung dieser Funktion finden Sie unter How_to_use_network_optimization.Weitere Informationen finden Sie in den Versionshinweisen. Holen Sie sich die Veröffentlichung von der CNTK-Releases-Seite.