DE112020003127T5 - Erweiterung von dynamischem Verarbeitungselement-Array - Google Patents

Erweiterung von dynamischem Verarbeitungselement-Array Download PDF

Info

Publication number
DE112020003127T5
DE112020003127T5 DE112020003127.6T DE112020003127T DE112020003127T5 DE 112020003127 T5 DE112020003127 T5 DE 112020003127T5 DE 112020003127 T DE112020003127 T DE 112020003127T DE 112020003127 T5 DE112020003127 T5 DE 112020003127T5
Authority
DE
Germany
Prior art keywords
sub
operations
feature maps
input
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020003127.6T
Other languages
English (en)
Inventor
Randy Renfu Huang
Ron Diamant
Richard John Heaton
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of DE112020003127T5 publication Critical patent/DE112020003127T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Image Analysis (AREA)

Abstract

Ein computerimplementiertes Verfahren beinhaltet ein Empfangen eines Modells eines neuronalen Netzes, das eine Tensoroperation beinhaltet, und ein Teilen der Tensoroperation in Unteroperationen. Die Unteroperationen beinhalten mindestens zwei Unteroperationen, die keine Datenabhängigkeit zwischen den beiden Unteroperationen aufweisen. Das computerimplementierte Verfahren beinhaltet ferner ein Zuweisen einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine, ein Zuweisen einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine und ein Erzeugen von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine. Auf der Grundlage eines Ergebnisses der ersten Unteroperation, eines Ergebnisses der zweiten Unteroperation oder beider wird dann eine Schlussfolgerung gezogen. Die erste Rechen-Engine und die zweite Rechen-Engine befinden sich in derselben integrierten Schaltungsvorrichtung oder in zwei unterschiedlichen integrierten Schaltungsvorrichtungen.

Description

  • ALLGEMEINER STAND DER TECHNIK
  • Künstliche neuronale Netze sind Rechensysteme mit einer Architektur basierend auf biologischen neuronalen Netzen. Künstliche neuronale Netze können mithilfe von Trainingsdaten trainiert werden, um zu lernen, wie eine bestimmte Aufgabe durchgeführt wird, wie etwa das Identifizieren oder Klassifizieren von physischen Objekten, Aktivitäten, Schriftzeichen usw. aus Bildern oder Videos. Ein künstliches neuronales Netz kann mehrere Schichten von Verarbeitungsknoten beinhalten. Jeder Verarbeitungsknoten auf einer Schicht kann Berechnungen an Eingabedaten durchführen, die von Verarbeitungsknoten auf der vorhergehenden Schicht erzeugt wurden, um Ausgabedaten zu erzeugen. Zum Beispiel kann ein Verarbeitungsknoten einen Satz arithmetischer Operationen wie etwa Multiplikationen und Additionen durchführen, um eine Zwischenausgabe zu erzeugen, oder Nachverarbeitungsoperationen an der Zwischenausgabe durchführen.
  • Ein komplexes künstliches neuronales Netz, wie etwa ein tiefes neuronales Netz, kann Tausende oder mehr von Verarbeitungsknoten und Millionen oder mehr von Parametern beinhalten, und somit kann jede Schlussfolgerung massive Berechnungen beinhalten. In einem neuronalen ResNet-50-Netz kann jede Schlussfolgerung etwa 8 Milliarden arithmetische Operationen beinhalten. Somit kann die Latenz zum Ziehen einer Schlussfolgerung lang sein, da die integrierten Schaltungen zum Implementieren des neuronalen Netzes begrenzte Ressourcen beinhalten können, so dass viele Operationen (z. B. Faltungs- oder andere Tensoroperationen) möglicherweise auf eine serielle Weise durchgeführt werden müssen.
  • Figurenliste
  • Verschiedene Ausführungsformen gemäß der vorliegenden Offenbarung werden unter Bezugnahme auf die Zeichnungen beschrieben, in denen Folgendes gilt:
    • 1 veranschaulicht ein Beispiel eines mehrschichtigen künstlichen neuronalen Netzes;
    • 2 veranschaulicht ein Beispiel für ein neuronales Faltungsnetz (convolutional neural network - CNN);
    • 3A und 3B veranschaulichen Faltungsoperationen, die an einem Eingabe-Pixel-Array durch ein Beispiel einer Faltungsschicht in einem neuronalen Faltungsnetz durchgeführt werden;
    • 4A-4E veranschaulichen Beispiele für Faltungs-, nichtlineare Aktivierungs- und Pooling-Operationen, die an einem Beispiel von Eingabe-Pixeldaten durchgeführt werden;
    • 5 veranschaulicht ein Beispiel eines Modells für eine Faltungsschicht eines neuronalen Faltungsnetzes;
    • 6 veranschaulicht ein Beispiel einer Faltungsoperation, die ein Batch (N = 1) von C Kanälen von Eingabedaten und M Sätzen von C Filtern umfasst;
    • 7 ist ein vereinfachtes Blockdiagramm, das ein Beispiel einer integrierten Schaltungsvorrichtung zum Durchführen von neuronalen Netzoperationen gemäß bestimmten Ausführungsformen veranschaulicht;
    • 8 veranschaulicht ein vereinfachtes Beispiel einer Rechen-Engine, die ein Verarbeitungselement-Array gemäß bestimmten Ausführungsformen beinhaltet;
    • 9 veranschaulicht ein vereinfachtes Beispiel einer gewichtsstationären Faltung unter Verwendung eines Beispiels einer Rechen-Engine mit einem Array von Verarbeitungselementen gemäß bestimmten Ausführungsformen;
    • 10A veranschaulicht eine Reihe von Operationen zum Ziehen einer Schlussfolgerung unter Verwendung eines Modells eines neuronalen Netzes;
    • 10B veranschaulicht ein Beispiel für das Ziehen paralleler Schlussfolgerungen unter Verwendung mehrerer Rechen-Engines;
    • 11 veranschaulicht Beispiele von Operationen, die von mehreren Rechen-Engines durchgeführt werden, um parallele Schlussfolgerungen zu ziehen;
    • 12 veranschaulicht ein Beispiel für das Ziehen einer Schlussfolgerung unter Verwendung mehrerer Rechen-Engines durch Zuweisen von Operationen eines neuronalen Netzes zu den mehreren Rechen-Engines gemäß bestimmten Ausführungsformen;
    • 13 veranschaulicht Beispiele von Operationen, die von mehreren Rechen-Engines durchgeführt werden, um eine Schlussfolgerung gemäß bestimmten Ausführungsformen zu ziehen;
    • 14 veranschaulicht ein Beispiel für das Ziehen einer Schlussfolgerung unter Verwendung mehrerer Rechen-Engines durch Aufteilen einer Operation eines neuronalen Netzes in Unteroperationen, die von den mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen;
    • 15 veranschaulicht Beispiele von Operationen, die von mehreren Rechen-Engines durchgeführt werden, um eine Schlussfolgerung gemäß bestimmten Ausführungsformen zu ziehen;
    • 16 veranschaulicht ein Beispiel für das Ziehen einer Schlussfolgerung unter Verwendung mehrerer Rechen-Engines durch Aufteilen einer Operation eines neuronalen Netzes in Unteroperationen, die von den mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden können;
    • 17 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen;
    • 18 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen;
    • 19 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen;
    • 20 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen;
    • 21 ist ein Ablaufdiagramm, das ein Beispiel eines Verfahrens zum Beschleunigen einer Tensoroperation durch paralleles Durchführen von Unteroperationen der Tensoroperation auf mehreren Rechen-Engines gemäß bestimmten Ausführungsformen veranschaulicht;
    • 22A veranschaulicht ein Beispiel eines Transformers, der die hierin offenbarten Techniken gemäß bestimmten Ausführungsformen verwenden kann; 22B veranschaulicht ein Beispiel eines Skalarprodukt-Attention-Blocks in einem Transformer; 22C veranschaulicht ein Beispiel einer Multi-Head-Attention-Unterschicht, die in dem Encoder und Decoder eines Transformers verwendet wird,
    • 23 veranschaulicht ein Beispiel ein Modell von bidirektionalen Encoder-Darstellungen von Transformern (bidirectional encoder representations from Transformers - BERT), das einige der hierin offenbarten Techniken gemäß bestimmten Ausführungsformen verwenden kann;
    • 24 beinhaltet ein Blockdiagramm eines Beispiels eines Hostsystems;
    • 25 beinhaltet ein Blockdiagramm eines Beispiels einer Beschleunigungs-Engine; und
    • 26 beinhaltet ein Diagramm eines Beispiels eines Netzes.
  • DETAILLIERTE BESCHREIBUNG
  • Hierin offenbarte Techniken beziehen sich allgemein auf künstliche neuronale Netze und insbesondere auf die Beschleunigung von Schlussfolgerungen basierend auf einem Modell eines neuronalen Netzes unter Verwendung mehrerer Rechen-Engines, die Unteroperationen einer Operation eines neuronalen Netzes parallel durchführen.
  • Ein künstliches neuronales Netz kann mehrere Verarbeitungsknoten beinhalten, die auf zwei oder mehr Schichten angeordnet sind, wobei Verarbeitungsknoten auf einer Schicht mit Verarbeitungsknoten auf einer anderen Schicht verbunden sein können. Jeder Verarbeitungsknoten auf einer Schicht kann einen Strom von Eingabedatenelementen empfangen, jedes Eingabedatenelement mit einem Gewicht multiplizieren, eine gewichtete Summe der Eingabedatenelemente berechnen und die gewichtete Summe an die nächste Schicht weiterleiten. Ein künstliches neuronales Netz kann Tausende oder mehr Verarbeitungsknoten und Millionen oder mehr Gewichte und Eingabedatenelemente beinhalten. In einigen neuronalen Netzen, wie etwa einem neuronalen Faltungsnetz, einem Transformer mit Multi-Head-Attention-Modellen, einem mehrschichtigen Perzeptron oder Modellen anderer neuronaler Netze auf der Grundlage von Tensoroperationen, können große Eingabe-Tensoren verarbeitet werden, um neue Ausgabe-Tensoren zu erzeugen (z. B. ein Tensorprodukt). Somit können ein großer Speicherplatz und eine Verarbeitungseinheit mit einer hohen parallelen Verarbeitungsleistung benötigt werden. Die zugrundeliegende Hardware zum Implementieren des neuronalen Netzes kann jedoch begrenzte Ressourcen aufweisen, wie beispielsweise eine begrenzte Anzahl von Verarbeitungselementen und/oder begrenzten Speicherplatz oder Speicherbandbreite. Daher müssen einige Tensoroperationen für das neuronale Netz möglicherweise jeweils auf eine serielle Weise durchgeführt werden, was die zum Durchführen der Operationen erforderliche Zeitdauer erheblich verlängern kann, und somit kann die Latenzzeit zum Ziehen einer Schlussfolgerung länger als gewünscht sein, zum Beispiel für einige Echtzeitanwendungen.
  • Gemäß bestimmten Ausführungsformen kann eine Tensoroperation, wie etwa eine Faltungsoperation, eine Multi-Head-Attention-Operation oder eine Mehrschicht-Perzeptron-Operation, auf bestimmte Weise in Unteroperationen aufgeteilt werden, die durch mehrere Rechen-Engines parallel durchgeführt werden, so dass jede Rechen-Engine eine Unteroperation durchführen kann, um einen Teil der Endergebnisse (z. B. einen Ausgabe-Tensor) der Tensoroperation in einem kürzeren Zeitraum zu erzeugen. Die von den Unteroperationen erzeugten Teile des Ausgabe-Tensors können dazu verwendet werden, eine frühe Schlussfolgerung zu ziehen, und können ohne zusätzliche arithmetische Operationen verkettet werden, um den Ausgabe-Tensor zu bilden. In einem Beispiel kann jede Rechen-Engine eine Faltungsoperation an einem Teil der Ausgabe-Feature-Maps in einem kürzeren Zeitraum durchführen, um einen Teil von jeder der Ausgabe-Feature-Maps in der Tensor-Ausgabe zu erzeugen. In einem anderen Beispiel kann jede Rechen-Engine eine Faltungsoperation an den Ausgabe-Feature-Maps unter Verwendung eines Teils der Filter für einen Teil der Ausgabekanäle in einem kürzeren Zeitraum durchführen, um einen Bruchteil der Anzahl von Ausgabe-Feature-Maps zu erzeugen. Die Teile der Ausgabe-Feature-Maps können einzeln oder in Kombination verwendet werden, um eine frühere Vorhersage oder Entscheidung zu treffen. Auf diese Weise kann die Latenzzeit für eine Schlussfolgerung deutlich reduziert werden, beispielsweise um einen Faktor der Anzahl der Rechen-Engines, die für die parallele Durchführung der Teiloperationen verwendet werden. Dies kann auch effektiv eine Rechen-Engine mit höherer Rechenleistung erzeugen.
  • In der folgenden Beschreibung werden verschiedene Beispiele beschrieben. Zu Zwecken der Erläuterung werden spezifische Konfigurationen und Details dargelegt, um ein umfassendes Verständnis der Beispiele bereitzustellen. Dem Fachmann ist jedoch ersichtlich, dass die Beispiele ohne die konkreten Details umgesetzt werden können. Ferner können hinlänglich bekannte Merkmale weggelassen oder vereinfacht werden, damit die beschriebenen Ausführungsformen nicht unklar werden. Die Figuren und die Beschreibung sollen nicht einschränkend sein. Die Ausdrücke und Wendungen, die in dieser Offenbarung gebraucht wurden, werden als Ausdrücke der Beschreibung und nicht der Einschränkung verwendet, und es wird bei der Verwendung solcher Ausdrücke und Wendungen nicht die Absicht verfolgt, jegliche Äquivalente der gezeigten und beschriebenen Merkmale oder Teile davon auszuschließen. Das Wort „Beispiel“ wird hierin so verwendet, dass es „als Beispiel, Exempel oder Veranschaulichung dienend“ bedeutet. Eine als „beispielhaft“ beschriebene Ausführungsform ist nicht zwangsläufig als gegenüber anderen Ausführungsformen bevorzugt oder vorteilhaft auszulegen.
  • Künstliche neuronale Netze (auch als „neuronale Netze“ bezeichnet) wurden in der Forschung zum maschinellen Lernen und in industriellen Anwendungen verwendet und haben viele bahnbrechende Ergebnisse beispielsweise in der Bilderkennung, Spracherkennung, Computer-Vision, Textverarbeitung und dergleichen erzielt. Die Grundeinheit der Berechnung in einem neuronalen Netz ist das Neuron (auch als ein Knoten bezeichnet). Ein Neuron kann eine Eingabe von einigen anderen Neuronen oder einer externen Quelle empfangen und eine Ausgabe berechnen. Jede Eingabe kann ein zugeordnetes Gewicht (w) aufweisen, das basierend auf der Wichtigkeit der Eingabe relativ zu anderen Eingaben zugewiesen werden kann. Das Neuron kann auch eine Funktion (z. B. eine nichtlineare Funktion) auf die gewichtete Summe seiner Eingaben anwenden.
  • Ein künstliches neuronales Netz kann mehrere Verarbeitungsknoten beinhalten, die auf zwei oder mehr Schichten angeordnet sind, wobei Verarbeitungsknoten auf einer Schicht mit Verarbeitungsknoten auf einer anderen Schicht verbunden sein können. Die Verarbeitungsknoten können in Schichten geteilt werden, einschließlich beispielsweise einer Eingabeschicht, einer Anzahl von Zwischenschichten (auch als verdeckte Schichten bekannt) und einer Ausgabeschicht. Jeder Verarbeitungsknoten auf einer Schicht (z. B. einer Eingabeschicht, einer Zwischenschicht usw.) kann einen sequentiellen Strom von Eingabedatenelementen empfangen, jedes Eingabedatenelement mit einem Gewicht multiplizieren, eine gewichtete Summe der Eingabedatenelemente berechnen und die gewichtete Summe an die nächste Schicht weiterleiten. Ein künstliches neuronales Netz, wie etwa ein neuronales Faltungsnetz, kann Tausende oder mehr Verarbeitungsknoten und Millionen oder mehr Gewichte und Eingabedatenelemente beinhalten.
  • Ein neuronales Feedforward-Netz ist ein Typ eines künstlichen neuronalen Netzes. Es kann mehrere Knoten beinhalten, die in Schichten angeordnet sind. Knoten aus benachbarten Schichten können Verbindungen oder Kanten zwischen sich haben. Diesen Verbindungen können entsprechende Gewichte zugeordnet sein. Informationen können von den Eingabeknoten, durch die verdeckten Knoten (sofern vorhanden) und zu den Ausgabeknoten fließen. Es gibt keine Kreise oder Schleifen im Netz. Im Gegensatz dazu können rekurrente neuronale Netze (z. B. ein Netz mit langem Kurzzeitgedächtnis (long short-term memory - LSTM)) Verbindungen zwischen den Knoten beinhalten, um einen Kreis oder eine Schleife zu bilden.
  • 1 veranschaulicht ein Beispiel für ein mehrschichtiges neuronales Netz 100. Das mehrschichtige neuronale Netz 100 kann eine Eingabeschicht 110, eine verdeckte Schicht (oder Zwischenschicht) 120 und eine Ausgabeschicht 130 beinhalten. In vielen Implementierungen kann das mehrschichtige neuronale Netz 100 zwei oder mehr verdeckte Schichten beinhalten und kann als ein tiefes neuronales Netz bezeichnet werden. Ein neuronales Netz mit einer einzelnen verdeckten Schicht kann im Allgemeinen ausreichend sein, um eine beliebige kontinuierliche Funktion zu modellieren. Ein solches Netz kann jedoch im Vergleich zu einem neuronalen Netz mit mehreren verdeckten Schichten eine exponentiell größere Anzahl von Knoten benötigen. Es hat sich gezeigt, dass ein tieferes neuronales Netz so trainiert werden kann, dass es viel besser funktioniert als ein vergleichsweise flaches Netz.
  • Die Eingabeschicht 110 kann eine Vielzahl von Eingabeknoten (z. B. Knoten 112, 114 und 116) beinhalten, die Informationen (z. B. Eingabedaten) von der Außenwelt an das Netz liefern können. Die Eingabeknoten können die Informationen an die nächste Schicht weitergeben und von den Eingabeknoten kann keine Berechnung durchgeführt werden. Die verdeckte Schicht 120 kann eine Vielzahl von Knoten beinhalten, wie etwa die Knoten 122, 124 und 126. Die Knoten in der verdeckten Schicht dürfen keine direkte Verbindung zur Außenwelt haben (daher der Name „verdeckt“). Sie können Berechnungen durchführen und Informationen von den Eingabeknoten an die nächsten Schichten (z. B. eine andere verdeckte Schicht oder Ausgabeschicht 130) übertragen. Während ein neuronales Feedforward-Netz eine einzelne Eingabeschicht und eine einzelne Ausgabeschicht aufweisen kann, kann es keine oder mehrere verdeckte Schichten aufweisen. Die Ausgabeschicht 130 kann mehrere Ausgabeknoten beinhalten, die für das Berechnen und Übertragen von Informationen vom Netz an die Außenwelt verantwortlich sind, wie etwa das Erkennen bestimmter Objekte oder Aktivitäten oder das Bestimmen einer Bedingung oder einer Aktion.
  • Wie in 1 gezeigt, kann in einem neuronalen Feedforward-Netz ein Knoten (mit Ausnahme des Bias-Knotens, falls vorhanden) Verbindungen zu allen Knoten (mit Ausnahme des Bias-Knotens, falls vorhanden) in der unmittelbar vorhergehenden Schicht und der unmittelbar nächsten Schicht aufweisen. Somit können die Schichten als vollständig verbundene Schichten bezeichnet werden. Allen Verbindungen zwischen Knoten können Gewichte zugeordnet sein, obwohl nur einige dieser Gewichte in 1 gezeigt sind. Für ein komplexes Netz kann es Hunderte oder Tausende von Knoten und Tausende oder Millionen von Verbindungen zwischen den Knoten geben.
  • Wie vorstehend beschrieben, kann ein neuronales Feedforward-Netz null (als Einzelschicht-Perzeptron bezeichnet) oder eine oder mehrere verdeckte Schichten (als Mehrschicht-Perzeptron (multi-layer perceptron - MLP) bezeichnet) beinhalten. Obwohl 1 nur eine einzelne verdeckte Schicht in dem mehrschichtigen Perzeptron zeigt, kann ein mehrschichtiges Perzeptron eine oder mehrere verdeckte Schichten beinhalten (zusätzlich zu einer Eingabeschicht und einer Ausgabeschicht). Ein neuronales Feedforward-Netz mit vielen verdeckten Schichten kann als tiefes neuronales Netz bezeichnet werden. Während ein einschichtiges Perzeptron nur lineare Funktionen lernen kann, kann ein mehrschichtiges Perzeptron nichtlineare Funktionen lernen.
  • In dem in 1 gezeigten Beispiel kann der Knoten 112 ein Bias-Knoten mit einem Wert von 1 sein oder kann ein regulärer Eingabeknoten sein. Die Knoten 114 und 116 können externe Eingaben X1 und X2 annehmen, die je nach Eingabedatensatz numerische Werte sein können. Wie vorstehend erörtert, wird auf der Eingabeschicht 110 keine Berechnung durchgeführt, und somit sind die Ausgaben von den Knoten 112, 114 und 116 auf der Eingabeschicht 110 1, X1 bzw. X2, die in die verdeckten Schicht 120 eingespeist werden.
  • In dem in 1 gezeigten Beispiel kann der Knoten 122 ein Bias-Knoten mit einem Wert von 1 sein oder kann ein regulärer Netzknoten sein. Die Ausgaben der Knoten 124 und 126 in der verdeckten Schicht 120 können von den Ausgaben der Eingabeschicht 110 (z. B. 1, X1, X2 usw.) und den Gewichten, die den Verbindungen 115 zugeordneten sind, abhängen. Zum Beispiel kann der Knoten 124 numerische Eingaben X1 und X2 annehmen und kann Gewichte w1 und w2, die diesen Eingaben zugeordnet sind, aufweisen. Außerdem kann der Knoten 124 eine andere Eingabe (als Bias bezeichnet) aufweisen, wie beispielsweise 1, mit einem damit verbundenen Gewicht w0. Die Hauptfunktion des Bias besteht darin, jedem Knoten einen trainierbaren konstanten Wert bereitzustellen (zusätzlich zu den normalen Eingaben, die der Knoten empfängt). Der Bias-Wert kann es ermöglichen, die Aktivierungsfunktion nach links oder rechts zu verschieben. Es sei darauf hingewiesen, dass, obwohl nur drei Eingaben zum Knoten 124 in 1 gezeigt sind, ein Knoten in verschiedenen Implementierungen zweistellige, dreistellige, vierstellige oder mehr Eingaben und zugehörige Gewichte beinhalten können.
  • Die Ausgabe Y vom Knoten 124 kann wie folgt berechnet werden: Y = f ( w 1 × X 1 + w 2 × X 2 + w 0 × B i a s ) ,
    Figure DE112020003127T5_0001
    wobei Funktion f eine nichtlineare Funktion sein kann, die oft als Aktivierungsfunktion bezeichnet wird. Wenn ein Knoten K Eingaben aufweist, kann die Ausgabe des Knotens wie folgt berechnet werden: Y = f ( i = 0 K w i X i ) .
    Figure DE112020003127T5_0002
  • Somit kann die Berechnung auf jeder Schicht eines neuronalen Netzes als eine Multiplikation einer Eingabematrix und einer Gewichtsmatrix und einer auf die Produkte der Matrixmultiplikation angewendeten Aktivierungsfunktion beschrieben werden. Die Ausgaben von den Knoten auf einer Zwischenschicht können dann Knoten auf der nächsten Schicht, wie etwa der Ausgabeschicht 130, zugeführt werden.
  • Der Zweck der Aktivierungsfunktion besteht darin, eine Nichtlinearität in die Ausgabe eines Knotens eines neuronalen Netzes einzuführen, da die meisten Funktionen der realen Welt nichtlinear sind und es wünschenswert ist, dass die Neuronen diese nichtlinearen Darstellungen lernen können. Die Aktivierungsfunktion kann eine einzelne Zahl annehmen und damit eine bestimmte feste mathematische Operation durchführen. In einem künstlichen neuronalen Netz können mehrere Aktivierungsfunktionen verwendet werden. Eine beispielhafte Aktivierungsfunktion ist die Sigmoidfunktion σ(x), die eine realwertige Eingabe nimmt und in einen Wert zwischen 0 und 1 umwandelt. Eine weitere beispielhafte Aktivierungsfunktion ist die tanh-Funktion, die eine realwertige Eingabe nimmt und in einen Wert im Bereich von [-1, 1] umwandelt. Eine dritte beispielhafte Aktivierungsfunktion ist die Funktion der gleichgerichteten Lineareinheit (rectified linear unit - ReLU). Die ReLU-Funktion nimmt eine realwertige Eingabe und setzt für sie einen Schwellenwert über Null (z. B. Ersetzen negativer Werte durch Null). Eine weitere beispielhafte Aktivierungsfunktion ist die Leaky-ReLU-Funktion.
  • Die Ausgabeschicht 130 in dem in 1 gezeigten Beispiel kann die Knoten 132 und 134 beinhalten, die Eingaben von der verdeckten Schicht 120 annehmen und ähnliche Berechnungen wie die verdeckten Knoten unter Verwendung von Gewichten, die den Verbindungen 125 zugeordnet sind, durchführen können. Die Berechnungsergebnisse (Y1 und Y2) sind die Ausgaben des mehrschichtigen Perzeptrons. In einigen Implementierungen kann in einem MLP zur Klassifizierung eine Softmax-Funktion als Aktivierungsfunktion in der Ausgabeschicht verwendet werden. Die Softmax-Funktion nimmt einen Vektor realwertiger Scores und ordnet ihn einem Vektor von Werten zwischen Null und Eins, die sich zu Eins summieren, zu.
  • Für einen gegebenen Satz von Eingabe-Features X = (x1, x2, ...) und ein Ziel Y kann ein mehrschichtiges Perzeptron die Beziehung zwischen den Features und dem Ziel entweder für die Klassifizierung oder die Regression lernen. Ein mehrschichtiges Perzeptron kann unter Verwendung eines Backpropagation-Algorithmus lernen. Die rückwärtige Propagierung von Fehlern (oft als BackProp bezeichnet) ist eine von mehreren Möglichkeiten, wie ein künstliches neuronales Netz trainiert werden kann. BackProp kann ein überwachtes Trainingsschema sein, das aus markierten Trainingsdaten und Fehlern an den Knoten lernt, indem Parameter des neuronalen Netzes geändert werden, um die Fehler zu reduzieren.
  • Wie vorstehend beschrieben, sind den Verbindungen zwischen Knoten benachbarter Schichten in einem künstlichen neuronalen Netz Gewichten zugeordnet, wobei die Gewichte bestimmen können, was der Ausgabevektor für einen gegebenen Eingabevektor ist. Ein Lern- oder Trainingsprozess kann diesen Verbindungen geeignete Gewichte zuweisen. In einigen Implementierungen können die Anfangswerte der Gewichte zufällig zugewiesen werden. Für jede Eingabe in einem Trainingsdatensatz kann die Ausgabe des künstlichen neuronalen Netzes beobachtet und mit der erwarteten Ausgabe verglichen werden, und der Fehler zwischen der erwarteten Ausgabe und der beobachteten Ausgabe kann zurück zur vorherigen Schicht propagiert werden. Die Gewichte können basierend auf dem Fehler entsprechend angepasst werden. Dieser Vorgang wird wiederholt, bis der Ausgabefehler unter einem vorbestimmten Schwellenwert liegt.
  • In vielen Situationen kann die Verwendung des neuronalen Feedforward-Netzes, wie vorstehend beschrieben, für die Echtweltanwendung, wie etwa Bildklassifizierung, nicht praktikabel sein. Zum Beispiel können für ein zweidimensionales (2-D) Bild mit 200 × 200 Pixeln 40.000 Eingabeknoten in dem neuronalen Netz verwendet werden. Wenn eine verdeckte Schicht 20.000 Knoten aufweist, würde die Größe der Matrix für die Gewichte 40.000 × 20.000 (oder 800 Millionen Elemente) betragen. Wenn jedes Gewicht ein Gleitkommawert von 32 Bit (d. h. 4 Byte) ist, würde der für die Gewichte verwendete Gesamtspeicher 3,2 GB betragen. Dies ist nur für die erste Schicht. Mit zunehmender Anzahl von Schichten kann auch die Größe der Gewichte zunehmen. Außerdem kann die Vektorisierung eines Bildes unter Verwendung einzelner Pixel die komplexe mehrdimensionale räumliche Struktur des Bildes ignorieren.
  • Eine Möglichkeit, diese Probleme zu überwinden, besteht darin, neuronale Faltungsnetze zu verwenden, die Faltungen unter Verwendung kleinerer Faltungsfilter statt der vorstehend beschriebenen großen Matrixmultiplikationen durchführen. Das Lernen eines Satzes von Faltungsfiltern (z. B. Matrizen von 11 × 11) kann weitaus leichter und schneller als das Lernen einer großen Matrix (z. B. 40.000 × 20.000) sein. Auch mehrdimensionale Faltungen oder andere Tensoroperationen können die mehrdimensionale Struktur von Bildern natürlich berücksichtigen. Neuronale Faltungsnetze können als neuronale Feedforward-Netze mit lokaler Konnektivität und Gewichtsverteilung betrachtet werden. Die lokale Konnektivität bezieht sich auf die Tatsache, dass ein Faltungsfilter viel kleinere Dimensionen haben kann als das Bild, auf dem er arbeitet. Die Gewichtsverteilung beruht auf der Tatsache, dass bei der Durchführung der Faltung über das Bild hinweg der gleiche Filter verwendet werden kann, was bedeutet, dass an vielen Stellen im Bild der gleiche lokale Filter verwendet wird. Mit anderen Worten werden die Gewichte zwischen allen Filtern für verschiedene Stellen im Bild geteilt.
  • Ein neuronales Faltungsnetz (ConvNet oder CNN) kann Operationen durchführen, die beispielsweise (1) Faltung; (2) Nichtlinearitätsfunktion (oder Aktivierungsfunktion) (z. B. ReLU); (3) Pooling oder Sub-Sampling; und (4) Klassifizierung beinhalten. Unterschiedliche CNN können unterschiedliche Kombinationen dieser vier Hauptoperationen sowie andere zusätzliche Operationen aufweisen. Zum Beispiel kann ein ResNet-50-Netz Netzschichten beinhalten, die hauptsächlich Faltungsschichten und einige Pooling-Schichten beinhalten, und kann auch Residue-Add-Operationen zum Lernen von Resten durchführen.
  • 2 veranschaulicht ein Beispiel eines neuronalen Faltungsnetzes (CNN) 200 zur Bild- oder anderen Objektklassifizierung. Wie vorstehend beschrieben, kann das CNN 200 vier Arten von Operationen durchführen, einschließlich Faltung, Nichtlinearitätsfunktion (oder Aktivierungsfunktion) (z. B. ReLU), Pooling oder Sub-Sampling und Klassifizierung (vollständig verbundene Schicht). Ein zu klassifizierendes Objekt 210, wie beispielsweise ein oder mehrere Eingabebilder oder andere Eingabedatensätze (als Eingabe-Feature-Maps bezeichnet), kann durch eine Matrix von Pixelwerten dargestellt werden. Zum Beispiel kann das Objekt 210 mehrere Kanäle beinhalten (z. B. mehrere Eingabe-Feature-Maps), wobei jeder Kanal eine bestimmte Komponente des Objekts 210 darstellt. Zum Beispiel kann ein Bild von einer Digitalkamera mindestens einen Rotkanal, einen Grünkanal und einen Blaukanal aufweisen, wobei jeder Kanal durch eine 2D-Matrix von Pixeln mit Pixelwerten im Bereich von beispielsweise 0 bis 255 (d. h. 8-Bit) dargestellt werden kann. Ein Graustufenbild kann nur einen Kanal haben. In der folgenden Beschreibung wird die Verarbeitung eines einzelnen Bildkanals unter Verwendung des CNN 200 beschrieben. Andere Kanäle können ähnlich verarbeitet werden.
  • Wie in 2 gezeigt, kann das Objekt 210 (z. B. Eingabebilder) zuerst von einer ersten Faltungsschicht 215 unter Verwendung eines ersten Satzes von Filtern verarbeitet werden, wobei die erste Faltungsschicht 215 eine Faltung zwischen einer das Eingabebild darstellenden Matrix und einer jeden Filter darstellenden Matrix in dem ersten Satz von Filtern durchführen kann. Die Faltung kann eine Mehrfachmatrixmultiplikation beinhalten. Die erste Faltungsschicht 215 kann auch eine nichtlineare Aktivierungsfunktion (z. B. ReLU) durchführen. Eine Ausgabematrix 220 von der ersten Faltungsschicht 215 kann kleinere Dimensionen aufweisen als das Eingabebild und kann als gefaltetes Feature, Aktivierungs-Map oder Feature-Map bezeichnet werden. Die erste Faltungsschicht 215 kann Faltungen an dem Eingabebild unter Verwendung des ersten Satzes von Filtern durchführen, um mehrere Ausgabematrizen 220 zu erzeugen, die als Ausgabe-Feature-Maps der ersten Faltungsschicht 215 bezeichnet werden können. Die Anzahl der verwendeten Filter kann als Tiefe der Faltungsschicht bezeichnet werden. In dem in 2 gezeigten Beispiel kann die erste Faltungsschicht 215 eine Tiefe von drei aufweisen. Jede Ausgabematrix 220 (z. B. eine Ausgabe-Feature-Map) kann an eine Pooling-Schicht 225 weitergeleitet werden, wo jede Ausgabematrix 220 einem Sub-Sampling oder Down-Sampling unterzogen werden kann, um eine Matrix 230 zu erzeugen.
  • Jede Matrix 230 kann von einer zweiten Faltungsschicht 235 unter Verwendung eines zweiten Satzes von Filtern verarbeitet werden. Eine nichtlineare Aktivierungsfunktion (z. B. ReLU) kann auch von der zweiten Faltungsschicht 235 wie vorstehend beschrieben durchgeführt werden. Eine Ausgabematrix 240 (z. B. eine Ausgabe-Feature-Map) von der zweiten Faltungsschicht 235 kann kleinere Dimensionen als die Matrix 230 aufweisen. Die zweite Faltungsschicht 235 kann Faltungen an der Matrix 230 unter Verwendung des zweiten Satzes von Filtern durchführen, um mehrere Ausgabematrizen 240 zu erzeugen. In dem in 2 gezeigten Beispiel kann die zweite Faltungsschicht 235 eine Tiefe von sechs aufweisen. Jede Ausgabematrix 240 kann an eine Pooling-Schicht 245 weitergeleitet werden, wo jede Ausgabematrix 240 einem Sub-Sampling oder Down-Sampling unterzogen werden kann, um eine Ausgabematrix 250 zu erzeugen.
  • Die Ausgabematrizen 250 von der Pooling-Schicht 245 können durch eine Abflachungsschicht 255 zu Vektoren abgeflacht werden und durch eine vollständig verbundene Schicht 260 (z. B. ein mehrschichtiges Perzeptron (MLP)) geleitet werden. Die vollständig verbundene Schicht 260 kann eine Eingabeschicht 270 beinhalten, die den 2D-Ausgabevektor von der Abflachungsschicht 255 nimmt. Die vollständig verbundene Schicht 260 kann auch eine verdeckte Schicht und eine Ausgabeschicht 290 beinhalten. Die vollständig verbundene Schicht 260 kann das Objekt im Eingabebild unter Verwendung von Feature-Maps oder der Ausgabematrix 250 und beispielsweise einer Softmax-Funktion in eine von mehreren Kategorien klassifizieren. Der Betrieb der vollständig verbundenen Schicht kann durch Matrixmultiplikationen dargestellt werden. Wenn es beispielsweise M Knoten auf der Eingabeschicht 270 und N Knoten auf der verdeckten Schicht 280 gibt und die Gewichte der Verbindungen zwischen den M Knoten auf der Eingabeschicht 270 und den N Knoten auf der verdeckten Schicht 280 durch eine Matrix W dargestellt werden können, kann die Ausgabe Y der verdeckten Schicht 280 durch Y = X × W bestimmt werden.
  • Die Faltungsoperationen in einem CNN können dazu verwendet werden, Features aus dem Eingabebild zu extrahieren. Die Faltungsoperationen können die räumliche Beziehung zwischen Pixeln durch Extrahieren von Bild-Features unter Verwendung kleiner Regionen des Eingabebildes bewahren. Bei einer Faltung kann eine Matrix (als ein Filter, ein Kernel oder ein Feature-Detektor bezeichnet) mit einer bestimmten Schrittgröße (als der Schritt bezeichnet) über das Eingabebild (oder eine Feature-Map) fahren. Für jede Position (oder jeden Schritt) können elementweise Multiplikationen zwischen der Filtermatrix und der überlappenden Matrix im Eingabebild berechnet und summiert werden, um einen finalen Wert zu erhalten, der ein einzelnes Element einer Ausgabematrix darstellt (z. B. eine Feature-Map). Ein Filter kann wirken, um bestimmte Features aus dem ursprünglichen Eingabebild zu erkennen.
  • Die Faltung unter Verwendung eines Filters über einem Eingabepixel-Array kann dazu verwendet werden, eine Feature-Map zu erzeugen, und die Faltung unter Verwendung eines anderen Filters über demselben Eingabepixel-Array kann eine andere Feature-Map erzeugen. In der Praxis kann ein CNN die Gewichte der Filter während des Trainingsprozesses auf Grundlage einiger benutzerdefinierter Parameter (die als Hyperparameter bezeichnet werden können), wie etwa die Anzahl der Filter, die Filtergröße, die Architektur des Netzes usw., selbst lernen. Je mehr Filter verwendet werden, desto mehr Bild-Features können extrahiert werden und desto besser kann das Netzwerk Muster in neuen Bildern erkennen.
  • Die Größen der Ausgabe-Feature-Maps können basierend auf Parametern bestimmt werden, wie etwa der Tiefe, der Schrittweite und der Null-Auffüllung. Wie vorstehend beschrieben, kann die Tiefe der Anzahl von Filtern entsprechen, die für die Faltungsoperation verwendet werden. Im CNN 200, das in 2 gezeigt ist, werden drei unterschiedliche Filter in der ersten Faltungsschicht 215 verwendet, um Faltungsoperationen an dem Eingabebild durchzuführen, wodurch drei verschiedene Ausgabematrizen (oder Feature-Maps) 220 erzeugt werden. Der Schritt ist die Anzahl der Pixel, um die die Filtermatrix über das Eingabepixel-Array gefahren wird. Wenn der Schritt beispielsweise eins ist, wird die Filtermatrix jeweils um ein Pixel bewegt. Wenn der Schritt zwei beträgt, wird die Filtermatrix um zwei Pixel gleichzeitig bewegt. Ein größerer Schritt kann zu kleineren Feature-Maps führen. In einigen Implementierungen kann die Eingabematrix mit Nullen um die Grenze herum aufgefüllt werden, so dass die Filtermatrix auf angrenzende Elemente des Eingabepixel-Arrays angewendet werden kann. Null-Auffüllung kann die Steuerung der Größe der Feature-Maps ermöglichen.
  • Wie in 2 gezeigt, kann eine zusätzliche nichtlineare Operation unter Verwendung einer Aktivierungsfunktion (z. B. ReLU) nach jeder Faltungsoperation verwendet werden. ReLU ist eine elementweise Operation, die alle negativen Pixelwerte in der Feature-Map durch Null ersetzt. Der Zweck der ReLU-Operation besteht darin, eine Nichtlinearität in das CNN einzuführen. Andere nichtlineare Funktionen, wie zum Beispiel Tanh- oder Sigmoid-Funktion, können ebenfalls verwendet werden, aber ReLU hat sich in vielen Situationen als besser erwiesen.
  • Räumliches Pooling (auch als Sub-Sampling oder Down-Sampling bezeichnet) kann die Dimensionen jeder Feature-Map reduzieren, während die wichtigsten Informationen beibehalten werden. Insbesondere kann das Pooling die Feature-Dimensionen kleiner und handlicher machen und die Anzahl von Parametern und Berechnungen in dem Netz reduzieren. Pooling kann das Netz auch gegenüber kleinen Transformationen, Verzerrungen und Translationen im Eingabebild invariant machen, so dass eine kleine Verzerrung im Eingabebild die Ausgabe des Poolings möglicherweise nicht ändert, da der Maximal- oder Durchschnittswert in einer lokalen Nachbarschaft verwendet wird. Somit kann das Pooling dazu beitragen, eine äquivariante Darstellung des Eingabebildes zu erreichen, so dass Objekte in einem Bild erfasst werden können, unabhängig davon, wo sie sich befinden. Räumliches Pooling kann auf verschiedene Weise durchgeführt werden, wie z. B. Max-Pooling, Mittelwert-Pooling, Summen-Pooling usw. Beim Max-Pooling kann das größte Element in jeder räumlichen Nachbarschaft (z. B. ein 2×2-Fenster) verwendet werden, um die räumliche Nachbarschaft darzustellen. Anstatt das größte Element zu nehmen, kann der Mittelwert (für das Mittelwert-Pooling) oder die Summe (für das Summen-Pooling) aller Elemente in jedem Fenster verwendet werden, um die räumliche Nachbarschaft darzustellen. In vielen Anwendungen kann das Max-Pooling besser als andere Pooling-Techniken funktionieren.
  • In dem in 2 gezeigten Beispiel werden zwei Sätze von Faltungs- und Pooling-Schichten verwendet. Es wird darauf hingewiesen, dass diese Operationen in einem einzelnen CNN beliebig oft wiederholt werden können. Außerdem kann nicht nach jeder Faltungsschicht eine Pooling-Schicht verwendet werden. Beispielsweise kann ein CNN in einigen Implementierungen mehrere Faltungs- und ReLU-Operationen durchführen, bevor eine Pooling-Operation durchgeführt wird.
  • Der Trainingsprozess eines neuronalen Faltungsnetzes, wie beispielsweise CNN 200, kann dem Trainingsprozess für jedes beliebige neuronale Feedforward-Netz ähnlich sein. Zuerst können alle Parameter und Gewichte (einschließlich der Gewichte in den Filtern und Gewichte für die vollständig verbundene Schicht) mit Zufallswerten (oder den Parametern eines bekannten neuronalen Netzes) initialisiert werden. Zweitens kann das neuronale Faltungsnetz eine Trainingsprobe (z. B. ein Trainingsbild) als Eingabe nehmen, die Vorwärtspropagierungsschritte (einschließlich Faltungs-, nichtlinearer Aktivierungs- und Pooling-Operationen zusammen mit den Vorwärtspropagierungsoperationen in der vollständig verbundenen Schicht) durchführen und die Ausgabewahrscheinlichkeit für jede mögliche Klasse bestimmen. Da die Parameter des neuronalen Faltungsnetzes, wie etwa die Gewichte, für das Trainingsbeispiel zufällig zugewiesen werden, können auch die Ausgabewahrscheinlichkeiten zufällig sein.
  • Am Ende des Trainingsprozesses können alle Gewichte und Parameter des CNN optimiert worden sein, um die Trainingsproben aus dem Trainingsdatensatz korrekt zu klassifizieren. Wenn eine unsichtbare Probe (z. B. eine Testprobe oder eine neue Probe) in das CNN eingegeben wird, kann das CNN den Vorwärtspropagierungsschritt durchlaufen und unter Verwendung der trainierten Gewichte und Parameter eine Wahrscheinlichkeit für jede Klasse ausgeben, die als ein Schlussfolgerungsprozess (oder Vorhersageprozess) im Vergleich zum Trainingsprozess bezeichnet werden kann. Wenn der Trainingsdatensatz ausreichend ist, kann das trainierte Netz die unsichtbare Probe in eine korrekte Klasse klassifizieren.
  • 3A und 3B veranschaulichen Faltungsoperationen, die an einem Eingabe-Pixel-Array 320 unter Verwendung eines Filters 310 durch eine Faltungsschicht in einem neuronalen Faltungsnetz durchgeführt werden. Das Eingabepixel-Array 320 kann ein Eingabebild, einen Kanal eines Eingabebilds oder eine Feature-Map, die von einer anderen Faltungsschicht oder Pooling-Schicht erzeugt wird, beinhalten. 3A veranschaulicht die Faltungsoperation, die in einem ersten Schritt an einer ersten Region 322 des Eingabepixel-Arrays 320 durchgeführt wird. 3B veranschaulicht die Faltungsoperation, die an einer zweiten Region 324 des Eingabepixel-Arrays 320 in einem zweiten Schritt nach dem Fahren des Filters 310 um einen Schritt durchgeführt wird.
  • Der Filter 310 kann eine zweidimensionale Matrix beinhalten, wobei jedes Element der 2D-Matrix ein Gewicht darstellt. Die Gewichte im Filter 310 können entworfen oder trainiert sein, um bestimmte Features aus der räumlichen Verteilung von Pixelwerten in dem Bild zu erkennen oder zu extrahieren. Die extrahierten Features können für das menschliche Auge von Bedeutung sein oder auch nicht. Unterschiedliche Filter können dazu verwendet werden, unterschiedliche Features aus dem Eingabepixel-Array zu erkennen oder zu extrahieren. Einige Filter können beispielsweise dazu verwendet werden, Kanten in einem Bild zu erkennen oder ein Bild zu schärfen oder unscharf zu machen. Der Filter 310 kann R Zeilen (Höhe) und S Spalten (Breite) aufweisen und kann typischerweise kleiner sein als das Eingabepixel-Array 320, das eine Höhe von H Pixeln und eine Breite von W Pixeln aufweisen kann. Jedes Gewicht im Filter 310 kann auf ein Pixel in einer Region mit R Zeilen und S Spalten im Eingabepixelarray 320 abgebildet werden. Wie beispielsweise in 3A gezeigt, kann eine Faltungsschicht (z. B. erste Faltungsschicht 215 oder zweite Faltungsschicht 235) oder ein Verarbeitungsknoten der Faltungsschicht Pixelwerte für eine Region 322 (einschließlich R × S Pixel) des Eingabepixel-Arrays 320 empfangen, elementweise Multiplikationen zwischen entsprechenden Elementen im Filter 310 und in der Region 322 durchführen und die Produkte der elementweisen Multiplikationen summieren, um einen Faltungsausgabewert 332 zu erzeugen. Mit anderen Worten kann der Faltungsausgabewert 332 die Summe der Multiplikationsergebnisse zwischen Gewichten im Filter 310 und entsprechenden Pixeln in der Region 322 gemäß i = 1 R × S x i w i
    Figure DE112020003127T5_0003
    sein, d. h. ein Punktprodukt zwischen einer Matrix W, die den Filter 310 darstellt, und einer Matrix X, die Pixelwerte der Region 322 darstellt.
  • Gleichermaßen, wie in 3B gezeigt, kann die Faltungsschicht (z. B. ein anderer Verarbeitungsknoten der Faltungsschicht) Pixelwerte für eine Region 324 (einschließlich R × S Pixel) des Eingabepixel-Arrays 320 empfangen, elementweise Multiplikationen zwischen entsprechenden Elementen im Filter 310 und in der Region 324 durchführen und die Produkte der elementweisen Multiplikationen summieren, um einen Faltungsausgabewert 334 zu erzeugen. Wie in 3B gezeigt, können die Faltungsoperationen in einer Gleitfensterweise in einem vorbestimmten Schritt D durchgeführt werden. Der Schritt ist die Anzahl von Pixeln, um die die Filtermatrix über das Eingabepixel-Array gefahren wird. Zum Beispiel kann sich in dem in 3B gezeigten Beispiel die Region 324 in einem Abstand D (in Pixeln) von der Region 322 befinden und die nächste Region für die nächste Faltungsoperation kann sich im gleichen Abstand D von der Region 324 befinden. Die Schrittweite D kann kleiner oder größer als die Breite S des Filters 310 sein.
  • Die Ausgaben der Faltungsoperationen können eine Faltungsausgabematrix 330 mit einer Höhe von E Zeilen und einer Breite von F Spalten bilden. Wie vorstehend beschrieben, kann die Matrix 330 als eine Feature-Map bezeichnet werden. Die Dimensionen der Matrix 330 können kleiner als das Eingabepixelfeld 320 sein und können basierend auf den Dimensionen des Eingabepixelfelds 320, den Dimensionen des Filters 310 und dem Schritt D bestimmt werden. Wie vorstehend beschrieben, kann das Eingabepixelfeld 320 in einigen Implementierungen mit Nullen um den Rand aufgefüllt werden, so dass der Filter 310 auf angrenzende Elemente des Eingabepixel-Arrays 320 angewendet werden kann. Null-Auffüllung kann die Steuerung der Größe der Feature-Map (z. B. Matrix 330) ermöglichen. Wenn die Auffüllgröße auf jeder Seite eines 2D-Eingabepixelarrays 320 P ist, beträgt die Höhe E der Matrix 330 E = H R + 2 P D + 1
    Figure DE112020003127T5_0004
    und die Breite F der Matrix 330 beträgt F = W S + 2 P D + 1.
    Figure DE112020003127T5_0005
    Wenn beispielsweise der Schritt D sowohl in horizontaler als auch in vertikaler Richtung gleich einem Pixel ist, kann E gleich H-R+2P+1 sein und F kann gleich W-S+2P+1 sein. Ein größerer Schritt D kann zu kleineren Feature-Maps führen.
  • 4A-4E veranschaulichen Beispiele für Faltungs-, nichtlineare Aktivierungs- und Pooling-Operationen, die an einem Beispiel von Eingabe-Pixeldaten durchgeführt werden. Die Eingabepixeldaten können beispielsweise ein digitales Bild, einen Kanal eines digitalen Bildes oder eine Feature-Map darstellen, die von einer vorherigen Schicht in einem neuronalen Faltungsnetz erzeugt wurde. 4A veranschaulicht eine beispielhafte Eingabematrix 410, die die beispielhaften Eingabepixeldaten beinhaltet. Die Eingabematrix 410 kann ein 6×6-Pixel-Array beinhalten, wobei jedes Element des Pixel-Arrays eine reelle Zahl beinhalten kann, wie etwa eine ganze Zahl oder eine Gleitkommazahl. 4B veranschaulicht einen beispielhaften Filter 420. Der Filter 420 kann eine 3×3-Matrix beinhalten, wobei jedes Element der Matrix ein Gewicht des Filters darstellt. Der Filter 420 kann dazu verwendet werden, bestimmte Features aus der Eingabematrix 410 zu extrahieren. Der beispielhafte Filter 420, der in 4B gezeigt ist, kann ein Filter zum Erfassen von Kanten in einem Bild sein.
  • Die Eingabematrix 410 und der Filter 420 können gefaltet werden, um eine Ausgabematrix 430 zu erzeugen, wie in 4C gezeigt. Jedes Element in der Ausgabematrix 430 kann die Summe elementweiser Multiplikationen (z. B. Punktprodukt) zwischen entsprechenden Elementen im Filter 420 und einer überlappenden Region 412 der Eingabematrix 410 sein und es kann in jedem Schritt ein Fenster mit den gleichen Dimensionen wie der Filter 420 (z. B. 3×3) bestimmt werden, das mit einem bestimmten Schritt über die Eingabematrix 410 (z. B. 1 Element horizontal und/oder vertikal) fährt. Zum Beispiel kann der Wert des Elements 432 in Zeile 1 und Spalte 3 der Ausgabematrix 430 das Punktprodukt zwischen der Matrix, die den Filter 420 darstellt, und einer Matrix, die der Region 412 der Eingabematrix 410 darstellt, sein, wobei 2×0+1×1+0×0+5×1+3×(-4)+2×1+2×0+1×1+1×0 = 1+5-12+2+1 = -3. In ähnlicher Weise kann der Wert des Elements 434 in Zeile 4 und Spalte 1 der Ausgabematrix 430 das Punktprodukt zwischen der Matrix, die den Filter 420 darstellt, und einer Matrix, die die Region 414 der Eingabematrix 410 darstellt, sein, wobei 0×0+2×1+1×0+0×1+0×(-4)+1×1+5×0+3×1+2×0 = 2+1+3 = 6. Für die Eingabematrix 410 mit einem 6×6-Pixel-Array und Filter 420, dargestellt durch eine 3×3-Matrix, kann die Ausgabematrix 430 eine 4x4-Matrix sein, wenn der verwendete Schritt ein Element oder Pixel ist.
  • Eine nichtlineare Aktivierungsfunktion (z. B. ReLU, Sigmoid, Tanh usw.) kann dann auf die Ausgabematrix 430 angewendet werden, um eine Matrix 440 zu erzeugen, wie in 4D gezeigt. In dem in 4D gezeigten Beispiel wird die ReLU-Funktion verwendet und somit werden alle negativen Werte in der Ausgabematrix 430 durch Nullen in der Matrix 440 ersetzt. Eine Pooling-Operation (z. B. eine Max-, Mittelwert- oder Summen-Pooling-Operation) kann auf die Matrix 440 angewendet werden, um für Daten in der Matrix 440 ein Sub-Sampling oder Down-Sampling durchzuführen. In dem in den 4D und 4E gezeigten Beispiel kann eine Max-Pooling-Operation auf die Matrix 440 angewendet werden, wobei die 4×4-Matrix 440 in vier 2×2-Regionen 442, 444, 446 und 448 geteilt werden kann. Der Maximalwert jeder Region kann als ein Sub-Sample ausgewählt werden, das jede Region darstellt. Zum Beispiel wird ein Maximalwert von 9 aus der Region 442 ausgewählt, ein Maximalwert von 2 wird aus der Region 444 ausgewählt, ein Maximalwert von 5 wird aus der Region 446 ausgewählt und ein Maximalwert von 6 wird aus der Region 448 ausgewählt. Somit kann eine Feature-Map 450 mit vier Elementen 9, 2, 6 und 5 aus der 6×6-Eingabematrix 410 nach der Faltungsoperation, der nichtlinearen Aktivierungsoperation und der Pooling-Operation erzeugt werden.
  • 5 veranschaulicht ein Beispiel eines Modells 500 für eine Faltungsschicht eines neuronalen Faltungsnetzes, das beispielsweise bei der Bildverarbeitung verwendet wird. Wie in dem Beispiel veranschaulicht, kann es mehrere (z. B. N) 3D-Eingaben 520-1, ... und 520-N in die Faltungsschicht geben. Jede 3D-Eingabe kann C -Kanäle von 2D-Eingabe-Feature-Maps (mit den Dimensionen H×W) beinhalten. Für die erste Faltungsschicht in einem CNN kann eine 3D-Eingabe beispielsweise drei Kanäle von 2D-Bildern beinhalten, wie etwa die roten, grünen und blauen Farbkanäle. Mehrere (z. B. M) 3-D-Filter 510-1, ... und 510-M, die jeweils C 2-D-Filter der Dimensionen R × S aufweisen, können mit den N 3-D-Eingaben 520-1, ... und 520-N (z. B. N Batches von C Eingabe-Feature-Maps der Dimensionen H×W) gefaltet werden, um mehrere (z. B. N) 3-D-Ausgaben 530-1, ... und 530-N zu erzeugen, wobei jede der 3D-Ausgaben 530-1, ... und 530-N M Ausgabe-Feature-Maps (auch als Ausgabekanäle bezeichnet) beinhalten kann. Jeder 3D-Filter 510-1, ... oder 510-M (mit den Dimensionen C × R × S) kann auf eine 3-D-Eingabe 520-1, ... oder 520-N (mit den Dimensionen C × H × W) angewendet werden, um eine Ausgabe-Feature-Map (mit den Dimensionen E × F wie vorstehend in Bezug auf die 3A und 3B beschrieben) in einer 3D-Ausgabe 530-1, ... oder 530-N zu erzeugen, die M Ausgabe-Feature-Maps beinhaltet, und somit können M 3D-Filter dazu verwendet werden, die M Ausgabe-Feature-Maps in einer 3D-Ausgabe für eine 3D-Eingabe zu erzeugen. Zum Beispiel kann der 3D-Filter 510-1 auf die 3D-Eingabe 520-1 angewendet werden, um eine Ausgabe-Feature-Map 530-1-1, ... zu erzeugen und der 3D-Filter 510-M kann auf die 3-D-Eingabe 520-1 angewendet werden, um eine Ausgabe-Feature-Map 530-1-M zu erzeugen. Dieselben M 3-D-Filter 510-1, ... und 510-M können auf jede 3-D-Eingabe 520-1, ... oder 520-N angewendet werden, um jede entsprechende 3-D-Ausgabe 530-1, ... oder 530-N, der M -Ausgabe-Feature-Maps beinhaltet, zu erzeugen. Zum Beispiel kann der 3D-Filter 510-1 auf die 3D-Eingabe 520-N angewendet werden, um eine Ausgabe-Feature-Map 530-N-1 zu erzeugen und der 3D-Filter 510-M kann auf die 3-D-Eingabe 520-N angewendet werden, um eine Ausgabe-Feature-Map 530-N-M zu erzeugen. Somit gibt es N 3D-Eingaben und N 3D-Ausgaben, wobei jede 3D-Ausgabe M Ausgabe-Feature-Maps beinhaltet.
  • Genauer gesagt, wie in 5 gezeigt, können für eine 3D-Eingabe 520-1, ... oder 520-N und einen 3D-Filter 510-1, ... oder 510-M die C 2-D-Filter (jeweils mit den Dimensionen R × S) im 3D-Filter 510-m den C Kanälen von 2D-Eingabe-Feature-Maps (jeweils mit den Dimensionen H×W) in der 3D-Eingabe entsprechen, und die Faltungsoperation zwischen jedem 2D-Filter von den C 2-D-Filter und dem entsprechenden Kanal der C Kanäle von 2-D-Eingabe-Feature-Maps können durchgeführt werden. Die Faltungsergebnisse für C Paare von 2-D-Filtern und die entsprechende 2-D-Eingabe-Feature-Map können summiert werden, um eine Faltungsausgabe (z. B. ein Pixel) Oe,f m auf einer Ausgabe-Feature-Map des Index m in den M Ausgabe-Feature-Maps in einer 3D-Ausgabe 530-1, ... oder 530-N wie folgt zu erzeugen: O e , f m = r = 0 R 1 s = 0 S 1 c = 0 C 1 X C e D + r , f D + s × W c , m r , s ,
    Figure DE112020003127T5_0006
    wobei m dem Index der Ausgabe-Feature-Map und dem Index des 3D-Filters in den M 3D-Filtern entspricht. Xc eD+T,fD+s ist der Wert eines Pixels mit einer horizontalen Pixelkoordinate von eD+r und einer vertikalen Pixelkoordinate von fD+s in einer Eingabe-Feature-Map mit Index C in den C Kanälen von 2D-Eingabe-Feature-Maps in einer 3D-Eingabe. D ist die Schrittweite des Fahrfensters. e und f sind die Koordinaten des Ausgabepixels in der entsprechenden Ausgabe-Feature-Map der M Ausgabe-Feature-Maps und können einem bestimmten Fahrfenster entsprechen. r und s entsprechen einem bestimmten Ort (z. B. Pixel oder Element) innerhalb eines Fahrfensters oder eines 2D-Filters. Wc,m r,s ist ein Gewicht, das einem Pixel an einer Stelle (r, s) eines 2D-Filters mit Index C in dem 3D-Filter mit Index m entspricht. Die Gleichung (3) gibt an, dass, um jede Faltungsausgabe (z. B. Pixel) Oe,ƒ m an einer Position (e, f) auf einer Ausgabe-Feature-Map m zu berechnen, jedes Pixel Xc eD+r,ƒD+s innerhalb eines Fahrfensters in einer Eingabe-Feature-Map des Index C mit einem entsprechenden Gewicht Wc,m r,s multipliziert werden kann, um ein Produkt zu erzeugen, die Teilsumme der Produkte für die Pixel innerhalb jedes Fahrfensters in der Eingabe-Feature-Map von Index C berechnet werden kann und dann eine Summe der Teilsummen für alle C Eingabe-Feature-Maps berechnet werden kann, um den Wert des Pixels Oe,f m an einer Stelle (e,f) in der entsprechenden Ausgabe-Feature-Map des Index m in den M Ausgabe-Feature-Maps zu bestimmen.
  • In einem Beispiel kann für den 3D-Filter 510-1 und die 3D-Eingabe 520-1 jeder 2D-Filter 512 in den C 2D-Filtern im 3D-Filter 510-1 einer jeweiligen Eingabe-Feature-Map 522 in der 3D-Eingabe 520-1 entsprechen und kann dazu verwendet werden, mit der entsprechenden Eingabe-Feature-Map 522 zu falten (z. B. zu filtern), wobei jedes Pixel in einem Fahrfenster 524 in der Eingabe-Feature-Map 522 mit einem entsprechenden Pixel im 2D-Filter 512 multipliziert werden kann, um ein Produkt zu erzeugen, und die Produkte für alle Pixel im Fahrfenster 524 können summiert werden, um eine Teilsumme zu erzeugen. Die Teilsummen für die C 2-D-Filter 512 (und die entsprechende Eingabe-Feature-Map 522) können zusammenaddiert werden, um ein Ausgabepixel 532 an einer Stelle (e, f) auf der Ausgabe-Feature-Map 530-1-1 in der 3-D-Ausgabe 530-1 zu erzeugen. Das Fahrfenster 524 kann auf allen C -Eingabe-Feature-Maps 522 in der 3D-Eingabe 520-1 basierend auf den Schritten D in den zwei Dimensionen verschoben werden, um ein weiteres Ausgabepixel 532 an einer anderen Stelle auf der Ausgabe-Feature-Map 530-1-1 in der 3-D-Ausgabe 530-1 zu erzeugen. Das Fahrfenster 524 kann auf allen CEingabe-Feature-Maps 522 wiederholt zusammen verschoben werden, bis alle Ausgabepixel 532 auf der Ausgabe-Feature-Map 530-1-1 in der 3D-Ausgabe 530-1 erzeugt sind.
  • Jeder 3D-Filter 510-2, ... oder 510-M kann dazu verwendet werden, mit der 3D-Eingabe 520-1 zu falten, wie vorstehend in Bezug auf den 3D-Filter 510-1 beschrieben, um jede jeweilige Ausgabe-Feature-Map 530-1-2, ... oder 530-1-M in der 3D-Ausgabe 530-1 zu erzeugen. Gleichermaßen kann jeder 3D-Filter 510-1, ... oder 510-M dazu verwendet werden, mit der 3D-Eingabe 520-N zu falten, wie vorstehend in Bezug auf den 3D-Filter 510-1 und die 3-D-Eingabe 520-1 beschrieben, um jede jeweilige Ausgabe-Feature-Map 530-N-1, ... oder 530-N-M in der 3D-Ausgabe 530-N zu erzeugen.
  • 6 veranschaulicht ein Beispiel einer Faltungsoperation, die ein Batch (N = 1) von C Kanälen (C = 3)von Eingabedaten 620 und M Sätzen (M = 2) von C Filtern (C=3) umfasst. Das in 6 gezeigte Beispiel kann ein spezifisches Beispiel des Modells 500 sein, das mit Bezug auf 5 beschrieben wurde, wobei die Anzahl der Batches N gleich eins ist. Wie veranschaulicht, beinhalten die Eingabedaten 620 3 Eingabe-Feature-Maps 622, 622 und 624 (z. B. Eingabekanäle), die jeweils einem Eingabekanal entsprechen. Die Filter beinhalten einen ersten Satz von Filtern 610-1 und einen zweiten Satz von Filtern 610-2, wobei der erste Satz von Filtern 610-1 drei 2-D-Filter 612-1, 614-1 und 616-1 beinhalten kann und ein zweiter Satz von Filtern 610-2 drei 2-D-Filter 612-2, 614-2 und 616-2 beinhalten kann.
  • Jeder 2-D-Filter 612-1, 614-1 oder 616-1 im ersten Satz von Filtern 610-1 kann sich mit der entsprechenden Eingabe-Feature-Maps 622, 622 oder 624 falten und die Ergebnisse der Faltungen für die drei Eingabe-Feature-Maps können addiert werden, um eine Ausgabe-Feature-Map 630-1 in Ausgabe-Feature-Maps 630 zu erzeugen. Zum Beispiel können die Pixel im Filter 612-1 mit entsprechenden Pixeln im Fenster 622-1 auf der Eingabe-Feature-Map 622 multipliziert werden und die Produkte können addiert werden, um eine erste Teilsumme zu erzeugen. Die Pixel im Filter 614-1 können mit entsprechenden Pixeln im Fenster 624-1 auf der Eingabe-Feature-Map 624 multipliziert werden und die Produkte können addiert werden, um eine zweite Teilsumme zu erzeugen. Die Pixel im Filter 616-1 können mit entsprechenden Pixeln im Fenster 626-1 auf der Eingabe-Feature-Map 626 multipliziert werden und die Produkte können addiert werden, um eine dritte Teilsumme zu erzeugen. Die erste, zweite und dritte Teilsumme können zusammenaddiert werden, um ein Ausgabepixel 632-1 auf der Ausgabe-Feature-Map 630-1 zu erzeugen. Andere Ausgabepixel auf der Ausgabe-Feature-Map 630-1 können auf dieselbe Weise erzeugt werden, indem die Fenster oder Filter auf den Eingabe-Feature-Maps zusammen verschoben werden.
  • Gleichermaßen kann jeder 2-D-Filter 612-2, 614-2 oder 616-2 im zweiten Satz von Filtern 610-2 kann sich mit der entsprechenden Eingabe-Feature-Maps 622, 622 oder 624 falten und die Ergebnisse der Faltungen für die drei Eingabe-Feature-Maps können summiert werden, um eine Ausgabe-Feature-Map 630-2 in Ausgabe-Feature-Maps 630 zu erzeugen. Zum Beispiel können die Pixel im Filter 612-2 mit entsprechenden Pixeln im Fenster 622-1 auf der Eingabe-Feature-Map 622 multipliziert werden und die Produkte können addiert werden, um eine erste Teilsumme zu erzeugen. Die Pixel im Filter 614-2 können mit entsprechenden Pixeln im Fenster 624-1 auf der Eingabe-Feature-Map 624 multipliziert werden und die Produkte können addiert werden, um eine zweite Teilsumme zu erzeugen. Die Pixel im Filter 616-2 können mit entsprechenden Pixeln im Fenster 626-1 auf der Eingabe-Feature-Map 626 multipliziert werden und die Produkte können addiert werden, um eine dritte Teilsumme zu erzeugen. Die erste, zweite und dritte Teilsumme können zusammenaddiert werden, um ein Ausgabepixel 632-2 auf der Ausgabe-Feature-Map 630-2 zu erzeugen. Andere Ausgabepixel auf der Ausgabe-Feature-Map 630-2 können auf dieselbe Weise erzeugt werden, indem die Fenster oder Filter auf den Eingabe-Feature-Maps zusammen verschoben werden.
  • Der Betrieb eines neuronalen Netzes (z. B. das Ziehen einer Schlussfolgerung), wie durch die vorstehend erörterten Modelle veranschaulicht, umfasst im Allgemeinen ein Abrufen von Eingabedaten oder Eingabeaktivierungen, ein paralleles Ausführen von Multiplikations- und Akkumulationsoperationen für jeden Knoten in einer Schicht und ein Bereitstellen von Ausgabeaktivierungen. Die optimale Leistung eines neuronalen Netzes, gemessen an der Reaktionszeit, kann erreicht werden, wenn eine Hardwarearchitektur zu hochgradig parallelisierten Berechnungen fähig ist. Zentrale Verarbeitungseinheiten (Central Processing Units - CPU), die auch als universelle Verarbeitungseinheiten bezeichnet werden können, können mehrere Kerne aufweisen (z. B. 2 bis 64 oder mehr Kerne) und können die Parallelität durch die Verwendung mehrerer Ausführungs-Threads erhöhen. CPU-Kerne sind jedoch tendenziell für die sequentielle Verarbeitung optimiert. Aus diesem und anderen Gründen neigen CPU daher zu langsamen Reaktionszeiten, wenn sie eine Schlussfolgerung für ein neuronales Netz ziehen. Grafikprozessoren (Graphics Processing Units - GPU) können Parallelität erreichen, indem sie Tausende von kleinen und effizienten Kernen aufweisen, die speziell für die Durchführung paralleler Berechnungen konfiguriert sind. GPU können daher beim Ausführen eines neuronalen Netzes eine weitaus bessere Leistung erzielen als eine CPU. Einzelne GPU-Berechnungs-Engines können jedoch immer noch in erster Linie sequentiell sein, so dass Speicheroperationen erforderlich sind, damit die Ausgaben einer Berechnungs-Engine an die Eingaben einer anderen geliefert werden. Die Geschwindigkeit eines neuronalen Netzes kann auch durch die Speicherlatenz oder die Datenübertragungsbandbreite begrenzt sein.
  • Spezielle oder domänenspezifische Prozessoren neuronaler Netze können beim Ausführen eines neuronalen Netzes eine bessere Leistung als sowohl CPU als auch GPU erreichen. Prozessoren neuronaler Netze können eine räumliche Architektur verwenden, die ein Verarbeitungselement (processing element - PE)-Array beinhaltet, in dem die Verarbeitungselemente Verarbeitungsketten bilden und Daten direkt von einem Verarbeitungselement zu einem anderen weiterleiten können. Dies kann die Anzahl der Speichertransaktionen erheblich reduzieren. In einigen Beispielen können die Gewichte oder Eingaben vorab in das Verarbeitungselement-Array geladen werden. In einigen Beispielen können Prozessoren neuronaler Netze auch einen On-Chip-Puffer beinhalten, der aus dem Prozessorspeicher gelesene Werte speichern kann und der Werte an mehrere Berechnungs-Engines im Prozessor verteilen kann. Die Berechnungs-Engines können ferner eine kleine lokale Registerdatei (z. B. einen kleinen Speicher) zum Speichern von Zwischenergebnissen beinhalten. Eine Speicherhierarchie auf dem Chip kann die Effizienz des Betriebs eines neuronalen Netzes verbessern, indem Speicherlatenzen reduziert werden.
  • 7 ist ein Blockdiagramm, das ein Beispiel einer integrierten Schaltungsvorrichtung zum Durchführen von neuronalen Netzoperationen, wie etwa Tensor-Operationen, gemäß bestimmten Ausführungsformen veranschaulicht. Das in 7 gezeigte Beispiel beinhaltet einen Beschleuniger 702. In verschiedenen Beispielen kann der Beschleuniger 702 Berechnungen für einen Satz von Eingabedaten (z. B. Eingabedaten 750) unter Verwendung eines Verarbeitungselement-Arrays 710, einer Aktivierungs-Engine 716 und/oder einer Pooling-Engine 718 ausführen. In einigen Beispielen kann der Beschleuniger 702 eine integrierte Schaltungskomponente eines Prozessors sein, wie etwa ein Prozessor eines neuronalen Netzes. Der Prozessor kann andere integrierte Schaltungskomponenten aufweisen, einschließlich zusätzlicher Beschleuniger-Engines.
  • In einigen Ausführungsformen kann der Beschleuniger 702 ein Speichersubsystem 704 (z. B. Zustandspuffer) beinhalten, das mehrere Speicherbänke 714 beinhaltet. Auf jede Speicherbank 714 kann unabhängig zugegriffen werden, was bedeutet, dass das Lesen einer Speicherbank nicht vom Lesen einer anderen Speicherbank abhängt. Ebenso beeinflusst oder beschränkt das Schreiben in eine Speicherbank das Schreiben in eine andere Speicherbank nicht. In einigen Fällen kann jede Speicherbank gleichzeitig gelesen und geschrieben werden. Es können verschiedene Techniken verwendet werden, um unabhängig auf Speicherbänke 714 zugreifen zu können. Beispielsweise kann jede Speicherbank eine physikalisch separate Speicherkomponente sein, die einen Adressraum aufweist, der getrennt und unabhängig von den Adressräumen jeder anderen Speicherbank ist. In diesem Beispiel kann jede Speicherbank mindestens einen Lesekanal aufweisen und kann mindestens einen separaten Schreibkanal aufweisen, der gleichzeitig verwendet werden kann. In diesen Beispielen kann das Speichersubsystem 704 einen gleichzeitigen Zugriff auf die Lese- oder Schreibkanäle mehrerer Speicherbänke ermöglichen. Als weiteres Beispiel kann das Speichersubsystem 704 eine Arbitrierungslogik beinhalten, so dass eine Arbitrierung beispielsweise zwischen den Ausgaben mehrerer Speicherbänke 714 dazu führen kann, dass mehr als eine Ausgabe einer Speicherbank verwendet wird. In diesen und anderen Beispielen kann jede Speicherbank unabhängig von jeder anderen betrieben werden, obwohl sie global durch das Speichersubsystem 704 verwaltet wird.
  • Wenn die Speicherbänke 714 unabhängig zugänglich sind, kann dies die Effizienz des Beschleunigers 702 erhöhen. Zum Beispiel können Werte gleichzeitig gelesen und an jede Zeile des Verarbeitungselement-Arrays 710 bereitgestellt werden, so dass das gesamte Verarbeitungselement-Array 710 in einem Taktzyklus verwendet werden kann. Als weiteres Beispiel können die Speicherbänke 714 zur gleichen Zeit gelesen werden, in der Ergebnisse, die durch das Verarbeitungselement-Array 710 berechnet werden, in das Speichersubsystem 704 geschrieben werden. Im Gegensatz dazu kann ein einzelner Speicher möglicherweise nur einen Lese- oder Schreibvorgang gleichzeitig ausführen. Bei einem einzelnen Speicher können beispielsweise mehrere Taktzyklen erforderlich sein, um Eingabedaten für jede Zeile des Verarbeitungselement-Arrays 710 zu lesen, bevor das Verarbeitungselementarray 710 gestartet werden kann.
  • In verschiedenen Implementierungen kann das Speichersubsystem 704 dazu konfiguriert sein, gleichzeitig mehrere Clients zu bedienen, einschließlich des Verarbeitungselement-Arrays 710, der Aktivierungs-Engine 716, der Pooling-Engine 718 und beliebiger externer Clients, die über eine Kommunikationsstruktur 720 auf das Speichersubsystem 704 zugreifen. In einigen Implementierungen kann die Fähigkeit, mehrere Clients bedienen zu können, bedeuten, dass das Speichersubsystem 704 mindestens so viele Speicherbänke hat, wie Clients vorhanden sind. In einigen Fällen kann jede Zeile des Verarbeitungselement-Arrays 710 als separater Client zählen. In einigen Fällen kann jede Spalte des Verarbeitungselement-Arrays 710 ein Ergebnis ausgeben, so dass jede Spalte als separater Schreib-Client zählen kann. In einigen Fällen kann die Ausgabe aus dem Verarbeitungselement-Array 710 in die Speicherbänke 714 geschrieben werden, die dann anschließend Eingabedaten für das Verarbeitungselement-Array 710 bereitstellen können. Als weiteres Beispiel können die Aktivierungs-Engine 716 und die Pooling-Engine 718 mehrere Ausführungskanäle beinhalten, von denen jeder separate Speicher-Clients sein kann. Speicherbänke 714 können beispielsweise unter Verwendung von statischem Direktzugriffsspeicher (SRAM) implementiert werden.
  • In verschiedenen Implementierungen kann das Speichersubsystem 704 eine Steuerlogik beinhalten. Die Steuerlogik kann beispielsweise die Adressräume jeder der Speicherbänke 714 verfolgen, Speicherbänke 714 zum Lesen oder Schreiben identifizieren und/oder Daten zwischen Speicherbänken 714 bewegen. In einigen Implementierungen können die Speicherbänke 714 mit bestimmten Clients fest verdrahtet sein. Zum Beispiel kann ein Satz von Speicherbänken 714 fest verdrahtet sein, um Werte an die Zeilen des Verarbeitungselement-Arrays 710 bereitzustellen, wobei eine Speicherbank jede Zeile bedient. Als weiteres Beispiel kann ein Satz von Speicherbänken fest verdrahtet sein, um Werte von Spalten des Verarbeitungselement-Arrays 710 zu empfangen, wobei eine Speicherbank Daten für jede Spalte empfängt.
  • Das Verarbeitungselement-Array 710 ist die Berechnungsmatrix des Beschleunigers 702. Das Verarbeitungselement-Array 710 kann beispielsweise unter anderem parallele Integration, Faltung, Korrelation und/oder Matrixmultiplikation ausführen. Das Verarbeitungselement-Array 710 beinhaltet mehrere Verarbeitungselemente 711, die in Zeilen und Spalten angeordnet sind, so dass Ergebnisse, die von einem Verarbeitungselement 711 ausgegeben werden, direkt in ein anderes Verarbeitungselement 711 eingegeben werden können. Verarbeitungselemente 711, die sich nicht an den Außenkanten des Verarbeitungselement-Arrays 710 befinden, können somit Daten zur Verarbeitung von anderen Verarbeitungselementen 711 statt vom Speichersubsystem 704 empfangen.
  • In verschiedenen Beispielen verwendet das Verarbeitungselement-Array 710 eine systolische Ausführung, bei der Daten in regelmäßigen Abständen aus verschiedenen Richtungen an jedem Verarbeitungselement 711 ankommen. In einigen Beispielen können Eingabedaten von links in das Verarbeitungselement-Array 710 fließen und Gewichtswerte können oben geladen werden. In einigen Beispielen können Gewichte und Eingabedaten von links fließen und Teilsummen können von oben nach unten fließen. In diesen und anderen Beispielen bewegt sich eine Multiplikations- und Akkumulationsoperation durch das Verarbeitungselement-Array 710 als eine diagonale Wellenfront, wobei sich Daten nach rechts und unten über das Array bewegen. Steuersignale können gleichzeitig mit Gewichten auf der linken Seite eingegeben werden und können mit der Berechnung quer und abwärts fließen.
  • In verschiedenen Implementierungen bestimmt die Anzahl von Spalten im Verarbeitungselement-Array 710 die Rechenkapazität des Verarbeitungselement-Arrays 710, und die Anzahl von Zeilen bestimmt die erforderliche Speicherbandbreite zum Erzielen einer maximalen Nutzung des Verarbeitungselement-Arrays 710. Das Verarbeitungselement-Array 710 kann beispielsweise 64 Spalten und 128 Zeilen oder eine andere Anzahl von Spalten und Zeilen aufweisen.
  • Ein Beispiel für ein Verarbeitungselement 711 ist in 7 in einem eingefügten Diagramm veranschaulicht. Wie durch dieses Beispiel veranschaulicht, kann das Verarbeitungselement 711 eine Multiplikator-Akkumulator-Schaltung beinhalten. Eingaben von links können zum Beispiel Eingabedaten i und einen Gewichtswert w beinhalten, wobei die Eingabedaten ein Wert sind, der entweder aus einem Satz von Eingabedaten oder einem Satz von Zwischenergebnissen entnommen wurde und der Gewichtswert aus einem Satz von Gewichtswerten stammt, die eine Schicht des neuronalen Netzes mit der nächsten verbinden. Ein Satz von Eingabedaten kann beispielsweise ein Bild, das zur Identifizierung oder Objekterkennung übertragen wird, ein Audioclip, der zur Spracherkennung bereitgestellt wird, eine Textzeichenfolge für die Verarbeitung natürlicher Sprache oder maschinelle Übersetzung oder der aktuelle Stand eines Spiels, das Analyse benötigt, um unter anderem einen nächsten Zug zu bestimmen, sein. In einigen Beispielen werden die Eingabedaten und der Gewichtswert rechts ausgegeben, um in das nächste Verarbeitungselement 711 eingegeben zu werden.
  • In dem veranschaulichten Beispiel kann eine Eingabe von oben eine Teilsumme p_in beinhalten, die entweder von einem anderen Verarbeitungselement 711 oder von einer vorherigen Berechnungsrunde durch das Verarbeitungselement-Array 710 bereitgestellt wird. Wenn eine Berechnung für einen neuen Satz von Eingabedaten gestartet wird, kann die oberste Zeile des Verarbeitungselement-Arrays 710 einen festen Wert für p_in, wie etwa null, empfangen. Wie durch dieses Beispiel veranschaulicht, werden i und w miteinander multipliziert und das Ergebnis wird mit p_in summiert, um eine neue Teilsumme p_out zu erzeugen, die in ein anderes Verarbeitungselement 711 eingegeben werden kann. Verschiedene andere Implementierungen des Verarbeitungselements 711 sind möglich.
  • Ausgaben aus der letzten Zeile im Verarbeitungselement-Array 710 können temporär in einem Ergebnispuffer 712 (z. B. einem Partialsummen-(PSUM)-Puffer) gespeichert werden. Die Ergebnisse können Zwischenergebnisse sein, die in die Speicherbänke 714 geschrieben werden können, um dem Verarbeitungselement-Array 710 für zusätzliche Berechnungen bereitgestellt zu werden. Alternativ können die Ergebnisse Endergebnisse sein, die, sobald sie in die Speicherbänke 714 geschrieben sind, aus dem Speichersubsystem 704 über die Kommunikationsstruktur 720 gelesen werden können, um durch das System ausgegeben zu werden.
  • In einigen Implementierungen beinhaltet der Beschleuniger 702 eine Aktivierungs-Engine 716. In diesen Implementierungen kann die Aktivierungs-Engine 716 die Ergebnisse aus dem Verarbeitungselement-Array 710 zu einer oder mehreren Ausgabeaktivierungen kombinieren. Beispielsweise können für ein neuronales Faltungsnetz Faltungen von mehreren Kanälen summiert werden, um eine Ausgabeaktivierung für einen einzelnen Kanal zu erzeugen. In anderen Beispielen kann das Akkumulieren von Ergebnissen aus einer oder mehreren Spalten im Verarbeitungselement-Array 710 erforderlich sein, um eine Ausgabeaktivierung für einen einzelnen Knoten in dem neuronalen Netz zu erzeugen. In einigen Beispielen kann die Aktivierungs-Engine 716 umgangen werden.
  • In verschiedenen Beispielen kann die Aktivierungs-Engine 716 mehrere separate Ausführungskanäle beinhalten. In diesen Beispielen können die Ausführungskanäle den Spalten des Verarbeitungselement-Arrays 710 entsprechen und können eine Operation an den Ausgaben einer Spalte durchführen, deren Ergebnis im Speichersubsystem 704 gespeichert werden kann. In diesen Beispielen kann die Aktivierungs-Engine 716 in der Lage sein, zwischen 1 und N parallele Berechnungen durchzuführen, wobei N gleich der Anzahl von Spalten im Verarbeitungselement-Array 710 ist. In einigen Fällen können eine oder mehrere der Berechnungen gleichzeitig durchgeführt werden. Beispiele für Berechnungen, die jeder Ausführungskanal durchführen kann, beinhalten neben anderen Beispielen Exponentialwerte, Quadrate, Quadratwurzeln, Identitäten, binäre Schritte, bipolare Schritte, Sigmoide und Rampen.
  • In einigen Implementierungen kann der Beschleuniger 702 eine Pooling-Engine 718 beinhalten. Pooling ist ein Kombinieren von Ausgaben der Spalten des Verarbeitungselement-Arrays 710. Das Kombinieren kann beispielsweise ein Berechnen eines Maximalwerts, eines Minimalwerts, eines Mittelwerts, eines Medianwerts, einer Summation, einer Multiplikation oder einer anderen logischen oder mathematischen Kombination beinhalten. In verschiedenen Beispielen kann die Pooling-Engine 718 mehrere Ausführungskanäle beinhalten, die mit Werten aus entsprechenden Spalten des Verarbeitungselement-Arrays 710 arbeiten können. In diesen Beispielen kann die Pooling-Engine 718 in der Lage sein, zwischen 1 und N parallele Berechnungen durchzuführen, wobei N gleich der Anzahl von Spalten im Verarbeitungselement-Array 710 ist. In verschiedenen Beispielen können Ausführungskanäle der Pooling-Engine 718 parallel und/oder gleichzeitig arbeiten. In einigen Beispielen kann die Pooling-Engine 718 umgangen werden.
  • Hierin können die Aktivierungs-Engine 716 und die Pooling-Engine 718 gemeinsam als Ausführungs-Engines bezeichnet werden. Das Verarbeitungselement-Array 710 ist ein weiteres Beispiel einer Ausführungs-Engine. Ein weiteres Beispiel für eine Ausführungs-Engine ist eine Direct Memory Access (DMA)-Engine, die sich außerhalb des Beschleunigers 702 befinden kann.
  • Eingabedaten 750 können über die Kommunikationsstruktur 720 ankommen. Die Kommunikationsstruktur 720 kann den Beschleuniger 702 mit anderen Komponenten eines Prozessors verbinden, wie etwa einer DMA-Engine, die Eingabedaten 750 von einer Eingabe/Ausgabe-(E/A)-Vorrichtung, einem Speicherlaufwerk oder einer Netzwerkschnittstelle erhalten kann. Eingabedaten 750 können beispielsweise eindimensionale Daten, wie etwa eine Zeichenkette oder Zahlenfolge, oder zweidimensionale Daten, wie etwa ein Array von Pixelwerten für ein Bild oder Frequenz- und Amplitudenwerte über der Zeit für ein Audiosignal, sein. In einigen Beispielen können die Eingabedaten 750 dreidimensional sein, wie dies beispielsweise bei den von einem selbstfahrenden Auto verwendeten Situationsinformationen oder Virtual-Reality-Daten der Fall sein kann. In einigen Implementierungen kann das Speichersubsystem 704 einen separaten Puffer für Eingabedaten 750 beinhalten. In einigen Implementierungen können die Eingabedaten 750 in den Speicherbänken 714 gespeichert werden, wenn der Beschleuniger 702 die Eingabedaten 750 empfängt.
  • In einigen Beispielen kann der Beschleuniger 702 eine Verarbeitungs-Engine für das neuronale Netz implementieren. In diesen Beispielen kann der Beschleuniger 702 für einen Satz von Eingabedaten 750 ein neuronales Netz durchführen, um eine Aufgabe durchzuführen, für die das neuronale Netz trainiert wurde. Das Ausführen eines neuronalen Netzes an einem Satz von Eingabedaten kann als Schlussfolgerung oder Ziehen einer Schlussfolgerung bezeichnet werden.
  • Die Gewichte für das neuronale Netz können im Speichersubsystem 704 zusammen mit Eingabedaten 750, mit denen das neuronale Netz arbeiten wird, gespeichert werden. Das neuronale Netz kann auch Anweisungen beinhalten, die das Verarbeitungselement-Array 710 programmieren können, um verschiedene Berechnungen an den Gewichten und den Eingabedaten durchzuführen. Die Befehle können auch im Speichersubsystem 704, in Speicherbänken 714 oder in einem separaten Befehlspuffer gespeichert werden. Das Verarbeitungselement-Array 710 kann Zwischenergebnisse ausgeben, die die Ausgaben einzelner Schichten des neuronalen Netzes darstellen. In einigen Fällen können die Aktivierungs-Engine 716 und/oder die Pooling-Engine 718 für Berechnungen aktiviert werden, die von bestimmten Schichten des neuronalen Netzes angefordert werden. Der Beschleuniger 702 kann die Zwischenergebnisse im Speichersubsystem 704 speichern, um sie in das Verarbeitungselement-Array 710 einzugeben, um Ergebnisse für die nächste Schicht des neuronalen Netzes zu berechnen. Das Verarbeitungselement-Array 710 kann ferner Endergebnisse von einer letzten Schicht des neuronalen Netzes ausgeben. Die Endergebnisse können im Speichersubsystem 704 gespeichert und dann in den Hostprozessorspeicher oder an einen anderen Ort kopiert werden.
  • 8 veranschaulicht ein vereinfachtes Beispiel einer Rechen-Engine 800, die ein Verarbeitungselement (processing element - PE)-Array 820 gemäß bestimmten Ausführungsformen beinhaltet. Die Rechen-Engine 800 kann ein vereinfachtes Beispiel des Beschleunigers 702 oder des PE-Arrays 710 sein. In dem in 8 gezeigten Beispiel kann das Verarbeitungselement-Array 820 ein N×M-Array von PE mit N PE in jeder von M Spalten und M PE in jeder von N Zeilen beinhalten. In einem Beispiel kann N 128 sein und M kann 64 sein, so dass das PE-Array 820 8192 PE beinhalten kann.
  • Jedes PE kann einen Zeileneingabebus 822, einen Spalteneingabebus 824, einen Spaltenausgabebus 826 und einen Zeilenausgabebus 828 beinhalten. Ein PE kann über den Zeileneingabebus 822 Eingaben von einem vorangehenden PE (links) in derselben Zeile (oder von einer externen Schaltung) empfangen. Ein PE kann auch Eingaben von einem vorhergehenden PE (oben) in derselben Spalte (oder von einer externen Schaltung) über den Spalteneingabebus 824 empfangen. Ein PE kann Gleitkomma- oder Ganzzahl-Rechenoperationen (z. B. Multiplizieren und Akkumulieren (MAC)) basierend auf den Eingaben durchführen und das Ergebnis der Rechenoperationen an ein nachfolgendes (niedrigeres) PE in derselben Spalte (oder an eine externe Schaltung) über den Spaltenausgabebus 826 übertragen. Ein PE kann die Eingaben auch über den Zeilenausgabebus 828 an ein nachfolgendes PE (rechts) in derselben Zeile weiterleiten.
  • Jede Zeile des PE-Arrays 820 kann einen Eingabedatensatz verarbeiten, der mehrere Eingabedatenelemente umfasst, wie etwa einen eindimensionalen Vektor, der eine abgeflachte mehrdimensionale Matrix darstellt. Jede Spalte des PE-Arrays 820 kann eine gewichtete Summe von Eingabedatenelementen aus verschiedenen Eingabedatensätzen erzeugen. Wenn die Rechen-Engine 800 beispielsweise N Eingabepixelgruppen 810, 812, 814, ... und 816 verarbeiten soll, kann eine erste Zeile Eingabedatenelemente der Pixelgruppe 810 empfangen, eine zweite Zeile kann Eingabedatenelemente der Eingabepixelgruppe 812 empfangen, eine dritte Zeile kann Eingabedatenelemente der Eingabepixelgruppe 814 empfangen, ... und eine M-te Zeile kann Eingabedatenelemente der Eingabegruppe 816 empfangen. Jedes PE kann einen Multiplikator 823 beinhalten, der jeweils ein Eingabedatenelement verarbeiten würde. Zum Beispiel kann das PE ein Eingabedatenelement und ein Gewicht (z. B. vom Zeileneingabebus 822) empfangen und unter Verwendung des Multiplikators 823 ein Multiplikationsprodukt erzeugen, um ein gewichtetes Eingabedatenelement darzustellen. Das Gewicht kann ein Element eines Faltungskernels (z. B. Filter) oder ein Gewicht einer Verbindung zwischen Knoten auf zwei Schichten einer vollständig verbundenen Schicht sein. Außerdem kann das PE auch eine gewichtete Teilsumme vom vorhergehenden PE in derselben Spalte empfangen (z. B. vom Spalteneingabebus 824). Die gewichtete Teilsumme stellt die gewichtete Summe von Eingabedatenelementen von Eingabedatensätzen dar, die von PE in Zeilen über dem PE empfangen werden. Das PE kann ein addiertes 825 beinhalten, das das gewichtete Eingabedatenelement zu der gewichteten Teilsumme addieren und die aktualisierte gewichtete Teilsumme an das PE unten in derselben Spalte (z. B. durch den Spaltenausgabebus 826) weiterleiten kann. Das PE in der unteren Zeile jeder Spalte kann eine gewichtete Summe von Eingabedatenelementen erzeugen, die von allen PE in der Spalte empfangen werden.
  • In einigen Ausführungsformen können die Operationen jedes PE des PE-Arrays 820 mit einem Taktsignal synchronisiert werden, um die Interoperabilität zwischen dem PE-Array 820 und anderen Komponenten des Prozessors des neuronalen Netzes (z. B. Beschleuniger 702) zu verbessern. Jedes PE kann auch sequentielle Logikschaltungen (z. B. Register, Zwischenspeicher, Flip-Flops, Zustandsmaschinen usw.) beinhalten, um Eingabedaten, Gewichte und Ausgabedaten für die Addierer- und Multiplikatorschaltungen zu speichern und den Datenfluss in die und aus der Schaltung zu synchronisieren. Die sequentielle Logikschaltung jedes PE kann entweder durch das gleiche Taktsignal oder eine Kopie des Taktsignals getaktet werden, so dass Daten während der Taktzyklen sequentiell synchron in das PE und/oder aus diesem heraus verschoben werden können. Zum Beispiel kann in einigen Ausführungsformen in einem ersten Taktzyklus ein PE 820b der zweiten Zeile ein erstes Eingabedatenelement der Pixelgruppe 812 sowie eine Teilsumme, die ein gewichtetes erstes Eingabedatenelement der Pixelgruppe 810 von PE 820a der ersten Zeile umfasst, empfangen. Innerhalb des ersten Taktzyklus kann PE 820b das Eingabedatenelement mit einem Gewicht multiplizieren, das Multiplikationsprodukt zu der Teilsumme addieren, um eine aktualisierte Teilsumme zu erzeugen, und die aktualisierte Teilsumme in einem internen Register speichern. Im zweiten Taktzyklus kann das PE 820b die aktualisierte Teilsumme an ein PE 820c in der dritten Zeile darunter weiterleiten, das die Multiplikation und Akkumulation durchführen kann, um eine aktualisierte Teilsumme zu erzeugen. Im dritten Taktzyklus kann das PE 820c die aktualisierte Teilsumme an ein nächstes PE in der vierten Zeile darunter weiterleiten, das die Multiplikation und Akkumulation durchführen kann, um eine aktualisierte Teilsumme zu erzeugen. Die aktualisierte Teilsumme kann entlang jeder Spalte nach unten propagiert werden, bis sie vom PE 820d in der M-ten Zeile mit dem M-ten Taktzyklus an einen Ausgabepuffer 830 (auch als PSUM-Puffer bezeichnet) ausgegeben wird.
  • In einigen Implementierungen kann jede Spalte der Rechen-Engine 800 einem Verarbeitungsknoten einer Schicht eines neuronalen Netzes entsprechen und kann einen anderen Satz von Gewichten {wi} anwenden, um eine andere gewichtete Summe y = i = 0 n x i w i
    Figure DE112020003127T5_0007
    für jeden Eingabedatensatz {xi} zu erzeugen.
  • In einigen Ausführungsformen kann das Abbilden der vorstehend beschriebenen Tensoroperation mit Bezug auf die 5 und 6 und die Gleichung (3) auf ein PE-Array (z. B. PE-Array 820) zur Ausführung ein Abbilden jedes der M 3D-Filter auf eine jeweilige Spalte des PE-Arrays und ein Abbilden jeder der C Eingabe-Feature-Maps (z. B. C -Kanäle) in einer 3D-Eingabe auf eine entsprechende Zeile des PE-Arrays beinhalten. Beispielsweise können die H×W-Pixel in jeder 2-D-Eingabe-Feature-Map abgeflacht sein, um einen eindimensionalen Vektor zu bilden, und auf eine Zeile des PE-Arrays abgebildet sein. Die C×R×S-Gewichte oder Pixel in jedem 3D-Filter können abgeflacht sein, um einen eindimensionalen Vektor zu bilden, und auf eine Spalte des PE-Arrays abgebildet sein. Teilsummen können in jeder Spalte vertikal akkumuliert sein. In Fällen, in denen ein Batch von N 3D-Eingaben mit jeweils C Kanälen verarbeitet wird, kann jede Zeile des PE-Arrays auf N 2D-Eingabe-Feature-Maps abgebildet sein.
  • Wie vorstehend beschrieben, kann die Bewegung von Daten, wie etwa Eingabepixel, Filtergewichte und zu akkumulierende Teilsummen, zwischen PE den Zugriff auf die Zustandspuffer oder den chipexternen Speicher reduzieren. In einigen Ausführungsformen kann die Eingabe-Feature -Map stationär sein und die Gewichte der Filter können verschoben werden, was als „bildstationäres“ Modell bezeichnet werden kann. In einigen Ausführungsformen kann ein „gewichtsstationäres“ Modell verwendet werden, bei dem die Gewichte der Filter stationär sind (von einem Zustandspuffer in die Register im PE-Array vorgeladen) und sich das Bild bewegt (während der Berechnung aus dem Zustandspuffer geladen), um die Kosten für die Bewegung der Gewichte zu minimieren. In einigen Ausführungsformen kann die Ausgabe eines PE im Register am PE gespeichert werden und bleibt stationär, um die Kosten der Bewegung der Teilsummen zu minimieren, wobei sich die Eingabe-Feature-Maps und Gewichte durch das PE-Array und den Zustandspuffer bewegen können.
  • 9 veranschaulicht ein vereinfachtes Beispiel einer gewichtsstationären Faltungsoperation unter Verwendung eines Beispiels einer Rechen-Engine mit einem Verarbeitungselement-Array 910 gemäß bestimmten Ausführungsformen. In dem in 9 veranschaulichten Beispiel beinhaltet das Verarbeitungselement-Array 910 vier Zeilen und vier Spalten von Verarbeitungselementen 912. Die Eingaben 920 in das Verarbeitungselement-Array 910 können vier (entsprechend C) Eingabekanäle 922, 924, 926 und 928 beinhalten. Jeder Eingabekanal kann einer Eingabe-Feature-Map oder einer Eingabe-Feature-Map in jedem von N (N= 1 im Beispiel) von Eingaben entsprechen, wie vorstehend beschrieben. Jede Eingabe-Feature-Map in dem Beispiel kann eine 8×8-Matrix beinhalten und kann in einen eindimensionalen Vektor mit 64 Elementen abgeflacht sein. Das PE-Array 910 kann vier (entsprechend M) Ausgabe-Feature-Maps erzeugen, eine aus jeder Spalte des PE-Arrays 910.
  • Während der Faltungsoperation kann ein Gewicht in jedem 2-D-Filter (mit den Dimensionen R×S) der vier 2-D-Filter in jedem der vier 3-D-Filter (mit den Dimensionen C× R×S) in das PE-Array 910 vorgeladen sein. Wie beispielsweise in 9 gezeigt, kann das erste Element (r=0, s=0) in jedem der vier 2D-Filter für die erste Ausgabe-Feature-Map (entspricht dem ersten 3D-Filter oder m=0) in ein jeweiliges PE 912 der vier PE in einer ersten Spalte des PE-Arrays 910 geladen sein, das erste Element (z. B. r=0, s=0) in jedem der vier 2-D-Filter für die zweite Ausgabe-Feature-Map (entspricht dem zweiten 3-D-Filter oder m=1) kann in ein jeweiliges PE 912 der vier PE in einer zweiten Spalte des PE-Arrays 910 geladen sein, das erste Element (r=0, s=0) in jedem der vier 2-D-Filter für die dritte Ausgabemerk-Feature-Map (entspricht dem dritten 3D-Filter oder m=2) kann in ein jeweiliges PE 912 der vier PE in einer dritten Spalte des PE-Arrays 910 geladen sein und das erste Element (r=0, s=0) in jedem der vier 2-D-Filter für die vierte Ausgabe-Feature-Map (entspricht dem vierten 3-D-Filter oder m=3) kann in ein jeweiliges PE 912 der vier PE in einer vierten Spalte des PE-Arrays 910 geladen sein. Somit sind 16 Werte, die die ersten Elemente von 16 2-D-Filtern in vier 3-D-Filtern darstellen, in das PE-Array 910 geladen. Die Elemente in dem eindimensionalen Vektor für jede Eingabe-Feature-Map können dann beispielsweise aus einem Zustandspuffer in das PE-Array 910 verschoben werden und können mit den vorgeladenen Gewichten im PE-Array 910 multipliziert werden. Die Produkte in jeder Spalte für die vier Kanäle 922, 924, 926 und 928 können akkumuliert werden, um vier Teilsummenwerte zu erzeugen. Da die Elemente in dem eindimensionalen Vektor für jede Eingabe-Feature-Map in das PE-Array 910 verschoben werden, kann ein erster Teilsummenvektor PSUM0,0 (930) erzeugt werden, der vier Teilsummen-Subvektoren für vier Ausgabe-Feature-Maps beinhalten kann. In einigen Ausführungsformen kann das Verschieben der Elemente in den Eingabe-Feature-Maps auf den gewünschten Schritten für die Faltung basieren, so dass jeder Teilsummen-Subvektor für eine Ausgabe-Feature-Map die gewünschte Anzahl von Elementen beinhalten kann (z. B. E×F wie vorstehend beschrieben).
  • Sechzehn (16) Werte, die die zweiten Elemente (z. B. r=0, s=1) der 16 2-D-Filter in den vier 3-D-Filtern darstellen, können dann in das PE-Array 910 geladen werden. Die Elemente in dem eindimensionalen Vektor für jede Eingabe-Feature-Map können in das PE-Array 910 verschoben werden und können mit den vorgeladenen Gewichten im PE-Array 910 multipliziert werden. Die Produkte in jeder Spalte können akkumuliert werden, um einen zweiten Teilsummenvektor PSUM0,1 (932) zu erzeugen, der vier Teilsummen-Subvektoren für die vier Ausgabe-Feature-Maps beinhaltet. Jedes Element in den 16 2-D-Filtern kann in das PE-Array 910 geladen und mit den Elementen in dem eindimensionalen Vektor multipliziert werden, um einen Teilsummenvektor zu erzeugen, der vier Teilsummen-Subwerte für die vier Ausgabe-Feature-Maps beinhaltet, bis ein Teilsummenvektor PSUMR-1,S-1 (934), der dem Element (R-1, S-1) in jedem 2D-Filter entspricht und vier Teilsummen-Subvektoren für die vier Ausgabe-Feature-Maps beinhaltet, erzeugt wird. Die Teilsummen-Subvektoren in den Teilsummenvektoren PSUM0,0 (930), PSUM0,1 (932), ... und PSUMR-1,S-1 (934) und entsprechend jeder jeweiligen Ausgabe-Feature-Map können akkumuliert werden, um einen jeweiligen Vektor 940, 942, 944 oder 946 zu erzeugen, der einer abgeflachten Ausgabe-Feature-Map entsprechen kann.
  • Wie vorstehend beschrieben, kann ein Modell eines neuronalen Netzes mehrere Faltungsschichten beinhalten und somit kann das neuronale Netz mehrere Faltungsoperationen (z. B. Tensoroperationen) durchführen, um Features zu extrahieren und eine Schlussfolgerung zu ziehen. In einigen Ausführungsformen muss eine Faltungsoperation aufgrund der begrenzten Größe (z. B. 128×64) des PE-Arrays in einem Beschleuniger möglicherweise in mehrere seriell durchzuführende Faltungsoperationen aufgeteilt werden.
  • 10A veranschaulicht ein Beispiel einer Reihe von Operationen zum Ziehen einer Schlussfolgerung unter Verwendung eines Modells eines neuronalen Netzes. In dem in 10 gezeigten Beispiel müssen möglicherweise zwei Operationen einschließlich einer Operation A (1010) und einer Operation B (1020) durchgeführt werden, um eine Schlussfolgerung zu ziehen. Operation A (1010) kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Operation B (1020) kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Operation A (1010) und Operation B (1020) können nacheinander auf einer Rechen-Engine (z. B. einem Beschleuniger) in einem Zeitraum T durchgeführt werden. In einigen Ausführungsformen können, um den Durchsatz der Schlussfolgerungen zu erhöhen, mehrere Rechen-Engines verwendet werden, um parallel Schlussfolgerungen zu ziehen.
  • 10B veranschaulicht ein Beispiel für das Ziehen paralleler Schlussfolgerungen unter Verwendung mehrerer Rechen-Engines. Der Beschleuniger 1 kann beispielsweise Operation A (1010-1) und Operation B (1020-1) nacheinander während einer Zeitperiode T durchführen. Der Beschleuniger 2 kann Operation A (1010-2) und Operation B (1020-2) nacheinander während die gleiche Zeitdauer T durchführen. Somit können während der Zeitdauer T zwei Schlussfolgerungen gezogen werden. Somit können der Durchsatz des Systems und die durchschnittliche Zeit zum Ziehen einer Schlussfolgerung durch das System verbessert werden, indem mehrere Verarbeitungs-Engines parallel verwendet werden. Jedoch bleibt die Latenzzeit für eine Schlussfolgerung unverändert (z. B. T).
  • 11 veranschaulicht Beispiele von Operationen, die von mehreren Rechen-Engines durchgeführt werden, um parallele Schlussfolgerungen zu ziehen, wie beispielsweise in 10B gezeigt. Die von einer ersten Rechen-Engine durchgeführten Operationen können durch einen Datenflussgraphen 1100 veranschaulicht werden, und die von einer zweiten Rechen-Engine durchgeführten Operationen können durch einen Datenflussgraphen 1105 veranschaulicht werden. Der Datenflussgraph 1100 und der Datenflussgraph 1105 können beispielsweise von einem Compiler erzeugt werden. Die mehreren Rechen-Engines können sich auf derselben integrierten Schaltungsvorrichtung oder auf mehreren integrierten Schaltungsvorrichtungen befinden. Beispiele für Typen von Rechen-Engines können unter anderem ein Verarbeitungselement-Array, eine Aktivierungs-Engine und eine Pooling-Engine beinhalten. In verschiedenen Beispielen kann jeder Knoten in einem Datenflussgraphen eine Operation darstellen, die von einer bestimmten Rechen-Engine der integrierten Schaltungsvorrichtung durchzuführen ist. Die Operationen können zum Beispiel Speicherzugriff (z. B. Lesen/Schreiben), Berechnung und Entscheidungsfindung beinhalten.
  • In dem in 11 gezeigten Beispiel kann der Datenflussgraph 1100 einen Knoten 1110, der eine Speicherzugriffsoperation (z. B. eine Speicherleseoperation) beinhalten kann, einen Knoten 1120, der eine Faltungsoperation A (z. B. in einer ersten Faltungsschicht) für eine erste Schlussfolgerung beinhalten kann, einen Knoten 1130, der eine Speicherzugriffsoperation (z. B. einschließlich Speicherlese- und -schreiboperationen) beinhalten kann, einen Knoten 1140, der eine Faltungsoperation B (z. B. in einer zweiten Faltungsschicht) für die erste Schlussfolgerung beinhalten kann, und einen Knoten 1150, der eine Speicherzugriffsoperation (z. B. eine Speicherschreiboperation) und/oder eine Entscheidungsfindungsoperation beinhalten kann, beinhalten. Gleichermaßen kann der Datenflussgraph 1105 einen Knoten 1115, der eine Speicherzugriffsoperation (z. B. eine Speicherleseoperation) beinhalten kann, einen Knoten 1125, der eine Faltungsoperation A (z. B. in einer ersten Faltungsschicht) für eine zweite Schlussfolgerung beinhalten kann, einen Knoten 1135, der eine Speicherzugriffsoperation (z. B. einschließlich Speicherlese- und -schreiboperationen) beinhalten kann, einen Knoten 1145, der eine Faltungsoperation B (z. B. in einer zweiten Faltungsschicht) für die zweite Schlussfolgerung beinhalten kann, und einen Knoten 1155, der eine Speicherzugriffsoperation (z. B. eine Speicherschreiboperation) und/oder eine Entscheidungsfindungsoperation beinhalten kann, beinhalten.
  • Die Verbindungen zwischen Knoten im Datenflussgraphen 1100 und im Datenflussgraphen 1105 können als Kanten bezeichnet werden und können in einigen Fällen Daten- und/oder Ressourcenabhängigkeiten zwischen den Knoten darstellen. Eine Datenabhängigkeit kann beispielsweise auftreten, wenn eine Rechen-Engine die Ausgabe einer anderen Rechen-Engine als Eingabe für eine Berechnung verwendet. Zwei Operationen haben keine Datenabhängigkeit, wenn keine Operation die von der anderen Operation erzeugten Ausgabedaten als Eingabedaten verwenden muss. Eine Ressourcenabhängigkeit kann beispielsweise auftreten, wenn eine erste Rechen-Engine eine Speicherstelle verwenden muss, die auch eine zweite Rechen-Engine verwenden muss. Zum Beispiel muss die zweite Rechen-Engine möglicherweise einen Wert in die Speicherstelle schreiben, während die erste Rechen-Engine möglicherweise den Wert lesen und den Wert gleichzeitig in einer Berechnung verwenden muss. Als weiteres Beispiel kann es sein, dass die erste Ausführungs-Engine (beispielsweise aufgrund des begrenzten verfügbaren Speichers) einen Wert in eine Speicherstelle schreiben muss, während die zweite Rechen-Engine einen Wert in derselben Speicherstelle liest oder schreibt. Aufgrund der Daten- und/oder Ressourcenabhängigkeiten zwischen den Knoten müssen einige Operationen möglicherweise nacheinander durchgeführt werden, wobei eine Operation möglicherweise nur gestartet wird, nachdem ein Ereignis aufgetreten ist, und das Ereignis kann auftreten, wenn eine andere Operation abgeschlossen wurde.
  • In einigen Ausführungsformen kann es sein, dass zwischen einigen Operationen keine Daten- und/oder Ressourcenabhängigkeiten bestehen, oder die Operationen können so angeordnet sein, dass zwischen einigen Operationen keine Daten- und/oder Ressourcenabhängigkeiten bestehen. Daher müssen diese Operationen möglicherweise nicht nacheinander durchgeführt werden. Somit können diese Operationen von mehreren Rechen-Engines parallel durchgeführt werden, um die Latenzzeit zum Durchführen dieser Operationen zu reduzieren.
  • 12 veranschaulicht ein Beispiel für das Ziehen einer Schlussfolgerung unter Verwendung mehrerer Rechen-Engines gemäß bestimmten Ausführungsformen. In dem in 12 gezeigten Beispiel müssen möglicherweise zwei Operationen einschließlich einer Operation A und einer Operation B durchgeführt werden, um eine Schlussfolgerung zu ziehen. Operation A kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Operation B kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Operation A und Operation B können so ausgelegt sein, dass zwischen ihnen keine Daten- und/oder Ressourcenabhängigkeiten bestehen. Um eine erste Schlussfolgerung zu ziehen, kann der Beschleuniger 1 die Operation A (1210-1) durchführen und der Beschleuniger 2 kann die Operation B (1220-1) gleichzeitig durchführen. Somit kann die erste Schlussfolgerung in einem Zeitraum T/2 gezogen werden. Nach der ersten Schlussfolgerung kann der Beschleuniger 1 die Operation A (1210-2) durchführen und der Beschleuniger 2 kann die Operation B (1220-2) gleichzeitig während eines Zeitraums T/2 durchführen, um eine zweite Schlussfolgerung zu ziehen. Somit können der Durchsatz des Systems und die durchschnittliche Zeit zum Ziehen einer Schlussfolgerung verbessert werden, indem mehrere Verarbeitungs-Engines parallel verwendet werden, und die Latenzzeit zum Ziehen einer Schlussfolgerung kann ebenfalls reduziert werden (z. B. auf etwa T/2). Es ist anzumerken, dass der Zeitraum der Schlussfolgerung oder die Latenz T/2 beträgt, wenn nur die Rechenzeit unter Verwendung des PE-Arrays betrachtet wird, wobei andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind.
  • 13 veranschaulicht Beispiele von Operationen, die von mehreren Rechen-Engines durchgeführt werden, um eine Schlussfolgerung gemäß bestimmten Ausführungsformen zu ziehen, wie zum Beispiel in 12 gezeigt. Wie vorstehend in Bezug auf 12 beschrieben, kann jede Schlussfolgerung eine Operation A (z. B. eine Tensoroperation, wie etwa eine Faltungsoperation) und eine Operation B (z. B. eine Tensoroperation, wie etwa eine Faltungsoperation) beinhalten. Die von einer ersten Rechen-Engine durchgeführten Operationen können durch einen Datenflussgraphen 1300 veranschaulicht werden, und die von einer zweiten Rechen-Engine durchgeführten Operationen können durch einen Datenflussgraphen 1305 veranschaulicht werden. Der Datenflussgraph 1300 und der Datenflussgraph 1305 können beispielsweise von einem Compiler erzeugt werden. Die mehreren Rechen-Engines können sich auf derselben integrierten Schaltungsvorrichtung oder auf mehreren integrierten Schaltungsvorrichtungen befinden.
  • Der Datenflussgraph 1300 kann einen Knoten 1310, der eine Speicherzugriffsoperation (z. B. eine Speicherleseoperation) beinhalten kann, einen Knoten 1320, der eine Faltungsoperation A für eine erste Schlussfolgerung beinhalten kann, einen Knoten 1330, der eine Speicherzugriffsoperation (z. B. einschließlich Speicherschreib- und/oder -leseoperationen) und/oder einer Entscheidungsfindungsoperation beinhalten kann, einen Knoten 1340, der eine Faltungsoperation A für die zweite Schlussfolgerung beinhalten kann, und einen Knoten 1350, der eine Speicherzugriffsoperation (z. B. eine Speicherschreiboperation) und/oder eine Entscheidungsfindungsoperation beinhalten kann, beinhalten. Gleichermaßen kann der Datenflussgraph 1305 einen Knoten 1315, der eine Speicherzugriffsoperation (z. B. eine Speicherleseoperation) beinhalten kann, einen Knoten 1325, der eine Faltungsoperation A für eine erste Schlussfolgerung beinhalten kann, einen Knoten 1335, der eine Speicherzugriffsoperation (z. B. einschließlich Speicherschreib- und/oder -leseoperation) und/oder einer Entscheidungsfindungsoperation beinhalten kann, einen Knoten 1345, der eine Faltungsoperation B für die zweite Schlussfolgerung beinhalten kann, und einen Knoten 1355, der eine Speicherzugriffsoperation (z. B. eine Speicherschreiboperation) und/oder eine Entscheidungsfindungsoperation beinhalten kann, beinhalten. In einigen Ausführungsformen kann eine Vorhersage oder Entscheidung auf Grundlage der kombinierten Operationen am Knoten 1330 und am Knoten 1335 getroffen werden. In einigen Ausführungsformen kann eine Vorhersage oder Entscheidung auf Grundlage der kombinierten Operationen am Knoten 1350 und am Knoten 1355 getroffen werden.
  • In einigen Ausführungsformen kann es wünschenswert sein, in einigen Anwendungen so schnell wie möglich eine Vorhersage oder Entscheidung zu treffen, wie etwa einigen Anwendungen, bei denen die Vorhersage oder Entscheidung für eine Echtzeitsteuerung oder andere Echtzeitoperationen verwendet werden kann. In einigen Fällen kann eine frühe Vorhersage oder Entscheidung unter Verwendung eines Teils der Ausgabe-Feature-Maps, wie etwa einiger, aber nicht aller Ausgabe-Feature-Maps, oder eines Teils (z. B. einiger Zeilen) in jeder Ausgabe-Feature-Map getroffen werden. Somit kann eine Tensoroperation, wie etwa eine Faltungsoperation, in mehrere Unteroperationen geteilt werden, wobei jede Unteroperation von einer Rechen-Engine durchgeführt werden kann, um einen Teil der Ausgabe-Feature-Maps zu erzeugen, und die Ergebnisse der Unteroperationen Operationen können einzeln oder in Kombination verwendet werden, um eine frühere Vorhersage oder Entscheidung zu treffen.
  • 14 veranschaulicht ein Beispiel für das Ziehen einer Schlussfolgerung unter Verwendung mehrerer Rechen-Engines durch Aufteilen einer Operation eines neuronalen Netzes in Unteroperationen, die von den mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden können. In dem in 14 gezeigten Beispiel müssen möglicherweise zwei Operationen einschließlich einer Operation A und einer Operation B durchgeführt werden, um eine Schlussfolgerung zu ziehen. Operation A kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Operation B kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Es können Daten- und/oder Ressourcenabhängigkeiten zwischen Operation A und einer Operation B bestehen oder nicht.
  • Um die Latenz der Schlussfolgerung zu reduzieren, kann Operation A in Unteroperationen geteilt werden, die keine Daten- und/oder Ressourcenabhängigkeiten zwischen sich haben, so dass die Unteroperationen von verschiedenen Rechen-Engines parallel durchgeführt werden können, wobei jede Unteroperation von einer jeweiligen Rechen-Engine durchgeführt werden kann und einen Teil der Ausgabe-Feature-Maps erzeugen kann. Zum Beispiel kann Operation A in zwei Unteroperationen geteilt werden, die keine Daten- und/oder Ressourcenabhängigkeiten zwischen sich haben, wobei keine Unteroperation die von der anderen Unteroperation erzeugten Ausgabedaten als Eingabedaten verwenden muss. Jede Unteroperation kann dazu verwendet werden, einen Teil der Ergebnisse von Operation A zu erzeugen, wie etwa ein Erzeugen von 256 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps oder ein Erzeugen einer Hälfte der Zeilen in jeder der 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps. In ähnlicher Weise kann Operation B in Unteroperationen geteilt werden, die keine Daten- und/oder Ressourcenabhängigkeiten zwischen sich aufweisen, so dass die Unteroperationen parallel auf verschiedenen Rechen-Engines durchgeführt werden können. Da Unteroperationen für Operation B möglicherweise nicht durchgeführt werden, wenn Unteroperationen für Operation A durchgeführt werden, können Operation A und Operation B Daten- und/oder Ressourcenabhängigkeiten aufweisen.
  • Um eine erste Schlussfolgerung zu ziehen, kann ein Beschleuniger 1 eine Unteroperation OPA-1 (1410-1) von Operation A durchführen und ein Beschleuniger 2 kann eine Unteroperation OPA-2 (1410-2) von Operation A gleichzeitig durchführen. Somit kann Operation A innerhalb eines Zeitraums T/4 abgeschlossen werden, wenn nur die Rechenzeit unter Verwendung des PE-Arrays berücksichtigt wird, während andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind. In einigen Ausführungsformen können das Ergebnis der Unteroperation OPA-1 (1410-1) und das Ergebnis der Unteroperation OPA-2 (1410-2) einzeln verwendet werden, um eine Vorhersage oder Entscheidung zu treffen. Beispielsweise kann eine Vorhersage oder Entscheidung basierend auf einer Hälfte der Anzahl von Ausgabe-Feature-Maps oder basierend auf einer Hälfte jeder Ausgabe-Feature-Map getroffen werden. In einigen Ausführungsformen können das Ergebnis der Unteroperation OPA-1 (1410-1) und das Ergebnis der Unteroperation OPA-2 (1410-2) verkettet werden, um das vollständige Ergebnis der Operation A zu bilden.
  • In ähnlicher Weise kann der Beschleuniger 1 eine Unteroperation OPB-1 (1420-1) von Operation B durchführen und der Beschleuniger 2 kann eine Unteroperation OPB-2 (1420-2) von Operation B gleichzeitig durchführen. Somit kann Operation B innerhalb eines Zeitraums T/4 abgeschlossen werden, wenn nur die Rechenzeit unter Verwendung des PE-Arrays berücksichtigt wird, während andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind. In einigen Ausführungsformen können das Ergebnis der Unteroperation OPB-1 (1420-1) und das Ergebnis der Unteroperation OPB-2 (1420-2) einzeln verwendet werden, um eine Vorhersage oder Entscheidung zu treffen. Zum Beispiel kann eine Vorhersage oder Entscheidung auf Grundlage einer Hälfte der Anzahl von Ausgabe-Feature-Maps oder auf Grundlage einer Hälfte jeder Ausgabe-Feature-Map von Operation B getroffen werden. In einigen Ausführungsformen können das Ergebnis der Unteroperation OPB-1 (1420-1) und das Ergebnis der Unteroperation OPB-2 (1420-2) können verkettet werden, um das vollständige Ergebnis von Operation B zu bilden. Somit können Operation A und Operation B für die erste Schlussfolgerung in einem Zeitraum von etwa T/2 oder kürzer abgeschlossen werden, wenn mehr als zwei Rechen-Engines verwendet werden, um Operation A und Operation B durchzuführen, wenn nur die Rechenzeit unter Verwendung des PE-Arrays berücksichtigt wird, während andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind.
  • Nach der ersten Schlussfolgerung kann auf ähnliche Weise eine zweite Schlussfolgerung gezogen werden. Zum Beispiel kann der Beschleuniger 1 die Unteroperation OPA-1 (1430-1) von Operation A für die zweite Schlussfolgerung durchführen und der Beschleuniger 2 kann die Unteroperation OPA-2 (1430-2) von Operation A für die zweite Schlussfolgerung gleichzeitig durchführen. Der Beschleuniger 1 kann dann die Unteroperation OPA-1 (1440-1) von Operation B für die zweite Schlussfolgerung durchführen und der Beschleuniger 2 kann die Unteroperation OPA-2 (1440-2) von Operation B für die zweite Schlussfolgerung gleichzeitig durchführen. Die Gesamtzeit für die Durchführung von Operation A und Operation B für die zweite Schlussfolgerung kann T/2 oder kürzer sein, wenn mehr als zwei Rechen-Engines verwendet werden, um Operation A und Operation B durchzuführen, wenn nur die Rechenzeit unter Verwendung des PE-Arrays berücksichtigt wird, während andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind. Somit können der Durchsatz des Systems und die durchschnittliche Zeit zum Ziehen einer Schlussfolgerung verbessert werden, indem mehrere Verarbeitungs-Engines parallel verwendet werden, und die Latenzzeit zum Ziehen einer Schlussfolgerung kann ebenfalls reduziert werden (z. B. T/2, T/4 oder kürzer).
  • 15 veranschaulicht Beispiele von Operationen, die von mehreren Rechen-Engines durchgeführt werden, um eine Schlussfolgerung gemäß bestimmten Ausführungsformen zu ziehen, wie zum Beispiel in 14 gezeigt. Wie vorstehend in Bezug auf 14 beschrieben, kann jede Schlussfolgerung eine Operation A (z. B. eine Tensoroperation, wie etwa eine Faltungsoperation) und eine Operation B (z. B. eine Tensoroperation, wie etwa eine Faltungsoperation) beinhalten. Operation A und Operation B können jeweils in K Unteroperationen geteilt werden, die von mehreren (z. B. K) Rechen-Engines, wie etwa hierin offenbarten Beschleunigern, durchgeführt werden können. Die von einer ersten Rechen-Engine durchgeführten Operationen können durch einen Datenflussgraphen 1500 veranschaulicht werden, und die von einer K-ten Rechen-Engine durchgeführten Operationen können durch einen Datenflussgraphen 1505 veranschaulicht werden. Die Datenflussgraphen 1500, ... und 1505 können beispielsweise durch einen Compiler erzeugt werden. Die mehreren Rechen-Engines können sich auf derselben integrierten Schaltungsvorrichtung oder auf mehreren integrierten Schaltungsvorrichtungen befinden.
  • Der Datenflussgraph 1500 kann einen Knoten 1510, der eine Speicherzugriffsoperation (z. B. eine Speicherleseoperation) beinhalten kann, einen Knoten 1520, der eine Unteroperation A-1 von Operation A für eine Schlussfolgerung beinhalten kann, einen Knoten 1530, der eine Speicherzugriffsoperation (z. B. einschließlich Speicherschreib- und/oder -leseoperationen) und/oder einer (teilweisen) Entscheidungsfindungsoperation beinhalten kann, einen Knoten 1540, der eine Unteroperation B-1 von Operation B für die Schlussfolgerung beinhalten kann, und einen Knoten 1550, der eine Speicherzugriffsoperation (z. B. eine Speicherschreiboperation) und/oder eine Entscheidungsfindungsoperation beinhalten kann, beinhalten. Gleichermaßen kann der Datenflussgraph 1505 einen Knoten 1515, der eine Speicherzugriffsoperation (z. B. eine Speicherleseoperation) beinhalten kann, einen Knoten 1525, der eine Unteroperation A-K von Operation A für die Schlussfolgerung beinhalten kann, einen Knoten 1535, der eine Speicherzugriffsoperation (z. B. einschließlich Speicherschreib- und/oder -leseoperationen) und/oder einer (teilweisen) Entscheidungsfindungsoperation beinhalten kann, einen Knoten 1545, der eine Unteroperation B-K von Operation B für die Schlussfolgerung beinhalten kann, und einen Knoten 1555, der eine Speicherzugriffsoperation (z. B. eine Speicherschreiboperation) und/oder eine Entscheidungsfindungsoperation beinhalten kann, beinhalten. Wie vorstehend beschrieben, kann in einigen Ausführungsformen eine teilweise Vorhersage oder Entscheidung unabhängig voneinander am Knoten 1530, Knoten 1535, Knoten 1550 oder Knoten 1555 getroffen werden. In einigen Ausführungsformen kann eine teilweise Vorhersage oder Entscheidung auf Grundlage der kombinierten Operationen am Knoten 1530 und am Knoten 1535 getroffen werden. In einigen Ausführungsformen kann eine Vorhersage oder Entscheidung auf Grundlage der kombinierten Operationen am Knoten 1550 und am Knoten 1555 getroffen werden.
  • In dem in 14 und 15 gezeigten Beispiel, wenn Operation A und Operation B keine Daten- und/oder Ressourcenabhängigkeiten zwischen sich aufweisen, können die zwei oder mehr Unteroperationen für Operation A und die zwei oder mehr Unteroperationen für Operation B auf vier oder mehr Rechen-Engines parallel durchgeführt werden, um die Latenz für das Ziehen von Schlussfolgerungen auf beispielsweise etwa T/4 oder kürzer weiter zu reduzieren.
  • 16 veranschaulicht ein Beispiel für das Ziehen einer Schlussfolgerung unter Verwendung mehrerer Rechen-Engines (z. B. Beschleunigern) durch Aufteilen einer Operation eines neuronalen Netzes in Unteroperationen, die von den mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden können. In dem in 16 gezeigten Beispiel müssen möglicherweise zwei Operationen einschließlich einer Operation A und einer Operation B durchgeführt werden, um eine Schlussfolgerung zu ziehen. Operation A kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Operation B kann beispielsweise 512 Ausgabe-Feature-Maps aus 512 Eingabe-Feature-Maps erzeugen. Es können Daten- und/oder Ressourcenabhängigkeiten zwischen Operation A und Operation B bestehen.
  • Um die Latenzzeit zum Ziehen einer Schlussfolgerung zu reduzieren, kann Operation A in zwei oder mehr Unteroperationen geteilt werden, wie etwa die Unteroperationen OPA-1 und OPA-2. Operation B kann in zwei oder mehr Unteroperationen geteilt werden, wie etwa die Unteroperationen OPB-1 und OPB-2. Um eine erste Schlussfolgerung zu ziehen, kann der Beschleuniger 1 die Unteroperation OPA-1 (1610-1) durchführen, der Beschleuniger 2 kann die Unteroperation OPA-2 durchführen (1610-2), der Beschleuniger 3 kann die Unteroperation OPB-1 (1620-1) durchführen und der Beschleuniger 4 kann die Unteroperation OPB-2 (1620-2) durchführen. Somit kann die erste Schlussfolgerung von den vier Beschleunigern parallel während eines Zeitraums T/4 gezogen werden, wenn nur die Rechenzeit unter Verwendung des PE-Arrays berücksichtigt wird, während andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind. Gleichermaßen, um eine zweite Schlussfolgerung zu ziehen, kann der Beschleuniger 1 die Unteroperation OPA-1 (1630-1) durchführen, der Beschleuniger 2 kann die Unteroperation OPA-2 durchführen (1630-2), der Beschleuniger 3 kann die Unteroperation OPB-1 (1640-1) durchführen und der Beschleuniger 4 kann die Unteroperation OPB-2 (1640-2) durchführen. Somit kann die zweite Schlussfolgerung von den vier Beschleunigern parallel während eines Zeitraums T/4 gezogen werden, wenn nur die Rechenzeit unter Verwendung des PE-Arrays berücksichtigt wird, während andere Operationen, wie etwa Speicherzugriffsoperationen, nicht beinhaltet sind.
  • Wie vorstehend in Bezug auf die 5, 6 und 9 beschrieben, kann eine Tensoroperation, wie etwa eine Faltungsoperation, einen Eingabetensor verwenden, der N (z. B. einen oder mehrere) 3-D-Eingaben, jeweils beinhaltend C Kanäle von Eingabe-Feature-Maps (jeweils mit den Dimensionen H×W), und Filter, die M3D-Filter beinhalten, jeweils beinhaltend C Kanäle von 2D-Filtern (jeweils mit den Dimensionen R×S), beinhaltet. Somit kann der Eingabetensor N×C×H×W Pixelwerte beinhalten und die Filter können insgesamt M×C×R×S Gewichtswerte beinhalten. Wie ebenfalls vorstehend beschrieben, können die C Eingabekanäle (jeweils mit N×H×W Pixelwerten) auf die Zeilen des PE-Arrays abgebildet werden und die M Ausgabekanäle oder 3-D-Filter (jeweils beinhaltend C×R×S-Gewichtswerte) können auf die Spalten des PE-Arrays abgebildet werden. Daher kann es viele verschiedene Möglichkeiten geben, eine Tensoroperation, wie etwa eine Faltungsoperation, zu teilen. In einigen Ausführungsformen kann eine Tensoroperation so geteilt sein, dass jede Unteroperation einen Teil des Ausgabetensors (z. B. Ausgabe-Feature-Maps) erzeugen kann, der zum Treffen einer Vorhersage oder Entscheidung verwendet werden kann und/oder im Speicherplatz für den Ausgabetensor (z. B. im Speicherbereich verkettet) gespeichert werden kann, wobei keine zusätzliche arithmetische Berechnung (z. B. Summe oder Akkumulation) erforderlich sein kann, um die Ausgabe-Feature-Maps zu erzeugen.
  • 17 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen. Wie veranschaulicht, kann eine von einem PE-Array 1720 durchzuführende Faltungsoperation N 3-D-Eingaben, jeweils beinhaltend C Kanäle von 2-D-Eingabe-Feature-Maps (jeweils mit den Dimensionen H×W), und Filter, die M 3D-Filter beinhalten, jeweils beinhaltend C Kanäle von 2D-Filtern (jeweils mit den Dimensionen R×S), verwenden. Eingabe-Feature-Maps 1730 können auf C Eingabekanäle abgeflacht werden, von denen jeder N×H×W Pixelwerte beinhaltet, wobei jeder Eingabekanal möglicherweise auf eine Zeile im PE-Array 1720 abgebildet werden muss. Die Filter 1740 können auf M Kanäle abgeflacht werden, von denen jeder C×R×S-Gewichtswerte beinhaltet, wobei jeder der M Kanäle möglicherweise auf eine Spalte im PE-Array 1720 abgebildet werden muss. In dem in 17 gezeigten Beispiel kann M größer als die Anzahl der Spalten im PE-Array 1720 sein. Somit kann die Faltungsoperation nicht durch das PE-Array 1720 in einer Operation durchgeführt werden, wie sie vorstehend zum Beispiel in Bezug auf 9 beschrieben ist.
  • Gemäß bestimmten Ausführungsformen können die M 3-D-Filter (entsprechend den Ausgabekanälen), die für die Faltungsoperation verwendet werden, in K Gruppen geteilt werden, wobei jede Gruppe M/K 3-D-Filter oder Ausgabekanäle beinhalten kann. Somit kann die Faltungsoperation in K Unteroperationen geteilt werden, wobei jede Unteroperation M/K 3D-Filter und Eingabe-Feature-Maps 1730, die C Kanäle beinhalten, die jeweils N×H×W Pixelwerte beinhalten, verwenden kann, um Ausgabe-Feature-Maps auf M/K Ausgabekanälen zu erzeugen, wobei jeder Ausgabekanal N Ausgabe-Feature-Maps, von denen jede E×F Pixel beinhaltet, beinhalten kann. Die K Unteroperationen können von mehreren (z. B. K) vorstehend beschriebenen Rechen-Engines parallel durchgeführt werden, wobei jede Unteroperation von einer Rechen-Engine in kürzerer Zeit durchgeführt werden kann, da weniger zu ladende Gewichte sind und weniger Spalten für die Eingabepixelwerte in jedem Kanal der Eingabe-Feature-Maps vorhanden sind, um durch alle Spalten des PE-Arrays 1720 zu propagieren.
  • Beispielsweise kann eine erste Unteroperation von einem ersten Beschleuniger 1710-1 unter Verwendung eines PE-Arrays 1720-1 durchgeführt werden. Der erste Beschleuniger 1710-1 kann Eingabe-Feature-Maps 1730 und eine erste Gruppe von 3D-Filtern 1740-1, die M/K 3D-Filter beinhaltet, verwenden, um eine erste Gruppe von Ausgabe-Feature-Maps 1750-1 in M/K Ausgabekanälen zu erzeugen. Eine K-te Unteroperation kann durch den Beschleuniger K (1710-K) unter Verwendung eines PE-Arrays 1720-K durchgeführt werden. Der Beschleuniger K (1710-K) kann Eingabe-Feature-Maps 1730 und die K-te Gruppe von 3D-Filtern 1740-K, die M/K-3D-Filter beinhaltet, verwenden, um die K-te Gruppe von Ausgabe-Feature-Maps 1750-K in M/K Ausgabekanälen zu erzeugen. Die von den K Beschleunigern erzeugten Ausgabe-Feature-Maps sind die finalen Ausgabe-Feature-Maps der Faltungsoperation und somit ist keine zusätzliche Akkumulation erforderlich. Die von jedem der K Beschleuniger erzeugten Ausgabe-Feature-Maps können in einem Teil des Speicherplatzes für die Ausgabe-Feature-Maps der Faltungsoperation gespeichert werden und können dazu verwendet werden, eine Vorhersage oder Entscheidung zu treffen.
  • 18 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen. Wie veranschaulicht, kann eine von einem PE-Array 1820 durchzuführende Faltungsoperation N 3-D-Eingaben, jeweils beinhaltend C Kanäle von 2-D-Eingabe-Feature-Maps (jeweils mit den Dimensionen H×W), und 3-D-Filter 1840, die M 3D-Filter beinhalten, jeweils beinhaltend C Kanäle von 2D-Filtern (jeweils mit den Dimensionen R×S), verwenden, um Ausgabe-Feature-Maps 1850 zu erzeugen, die M Ausgabekanäle von Ausgabe-Feature-Maps beinhalten. Jeder Ausgabekanal kann N Ausgabe-Feature-Maps beinhalten, die jeweils E×F Pixel beinhalten. Eingabe-Feature-Maps 1830 können auf C Eingabekanäle abgeflacht werden, von denen jeder N×H×W Pixelwerte beinhaltet, wobei jeder Eingabekanal möglicherweise auf eine Zeile im PE-Array 1820 abgebildet werden muss. Die 3-D-Filter 1840 können auf M Kanäle abgeflacht werden, von denen jeder C×R×S-Gewichtswerte beinhaltet, wobei jeder der M Kanäle möglicherweise auf eine Spalte im PE-Array 1820 abgebildet werden muss.
  • Gemäß bestimmten Ausführungsformen können die C Kanäle von Eingabe-Feature-Maps 1830, die für die Faltungsoperation verwendet werden, in L Gruppen geteilt werden, wobei jede Gruppe N ×Hx W /L Pixel beinhalten kann. Somit kann die Faltungsoperation in L Unteroperationen geteilt werden, wobei jede Unteroperation M 3D-Filter und einen Teil der Eingabe-Feature-Maps 1830, die C Kanäle beinhalten, die jeweils NxHxW/L Pixelwerte beinhalten, verwenden kann, um einen Teil (z. B. ein paar Zeilen) jeder Ausgabe-Feature-Map auf MAusgabekanälen zu erzeugen, wobei jeder Ausgabekanal N/L Ausgabe-Feature-Maps, die jeweils E×F Pixel beinhalten, oder N Ausgabe-Feature-Maps, die jeweils E×F/L-Pixel beinhalten, beinhalten kann. Die L Unteroperationen können von mehreren (z. B. L) vorstehend beschriebenen Rechen-Engines parallel durchgeführt werden, wobei jede Unteroperation von einer Rechen-Engine in kürzerer Zeit durchgeführt werden kann, da weniger Eingabepixelwerte in jedem Kanal der Eingabe-Feature-Map vorhanden sind, um durch die PE in einer Zeile des PE-Arrays 1820 zu propagieren.
  • Beispielsweise kann eine erste Unteroperation von einem ersten Beschleuniger 1810-1 unter Verwendung eines PE-Arrays 1820-1 durchgeführt werden. Der erste Beschleuniger 1810-1 kann die M 3D-Filter 1840 und die Eingaben 1830-1, die C Eingabekanäle beinhalten, die jeweils N×H×W/L Pixelwerte beinhalten, verwenden, um eine erste Gruppe von Ausgabe-Feature-Maps 1850-1, die M Ausgabekanäle beinhalten, zu erzeugen, wobei jeder Ausgabekanal N/L Ausgabe-Feature-Maps oder N×E×F/L Pixel beinhalten kann. Wenn beispielsweise N = 1 ist, kann jeder Ausgabekanal 1/L (z. B. E/L Zeilen) einer Ausgabe-Feature-Map oder E×F/L Pixel beinhalten. Eine L-te Unteroperation kann durch den Beschleuniger L (1810-L) unter Verwendung eines PE-Arrays 1820-L durchgeführt werden. Der Beschleuniger L (1810-L) kann die M 3D-Filter 1840 und die Eingaben 1830-L, die C Eingabekanäle beinhalten, die jeweils N×H×W/L Pixelwerte beinhalten, verwenden, um eine L-te Gruppe von Ausgabe-Feature-Maps 1850-L, die M Ausgabekanäle beinhalten, zu erzeugen, wobei jeder Ausgabekanal N/L Ausgabe-Feature-Maps beinhalten kann. Wenn beispielsweise N = 1 ist, kann jeder Ausgabekanal 1/L (z. B. E/L Zeilen) einer Ausgabe-Feature-Map oder E×F/L Pixel beinhalten. Die von den L Beschleunigern erzeugten Ausgabe-Feature-Maps sind die finalen Ausgabe-Feature-Maps der Faltungsoperation und somit ist keine zusätzliche Akkumulation erforderlich. Die von jedem der L Beschleuniger erzeugten Ausgabe-Feature-Maps können in dem Speicherplatz für die Ausgabe-Feature-Maps der Faltungsoperation gespeichert werden und können dazu verwendet werden, eine Vorhersage oder Entscheidung zu treffen.
  • 19 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen. Wie veranschaulicht, kann eine von einem PE-Array 1920 durchzuführende Faltungsoperation N 3-D-Eingaben, jeweils beinhaltend C Kanäle von Eingabe-Feature-Maps (jeweils mit den Dimensionen H×W), und 3-D-Filter 1940, die M 3D-Filter beinhalten, jeweils beinhaltend C Kanäle von 2D-Filtern (jeweils mit den Dimensionen R×S), verwenden, um Ausgabe-Feature-Maps zu erzeugen, die M Ausgabekanäle von Ausgabe-Feature-Maps beinhalten. Jeder Ausgabekanal kann N Ausgabe-Feature-Maps beinhalten, die jeweils E×F Pixel beinhalten. Eingabe-Feature-Maps 1930 können auf C Eingabekanäle abgeflacht werden, von denen jeder N×H×W Pixelwerte beinhaltet, wobei jeder Eingabekanal möglicherweise auf eine Zeile im PE-Array 1920 abgebildet werden muss. Die 3-D-Filter 1940 können auf M Kanäle abgeflacht werden, von denen jeder CxRxS-Gewichtswerte beinhaltet, wobei jeder der M Kanäle möglicherweise auf eine Spalte im PE-Array 1920 abgebildet werden muss. In dem in 19 gezeigten Beispiel kann M größer als die Anzahl der Spalten im PE-Array 1920 sein. Somit kann die Faltungsoperation nicht durch das PE-Array 1920 in einer Operation durchgeführt werden, wie sie vorstehend zum Beispiel in Bezug auf 9 beschrieben ist.
  • Gemäß bestimmten Ausführungsformen können die C Kanäle von Eingabe-Feature-Maps 1930, die für die Faltungsoperation verwendet werden, in L Gruppen geteilt werden, wobei jede Gruppe N×H×W/L Pixel beinhalten kann. Zusätzlich können die M3-D-Filter 1940 (entsprechend den Ausgabekanälen), die für die Faltungsoperation verwendet werden, in K Gruppen geteilt werden, wobei jede Gruppe M/K 3-D-Filter oder Ausgabekanäle beinhalten kann. Somit kann die Faltungsoperation in L×K Unteroperationen geteilt werden, wobei jede Unteroperation M/K 3D-Filter und einen Teil der Eingabe-Feature-Maps 1930, die C Kanäle beinhalten, die jeweils N×H×W/L Pixelwerte beinhalten, verwenden kann, um einen Teil (z. B. ein paar Zeilen) jeder Ausgabe-Feature-Map auf M/K Ausgabekanälen zu erzeugen, wobei jeder Ausgabekanal N/L Ausgabe-Feature-Maps, die jeweils E×F Pixel beinhalten, beinhalten kann. Die L×K Unteroperationen können von mehreren (z. B. L×K) vorstehend beschriebenen Rechen-Engines parallel durchgeführt werden, wobei jede Unteroperation von einer Rechen-Engine in kürzerer Zeit durchgeführt werden kann, da weniger (z. B. ein L-tel) Eingabepixelwerte in jedem Kanal der Eingabe-Feature-Maps vorhanden sind, um durch weniger (z. B. ein K-tel) PE in jeder Zeile des PE-Arrays 1920 zu propagieren.
  • Beispielsweise kann eine erste Unteroperation von einem ersten Beschleuniger 1910-1 unter Verwendung eines PE-Arrays 1920-1 durchgeführt werden. Der erste Beschleuniger 1910-1 kann die M/K 3D-Filter (1940-1) und die Eingaben 1930-1, die C Kanäle beinhalten, die jeweils N×H×W/L Pixelwerte beinhalten, verwenden, um eine erste Gruppe von Ausgabe-Feature-Maps 1950-1 in M/K Ausgabekanäle zu erzeugen, wobei jeder Ausgabekanal N/L Ausgabe-Feature-Maps oder N×E×F/L Pixel beinhalten kann. Wenn beispielsweise N = 1 ist, kann jeder Ausgabekanal 1/L (z. B. E/L Zeilen) einer Ausgabe-Feature-Map oder E×F/L Pixel beinhalten. Eine (KxL)-te Unteroperation kann durch den Beschleuniger K×L (1910-K×L) unter Verwendung eines PE-Arrays 1920-K×L durchgeführt werden. Der Beschleuniger K×L (1910-K×L) kann die M/K 3D-Filter (1940-K) und die Eingaben 1930-L, die C Kanäle beinhalten, die jeweils N/L-Eingabe-Feature-Maps oder N×H×W/L Pixelwerte beinhalten, verwenden, um eine (K×L)-te Gruppe von Ausgabe-Feature-Maps 1950-KxL in M/K Ausgabekanälen zu erzeugen, wobei jeder Ausgabekanal N/L Ausgabe-Feature-Maps beinhalten kann. Wenn beispielsweise N = 1 ist, kann jeder Ausgabekanal 1/L (z. B. E/L Zeilen) einer Ausgabe-Feature-Map oder E×F/L Pixel beinhalten. Die von den K×L Beschleunigern erzeugten Ausgabe-Feature-Maps sind die finalen Ausgabe-Feature-Maps der Faltungsoperation und somit ist keine zusätzliche Akkumulation erforderlich. Die von jedem der KxL Beschleuniger erzeugten Ausgabe-Feature-Maps können 1/(K×L) der Ausgabe-Feature-Maps der Faltungsoperation sein und können in einem Speicherplatz für die Ausgabe-Feature-Maps der Faltungsoperation gespeichert werden oder können dazu verwendet werden, eine Vorhersage oder Entscheidung zu treffen.
  • In den Beispielen des Aufteilens einer Tensoroperation für ein neuronales Netz, die vorstehend in Bezug auf die 17-19 beschrieben sind, kann jede Unteroperation einen Teil der finalen Ausgabe-Feature-Maps erzeugen, der zum Treffen von Vorhersagen oder Entscheidungen verwendet werden kann und/oder im Speicherplatz für die Ausgabe-Feature-Maps (z. B. im Speicherbereich verkettet) gespeichert werden kann, wobei keine zusätzliche arithmetische Berechnung (z. B. Summe oder Akkumulation) erforderlich sein kann, um die finalen Ausgabe-Feature-Maps zu erzeugen. In einigen Ausführungsformen kann eine Tensoroperation so geteilt werden, dass jede Unteroperation eine Teilsumme der finalen Ausgabe-Feature-Maps erzeugen kann und die Teilsummen aus den Unteroperationen in zusätzlichen arithmetischen Berechnungen summiert werden können, um die finalen Ausgabe-Feature-Maps zu erzeugen oder die Schlussfolgerung zu ziehen.
  • 20 veranschaulicht ein Beispiel des Aufteilens einer Operation eines neuronalen Netzes in Unteroperationen, die von mehreren Rechen-Engines gemäß bestimmten Ausführungsformen parallel durchgeführt werden sollen. Wie veranschaulicht, kann eine von einem PE-Array 2020 durchzuführende Faltungsoperation N3-D-Eingaben, jeweils beinhaltend C Kanäle von Eingabe-Feature-Maps (jeweils mit den Dimensionen H×W), und 3-D-Filter 2040, die M 3D-Filter beinhalten, jeweils beinhaltend C Kanäle von 2D-Filtern (jeweils mit den Dimensionen R×S), verwenden, um Ausgabe-Feature-Maps zu erzeugen, die M Ausgabekanäle von Ausgabe-Feature-Maps beinhalten. Jeder Ausgabekanal kann N Ausgabe-Feature-Maps beinhalten, die jeweils E×F Pixel beinhalten. Eingabe-Feature-Maps 2030 können auf C Eingabekanäle abgeflacht werden, von denen jeder N×H×W Pixelwerte beinhaltet, wobei jeder Eingabekanal möglicherweise auf eine Zeile im PE-Array 2020 abgebildet werden muss. Die 3-D-Filter 2040 können auf M Kanäle abgeflacht werden, von denen jeder C×R×S-Gewichtswerte beinhaltet, wobei jeder der M Kanäle möglicherweise auf eine Spalte im PE-Array 2020 abgebildet werden muss. In dem in 20 gezeigten Beispiel kann C größer als die Anzahl der Zeilen im PE-Array 2020 sein. Somit kann die Faltungsoperation nicht durch das PE-Array 2020 in einer Operation durchgeführt werden, wie sie vorstehend zum Beispiel in Bezug auf 9 beschrieben ist.
  • Gemäß bestimmten Ausführungsformen können die C Kanäle von Eingabe-Feature-Maps 2030, die für die Faltungsoperation verwendet werden, in K Gruppen geteilt werden, wobei jede Gruppe C/K Kanäle von Eingabe-Feature-Maps beinhalten kann. Zusätzlich können die M 3-D-Filter 2040 (entsprechend den Ausgabekanälen), die für die Faltungsoperation verwendet werden, in K Gruppen geteilt werden, wobei jede Gruppe M 3-D-Filter, die jeweils C/K 2-D-Filter beinhalten, beinhalten kann. Somit kann die Faltungsoperation in K Unteroperationen geteilt werden, wobei jede Unteroperation die C/K 2D-Filter in jedem der M 3-D-Filter und einen Teil der Eingabe-Feature-Maps 2030, der C/K Kanäle von Eingabe-Feature-Maps beinhaltet, die jeweils N×H×W Pixelwerte beinhalten, verwenden kann, um Teilsummen-Feature-Maps für die Ausgabe-Feature-Maps auf M Ausgabekanälen zu erzeugen, wobei jeder Ausgabekanal N Teilsummen-Feature-Maps, von denen jede E×F Pixel beinhaltet, beinhalten kann. Die K Unteroperationen können von mehreren (z. B. K) vorstehend beschriebenen Rechen-Engines parallel durchgeführt werden, wobei jede Unteroperation von einer Rechen-Engine in kürzerer Zeit durchgeführt werden kann, da weniger auf das PE-Array zu ladende Gewichte vorhanden sind und weniger (z. B. ein K-tel) Zeilen für die Teilsumme vorhanden sind, um durch alle Zeilen des PE-Arrays 2020 zu propagieren.
  • Beispielsweise kann eine erste Unteroperation von einem ersten Beschleuniger 2010-1 unter Verwendung eines PE-Arrays 2020-1 durchgeführt werden. Der erste Beschleuniger 2010-1 Somit kann die C/K 2D-Filter in jedem der M 3-D-Filter 2040 und einen Teil der Eingabe-Feature-Maps 2030, der C/K Kanäle von Eingabe-Feature-Maps beinhaltet, verwenden, um Teilsummen-Feature-Maps 2050-1 für die Ausgabe-Feature-Maps auf den M Ausgabekanälen zu erzeugen, wobei jeder Ausgabekanal N Teilsummen-Feature-Maps, von denen jede E×F Pixel beinhaltet, beinhalten kann. Eine K-te Unteroperation kann durch den Beschleuniger K (2010-K) unter Verwendung eines PE-Arrays 2020-K durchgeführt werden, um zu erzeugen. Der Beschleuniger K (2010-K) kann die C/K 2D-Filter in jedem der M 3-D-Filter 2040 und einen Teil der Eingabe-Feature-Maps 2030, der C/K Kanäle von Eingabe-Feature-Maps beinhaltet, verwenden, um Teilsummen-Feature-Maps 2050-K für die Ausgabe-Feature-Maps auf den M Ausgabekanälen zu erzeugen, wobei jeder Ausgabekanal N Teilsummen-Feature-Maps, von denen jede E×F Pixel beinhaltet, beinhalten kann. Die Teilsummen-Feature-Maps für die von den K Beschleunigern erzeugten Ausgabe-Feature-Maps sind nicht die finalen Ausgabe-Feature-Maps der Faltungsoperation und es kann zusätzliche Akkumulation erforderlich sein, um die finalen Ausgabe-Feature-Maps zu erzeugen.
  • 21 ist ein Ablaufdiagramm 2100, das ein Beispiel eines Verfahrens zum Beschleunigen einer Tensoroperation durch paralleles Durchführen von Unteroperationen der Tensoroperation auf mehreren Rechen-Engines gemäß bestimmten Ausführungsformen veranschaulicht. Im Ablaufdiagramm 2100 beschriebene Operationen können beispielsweise von einem Compiler durchgeführt werden, der auf einem Host-System läuft, wie etwa dem Compiler und dem Host-System, die nachfolgend in Bezug auf 22 beschrieben sind. Obwohl das Ablaufdiagramm 2100 die Operationen als einen sequentiellen Prozess beschreiben kann, können in verschiedenen Ausführungsformen viele der Operationen parallel oder gleichzeitig durchgeführt werden. Außerdem kann die Reihenfolge der Operationen neu angeordnet werden. Ein Prozess kann zusätzliche Schritte aufweisen, die in der Figur nicht gezeigt sind. Darüber hinaus können Ausführungsformen der Verfahren durch Hardware, Software, Firmware, Middleware, Mikrocode, Hardwarebeschreibungssprachen oder eine beliebige Kombination davon implementiert werden. Bei Implementierung in Software, Firmware, Middleware oder Mikrocode können der Programmcode oder die Codesegmente zum Durchführen der zugeordneten Aufgaben in einem computerlesbaren Medium wie etwa einem Speichermedium gespeichert sein.
  • Bei Block 2110 kann ein Host-System ein Modell eines neuronalen Netzes, das eine erste Tensoroperation beinhaltet, wie etwa eine Faltungsoperation, empfangen. Die Tensoroperation kann dazu verwendet werden, einen Ausgabetensor zu erzeugen, der einen Satz von Ausgabe-Feature-Maps unter Verwendung eines Satzes von Eingabe-Feature-Maps und eines Satzes von Filtern beinhaltet. Wie vorstehend beschrieben (z. B. in den 5, 6, 9 und 17-20) kann der Satz von Eingabe-Feature-Maps in einigen Ausführungsformen C Eingabe-Feature-Maps für jeden von N Eingabedatensätzen beinhalten, der Satz von Filtern kann M Filter beinhalten, die jeweils C Filtermatrizen beinhalten, und der Satz von Ausgabe-Feature-Maps kann M Ausgabe-Feature-Maps für jeden der N Eingabedatensätze beinhalten, wobei jede der M Ausgabe-Feature-Maps für einen Eingabedatensatz ein Ergebnis einer Faltung zwischen den C -Eingabe-Feature-Maps des Eingabedatensatzes und den entsprechenden C Filtermatrizen in einem Filter der M Filter sein kann. In einigen Ausführungsformen kann M größer als die Gesamtzahl von Spalten eines zweidimensionalen Verarbeitungselement-Arrays in einer Rechen-Engine sein. In einigen Ausführungsformen kann C größer als die Gesamtzahl von Zeilen in einem zweidimensionalen Verarbeitungselement-Array in einer Rechen-Engine sein.
  • Bei Block 2120 kann ein auf dem Host-System ausgeführter Compiler die erste Tensoroperation in Unteroperationen teilen. Die Unteroperationen können zwei oder mehr Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den zwei oder mehr Unteroperationen aufweisen. Jede der zwei oder mehr Unteroperationen kann einen Teil des Satzes von Ausgabe-Feature-Maps erzeugen. In einigen Ausführungsformen kann der Teil des Satzes von Ausgabe-Feature-Maps einen Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps beinhalten, wobei eine Unteroperation den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung des Satzes von Eingabe-Feature-Maps und eines Bruchteils einer Gesamtzahl von Filtern in dem Satz von Filtern erzeugen kann. In einigen Ausführungsformen kann der Teil des Satzes von Ausgabe-Feature-Maps einen Teil jeder Ausgabe-Feature-Map in mindestens einer Teilmenge des Satzes von Ausgabe-Feature-Maps beinhalten, wobei eine Unteroperation den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung des Satzes von Filtern und eines Teils jeder Eingabe-Feature-Map in mindestens einer Teilmenge des Satzes von Eingabe-Feature-Maps erzeugen kann. In einigen Ausführungsformen kann der Teil des Satzes von Ausgabe-Feature-Maps einen Teil jeder Ausgabe-Feature-Map in einem Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps beinhalten, wobei eine Unteroperation den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung eines Bruchteils einer Gesamtzahl von Filtern in dem Satz von Filtern und eines Teils von jeder Eingabe-Feature-Map in mindestens einer Teilmenge des Satzes von Eingabe- Feature-Maps erzeugen kann.
  • Bei Block 2130 kann der Compiler eine erste Unteroperation in den zwei oder mehr Unteroperationen einer ersten Rechen-Engine (z. B. einem vorstehend beschriebenen Beschleuniger) in zwei oder mehr Rechen-Engines auf einer integrierten Schaltungsvorrichtung oder auf zwei oder mehr integrierten Schaltungsvorrichtungen zuweisen. Bei Block 2140 kann der Compiler eine zweite Unteroperation in den zwei oder mehr Unteroperationen einer zweiten Rechen-Engine in den zwei oder mehr Rechen-Engines zuweisen. Bei Block 2150 kann der Compiler Anweisungen (z. B. Maschinencode) zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine erzeugen. Optional kann der Compiler bei Block 2160 Anweisungen zum Ziehen einer Schlussfolgerung basierend auf einem Ergebnis der ersten Unteroperation und/oder einem Ergebnis der zweiten Unteroperation erzeugen. Zum Beispiel kann die Schlussfolgerung auf Grundlage eines Teils des Satzes von Ausgabe-Feature-Maps, die von einer Unteroperation erzeugt wurden, oder auf Grundlage des gesamten Satzes von Ausgabe-Feature-Maps, die von zwei oder mehr Unteroperationen erzeugt wurden, gezogen werden.
  • In einigen Ausführungsformen kann der Compiler auch eine zweite Tensoroperation in dem Modell eines neuronalen Netzes identifizieren, wobei die zweite Tensoroperation und die erste Tensoroperation keine Datenabhängigkeit aufweisen können. Der Compiler kann die zweite Tensoroperation in Unteroperationen der zweiten Tensoroperation teilen, wobei die Unteroperationen der zweiten Tensoroperation keine Datenabhängigkeit aufweisen können. Der Compiler kann einer dritten Rechen-Engine eine erste Unteroperation in den Unteroperationen der zweiten Tensoroperation zuweisen, einer vierten Rechen-Engine eine zweite Unteroperation in den Unteroperationen der zweiten Tensoroperation zuweisen und Anweisungen zum Durchführen der ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die dritte Rechen-Engine und der zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die vierte Rechen-Engine parallel zu der ersten Unteroperation für die erste Tensoroperation und der zweiten Unteroperation für die erste Tensoroperation erzeugen. Die erste Rechen-Engine, die zweite Rechen-Engine, die dritte Rechen-Engine und die vierte Rechen-Engine können sich auf derselben integrierten Schaltkreisvorrichtung oder auf zwei oder mehr integrierten Schaltkreisvorrichtungen befinden. Zum Beispiel können die vier Rechen-Engines vier Beschleuniger in einer gleichen Beschleunigungs-Engine sein.
  • Die vorstehend beschriebenen Techniken können auf beliebige Tensoroperationen oder beliebige Operationen angewendet werden, die Matrixmultiplikationen beinhalten, wie etwa Operationen eines mehrschichtigen Perzeptrons, wie vorstehend in Bezug auf 1 beschrieben. In einem Beispiel kann als Alternative zu Faltungen ein Transformer für die Verarbeitung natürlicher Sprache (natural language processing - NLP) jede Position codieren und einen Attention-Mechanismus anwenden, um zwei entfernte Wörter, die parallelisiert werden können, um das Training zu beschleunigen, in Beziehung zu setzen. Der Attention-Mechanismus im Transformer ist eine Möglichkeit, die Relevanz einer Reihe von Werten (z. B. Informationen) auf Grundlage einiger Schlüssel und Abfragen zu berechnen. Der Attention-Mechanismus kann vom Transformer dazu verwendet werden, sich auf relevante Informationen auf Grundalge dessen, was er gerade verarbeitet, zu konzentrieren. Die Attention-Gewichte können die Relevanz der verdeckten Zustände des Encoders (z. B. Werte) beim Verarbeiten des Decoder-Zustands (z. B. Abfragen) darstellen und können auf Grundlage der verdeckten Zustände des Encoders (z. B. Schlüssel) und der verdeckten Zustände des Decoders (z. B. Abfragen) berechnet werden. Ein Transformer kann die Anzahl der sequentiellen Operationen reduzieren, um zwei Symbole aus Eingabe-/Ausgabesequenzen auf eine konstante O(1) Anzahl von Operationen zu beziehen, indem ein Multi-Head-Attention-Mechanismus verwendet wird, der Abhängigkeiten unabhängig von ihrer Entfernung in einem Eingabe- oder Ausgabesatz modellieren kann.
  • Ein Transformer beinhaltet im Allgemeinen einen Encoder und einen Decoder. Der Encoder kann eine Eingabesequenz von Symboldarstellungen (x1, ..., xn) auf eine Sequenz von kontinuierlichen Darstellungen z = (z1, ..., zn) abbilden. Der Decoder kann ein Symbol nach dem anderen und auf Grundlage von z eine Ausgabesequenz (y1, ..., ym) von Symbolen erzeugen. Der Encoder kann die Einbettungen des Quellsatzes für seine Schlüssel, Werte und Abfragen verwenden, während der Decoder die Ausgaben des Encoders für seine Schlüssel und Werte und die Einbettungen des Zielsatzes für seine Abfragen verwenden kann. Ein Transformer verwendet im Allgemeinen gestapelte Self-Attention und punktweise, vollständig verbundene Schichten sowohl für den Encoder als auch für den Decoder, wobei zuvor erzeugte Symbole als zusätzliche Eingaben verwendet werden, wenn neue Symbole erzeugt werden.
  • 22A veranschaulicht ein Beispiel eines Transformers 2200, der die hierin offenbarten Techniken verwenden kann, gemäß bestimmten Ausführungsformen. Der Transformer 2200 kann einen Encoder 2210 und einen Decoder 2220 beinhalten. Der Encoder 2210 kann einen Stapel von N Schichten 2212 beinhalten. Jede Schicht 2212 kann zwei Unterschichten beinhalten, die Matrixmultiplikationen und elementweise Transformationen durchführen. Die erste Unterschicht kann ein Multi-Head-Self-Attention-Netz beinhalten und die zweite Unterschicht kann ein positionsmäßig vollständig verbundenes Feed-Forward-Netz beinhalten. Um jede der beiden Unterschichten kann eine Restverbindung verwendet werden, gefolgt von einer Schichtnormalisierung. Eine Restverbindung fügt die Eingabe zur Ausgabe der Unterschicht hinzu und ist eine Möglichkeit, das Training tiefer Netze zu vereinfachen. Schichtnormalisierung ist ein Normalisierungsverfahren beim Deep Learning, die der Batch-Normalisierung ähnelt. Die Ausgabe jeder Unterschicht kann als LayerNorm(x + Sublayer(x)) geschrieben werden, wobei Sublayer(x) die von der Unterschicht implementierte Funktion ist. In der Encoder-Phase erzeugt der Transformer zuerst anfängliche Eingaben (z. B. Eingabeeinbettung und Positionscodierung) für jedes Wort im Eingabesatz. Für jedes Wort aggregiert die Self-Attention Informationen aus allen anderen Wörtern (paarweise) im Kontext des Satzes, um eine neue Darstellung für jedes Wort zu erstellen, die eine Attended-Darstellung aller anderen Wörter in der Sequenz ist. Dies wird für jedes Wort in einem Satz mehrmals wiederholt, um sukzessive neuere Darstellungen über den vorherigen aufzubauen.
  • Der Decoder 2220 kann auch einen Stapel von N Schichten 2222 beinhalten. Zusätzlich zu den zwei Unterschichten in jeder Encoder-Schicht 2212, die vorstehend beschrieben sind, kann jede Schicht 2222 im Decoder 2220 eine dritte Unterschicht beinhalten, die eine Multi-Head-Attention über die Ausgabe des Encoder-Stapels durchführt. Ähnlich wie bei den Schichten 2212 im Encoder 2210 können Restverbindungen um jede der Unterschichten in den Schichten 2222 im Decoder 2220 verwendet werden, gefolgt von einer Schichtnormalisierung. Die Self-Attention-Unterschicht im Decoder-Stapel kann modifiziert sein (als „maskierte Multi-Head-Attention“ bezeichnet), um Eingaben in den Decoder aus zukünftigen Zeitschritten zu maskieren und um zu verhindern, dass sich Positionen mit nachfolgenden Positionen verbinden. Die Maskierung, kombiniert mit dem Versetzen der Ausgabeeinbettungen um eine Position, stellt sicher, dass die Vorhersagen für Position i nur von den bekannten Ausgaben an Positionen kleiner als i abhängen können. Der Decoder 2220 kann jeweils ein Wort von links nach rechts erzeugen. Das erste auf einer Ebene erzeugte Wort kann auf der finalen Darstellung des Encoders basieren (um 1 Position versetzt). Jedes nachfolgend vorhergesagte Wort kann sich mit den zuvor erzeugten Wörter in dieser Schicht des Decoders und der finalen Darstellung des Encoders verbinden.
  • Eine Attention-Funktion kann eine Abfrage und einen Satz von Schlüssel-Wert-Paaren auf eine Ausgabe abbilden, wobei Abfrage, Schlüssel, Werte und Ausgabe alles Vektoren sind. Ein Abfragevektor q codiert das Wort/die Position, mit dem/der eine Verbindung erfolgt. Ein Schlüsselvektor k codiert das Wort, das Attention erfährt. Der Schlüsselvektor k und der Abfragevektor q bestimmen zusammen den Attention-Wert zwischen den jeweiligen Wörtern. Die Ausgabe wird als gewichtete Summe von Werten berechnet, wobei das jedem Wert zugewiesene Gewicht durch eine Kompatibilitätsfunktion der Abfrage mit dem entsprechenden Schlüssel berechnet wird.
  • 22B veranschaulicht ein Beispiel eines Skalarprodukt-Attention-Blocks 2230. Im Skalarprodukt-Attention-Block 2230 beinhaltet die Eingabe Abfragen und Schlüssel sowohl der Dimension dk als auch Werte der Dimension dv. Die Skalarprodukt-Attention kann für eine Reihe von Abfragen gleichzeitig gemäß der folgenden Gleichung berechnet werden: Attention ( Q , K , V ) = softmax ( Q K T d k ) V ,
    Figure DE112020003127T5_0008
    wobei Q die Matrix der zusammengepackten Abfragen ist und K und V die Matrizen der zusammengepackten Schlüssel und Werte sind. Die Skalarprodukt-Attention berechnet die Punktprodukte (Attention-Werte) der Abfragen mit allen Schlüsseln („MatMul“), dividiert jedes Element der Punktprodukte durch einen Skalierungsfaktor d k
    Figure DE112020003127T5_0009
    („Skalierung“), wendet einen Softmax-Funktion an, um die Gewichte für die Werte zu erhalten, und verwendet dann die Gewichte, um eine gewichtete Summe der Werte zu bestimmen.
  • Wenn nur eine einzige Attention verwendet wird, um die gewichtete Summe der Werte zu berechnen, kann es schwierig sein, verschiedene Aspekte der Eingabe zu erfassen. Zum Beispiel möchte man im Satz „Ich mag Katzen mehr als Hunde“ die Tatsache erfassen, dass der Satz zwei Entitäten vergleicht, während die tatsächlich verglichenen Entitäten beibehalten werden. Ein Transformer kann die Multi-Head-Self-Attention-Unterschicht dazu verwenden, dem Encoder und dem Decoder zu ermöglichen, die gesamte Eingabesequenz auf einmal zu sehen. Um verschiedene Darstellungen zu lernen, wendet die Multi-Head-Attention verschiedene lineare Transformationen auf die Werte, Schlüssel und Abfragen für jeden Attention-Head an, wobei unterschiedliche Gewichtsmatrizen für die Multi-Attention-Heads verwendet werden können und die Ergebnisse der Multi-Attention-Heads zusammen verkettet werden können.
  • 22C veranschaulicht ein Beispiel einer Multi-Head-Attention-Unterschicht 2240, die in dem Encoder 2210 und dem Decoder 2220 des vorstehend beschriebenen Transformers 2200 verwendet wird. Anstatt eine einzelne Attention-Funktion mit dmodel-dimensionalen Schlüsseln, Werten und Abfragen durchzuführen, projiziert die Multi-Head-Self-Attention-Unterschicht 2240 die Abfragen, Schlüssel und Werte mehrfach (z. B. h mal) mit unterschiedlichen, gelernten linearen Projektionen auf dk, dk bzw. dv. Attention-Funktionen werden parallel an den h projizierten Versionen von Abfragen, Schlüsseln und Werten unter Verwendung mehrerer (z. B. h) Skalarprodukt-Attentions durchgeführt, was h dv-dimensionale Ausgabewerte ergibt. Jeder Attention-Head kann eine Struktur aufweisen, wie in 22B gezeigt, und kann durch drei verschiedene Projektionen charakterisiert werden, die durch Gewichtsmatrizen gegeben sind:
    • W i K
      Figure DE112020003127T5_0010
      with dimensons dmodelxdk
    • W i Q
      Figure DE112020003127T5_0011
      with dimensons dmodelxdk
    • W i V
      Figure DE112020003127T5_0012
      with dimensons dmodelxdv
  • Die Ausgaben der Multi-Skalarprodukt-Attentions werden verkettet, was zu einer Matrix der Dimensionen di × (h×dv) führt, wobei di die Länge der Eingabesequenz ist. Anschließend wird eine lineare Schicht mit der Gewichtsmatrix W0 der Dimensionen (h×dv) × de auf das Verkettungsergebnis angewendet, was zu einem Endergebnis der Dimensionen di × de führt: MultiHead ( Q , K , V ) = Concat ( head 1 , , head h ) W O whewobei t = Attention ( Q W i Q , K W i K , V W i V ) ,
    Figure DE112020003127T5_0013
    wobei de die Dimension der Tokeneinbettung ist. Multi-Head-Attention ermöglicht es einem Netz, gemeinsam eine Verbindung zu Informationen aus unterschiedlichen Darstellungsunterräumen an unterschiedlichen Positionen herzustellen. Die Multi-Head-Attention kann unter Verwendung einer Tensoroperation durchgeführt werden, die in mehrere Unteroperationen (z. B. eine für jeden Head) aufgeteilt sein kann und von mehreren Rechen-Engines wie vorstehend beschrieben parallel durchgeführt werden kann.
  • 23 veranschaulicht ein Beispiel ein Modell von bidirektionalen Encoder-Darstellungen von Transformern (bidirectional encoder representations from Transformers - BERT) 2300, das einige der hierin offenbarten Techniken gemäß bestimmten Ausführungsformen verwenden kann. Ein BERT-Modell kann einen mehrschichtigen bidirektionalen Transformer-Encoder (anstelle eines Links-nach-rechts-Transformer-Encoders) beinhalten und beinhaltet keinen Transformer-Decoder, da das BERT-Modell dazu verwendet wird, ein Sprachmodell zu erzeugen. Das BERT-Modell wurde dazu entwickelt, tiefe bidirektionale Darstellungen von unmarkiertem Text durch gemeinsames Konditionieren des linken und rechten Kontexts in allen Schichten vorzutrainieren. Das vortrainierte BERT-Modell kann mit einer zusätzlichen Ausgabeschicht verfeinert werden, um ohne wesentliche aufgabenspezifische Architekturmodifikationen State-of-the-Art-Modelle für eine Vielzahl von Aufgaben wie Fragenbeantwortung und Sprachinferenz zu erstellen. BERT mildert die Einschränkung der Unidirektionalität durch die Verwendung eines Vortrainingsziels eines „maskierten Sprachmodells“ (Masked Language Model - MLM). Das maskierte Sprachmodell maskiert zufällig einige der Token aus der Eingabe und das Ziel besteht darin, die ursprüngliche Vokabularidentifikation (Id) des maskierten Wortes nur auf Grundlage seines Kontexts vorherzusagen. Im Gegensatz zum Vortraining des Sprachmodells von links nach rechts ermöglicht das MLM-Ziel der Darstellung, den linken und rechten Kontext zu verschmelzen, was ein Vortraining eines tiefen bidirektionalen Transformers ermöglicht. Zusätzlich zum maskierten Sprachmodell kann eine „Nächster-Satz-Vorhersage“-Aufgabe dazu verwendet werden, Textpaar-Darstellungen gemeinsam vorzutrainieren.
  • In dem in 23 gezeigten Beispiel verwendet das BERT-Modell 2300 Eingaben, die eine Sequenz von Token 2306 beinhalten, die einen oder mehrere Sätze beinhalten kann, wie etwa den ersten Satz 2302 und den zweiten Satz 2304. In einigen Ausführungsformen können einige (z. B. etwa 15 % der) Token 2306 maskiert sein. Eingabetoken 2306 können in Vektoren 2310 eingebettet und von Encoder-Schichten 2320, 2330, ... und 2340 verarbeitet werden, um eine Sequenz von Token 2350 zu erzeugen, die jeweils durch einen Vektor dargestellt werden. Die Encoder-Schichten 2320, 2330, ... und 2340 können ein mehrschichtiges Perzeptron bilden. Jede Encoder-Schicht 2320, 2330, ... oder 2340 kann den Encoder-Schichten 2212 ähneln und kann das Multi-Head-Attention-Modell und/oder die vollständig verbundene Schicht beinhalten, wie vorstehend in Bezug auf 22A-22C beschrieben. Das Multi-Head-Attention-Modell kann mehrere Punktprodukt-Attentions beinhalten. Operationen jeder Encoder-Schicht 2320, 2330, ... oder 2340 können eine Tensoroperation beinhalten, die in Unteroperationen aufgeteilt werden kann, die keine Datenabhängigkeit untereinander aufweisen und somit von mehreren Rechen-Engines (z. B. Beschleunigern) parallel durchgeführt werden können, wie vorstehend beschrieben.
  • 24 beinhaltet ein Blockdiagramm, das ein Beispiel eines Host-Systems 2400 veranschaulicht, auf dem ein Compiler 2430, wie hierin beschrieben, laufen kann. Das veranschaulichte Host-System 2400 ist ein Beispiel für eine Rechenvorrichtung und beinhaltet einen Prozessor 2402, einen Prozessorspeicher 2404, mindestens eine Speichervorrichtung 2406, verschiedene Eingabe-/Ausgabe-(E/A)-Vorrichtungen 2408 und mindestens eine Netzwerkschnittstelle 2410. In dem Beispiel aus 24 beinhaltet das Host-System 2400 auch eine Beschleunigungs-Engine 2412, die eine integrierte Schaltungsvorrichtung ist, die bestimmte Operationen oder Berechnungen, die von dem Host-System 2400 durchgeführt werden, beschleunigen kann. In verschiedenen Beispielen kann das Host-System 2400 unter anderem als Server in einem Rechenzentrum, einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer oder einem Smartphone implementiert sein. In einigen Beispielen können Operationen oder Komponenten, die nachfolgend dahingehend erörtert werden, wie sie in dem Host-System 2400 durchgeführt werden oder beinhaltet sind, in anderen Computervorrichtungen durchgeführt werden oder beinhaltet sein. Beispielsweise kann der Compiler 2430 auf dem Host-System 2400 ausgeführt werden, während sich die Beschleunigungs-Engine 2412 auf einem anderen Host-System befindet.
  • Der Prozessor 2402 ist eine integrierte Schaltungsvorrichtung, die Programmcode in Form von Anweisungen ausführen kann. Der Programmcode kann für verschiedene Software-Anwendungen oder Tools sein, wie etwa ein Betriebssystem 2420 oder den veranschaulichten Compiler 2430. Während der Prozessor 2402 ein Programm ausführt, können die Anweisungen für das Programm im Prozessorspeicher 2404 gespeichert sein. Die Anweisungen können auch an anderer Stelle gespeichert sein, wie etwa auf der Speichervorrichtung 2406, und können bei Bedarf durch den Prozessor 2402 in den Prozessorspeicher 2404 geladen werden. Der Prozessor 2402 kann den Prozessorspeicher 2404 auch zum temporären Speichern anderer Daten, mit denen der Prozessor 2402 arbeitet, verwenden. In verschiedenen Beispielen ist der Prozessorspeicher 2404 ein flüchtiger Speichertyp, wie etwa ein Typ eines Direktzugriffsspeichers, obwohl nichtflüchtige Speichertypen alternativ oder zusätzlich für den Prozessorspeicher 2404 verwendet werden können.
  • Die Speichervorrichtung 2406 ist ein Beispiel für eine Vorrichtung, die einen nichtflüchtigen Speicher beinhalten kann. Beispielsweise kann die Speichervorrichtung 2406 unter anderem ein Magnetplattenlaufwerk, ein Solid-State-Laufwerk oder ein optisches Laufwerk sein. Die Speichervorrichtung 2406 kann ferner nicht-transitorisch sein, so dass Programmcode und andere Daten, die auf der Speichervorrichtung 2406 gespeichert sind, vorhanden bleiben, wenn die Speichervorrichtung 2406 nicht eingeschaltet ist.
  • Die Speichervorrichtung 2406 ist ein Beispiel für ein Peripheriegerät, bei dem es sich um Komponenten handelt, die mit dem Host-System 2400 gekoppelt werden können, um dem Host-System 2400 Funktionalität hinzuzufügen. Andere Beispiele für Peripheriegeräte beinhalten die Eingabe-/Ausgabevorrichtungen 2408 und die Netzwerkschnittstelle 2410. Die Eingabe-/Ausgabevorrichtungen 2408 können unter anderem Beispielen Benutzereingabe- und - ausgabevorrichtungen beinhalten, wie etwa Tastaturen, Mäuse, Touchscreens, Mikrofone, Anzeigebildschirme, Lautsprecher, Drucker und Scanner. Die Netzwerkschnittstelle 2410, die unter Verwendung einer Netzwerkschnittstellenkarte implementiert werden kann, kann Zugang zu einem oder mehreren Netzwerken bereitstellen. Die Netzwerkschnittstelle 2410 kann beispielsweise einen physischen Port zum Anschließen eines Netzwerkkabels und/oder drahtloser Antennen zum Kommunizieren mit Wi-Fi und/oder Mobilfunknetzen beinhalten. Die Netzwerkschnittstelle 2410 kann auch als E/A-Gerät beschrieben werden.
  • Die Beschleunigungs-Engine 2412 ist auch eine andere Art von Peripheriegerät oder E/A-Gerät. Die Beschleunigungs-Engine 2412 ist eine Vorrichtung, die speziell dafür gebaut wurde, bestimmte Operationen durchzuführen, die von dem Prozessor 2402 durchgeführt werden können, aber von der Beschleunigungs-Engine 2412 schneller durchgeführt werden können. Zum Beispiel kann die Beschleunigungs-Engine 2412 ein Beschleuniger für ein neuronales Netz sein und kann als solche in der Lage sein, die umfangreichen parallelen Berechnungen eines neuronalen Netzes effizienter durchzuführen, als wenn die Berechnungen durch den Prozessor 2402 durchgeführt werden. Als weiteres Beispiel kann die Beschleunigungs-Engine 2412 eine Grafikverarbeitungseinheit (GPU) sein und kann optimiert sein, um die Berechnungen durchzuführen, die für die Grafikwiedergabe erforderlich sind. Andere Beispiele von Vorrichtungen, die durch die Beschleunigungs-Engine 2412 implementiert werden können, beinhalten kryptografische Beschleuniger, Komprimierungs- und Dekompressionsbeschleuniger, 3D-Beschleuniger, Beschleuniger für reguläre Ausdrücke, Sicherheitsbeschleuniger und andere.
  • In verschiedenen Beispielen kann die Beschleunigungs-Engine 2412 Programmcode ausführen, um bestimmte Operationen durchzuführen. Wenn beispielsweise die Beschleunigungs-Engine 2412 ein Beschleuniger für ein neuronales Netz ist, kann die Beschleunigungs-Engine 2412 so programmiert sein, dass sie ein bestimmtes neuronales Netz ausführt, wie etwa eines, das eine Bilderkennung durchführt, oder eines, das eine maschinelle Übersetzung durchführt. Als ein weiteres Beispiel, um die Ausführung eines neuronalen Netzes zu unterstützen, kann die Beschleunigungs-Engine 2412 so programmiert sein, dass sie Operationen wie unter anderem das Kopieren von Daten für das neuronale Netz aus dem Prozessorspeicher 2404 (zum Beispiel) in die Beschleunigungs-Engine 2412, das Kopieren von Eingabedaten für das neuronale Netz aus dem Prozessorspeicher 2404 in die Beschleunigungs-Engine 2412 und/oder das Kopieren von Ergebnissen aus der Beschleunigungs-Engine 2412 in den Prozessorspeicher 2404 durchführt.
  • Um Programmcode für die Beschleunigungs-Engine 2412 zu erzeugen, kann das Host-System 2400 in verschiedenen Beispielen den Compiler 2430 ausführen. Compiler sind im Allgemeinen Software-Programme, die in einer menschenlesbaren Sprache geschriebenen Programmcode in ein Format (z. B. Maschinenanweisungen) umwandeln, das von einer integrierten Schaltungsvorrichtung gelesen und verarbeitet werden kann. In dem Beispiel von 24 ist die Beschleunigungs-Engine 2412 ein Beschleuniger für ein neuronales Netz und der Compiler 2430 dient zum Kompilieren einer Beschreibung eines neuronalen Netzes in Anweisungen, die von der Beschleunigungs-Engine 2412 auszuführen sind. Wenn die Beschleunigungs-Engine 2412 einen anderen Beschleunigertyp implementiert, kann ein anderer Compiler verwendet werden. Wie vorstehend beschrieben, kann der Compiler 2430 in einigen Ausführungsformen dazu verwendet werden, die Tensoroperationen in Unteroperationen zu teilen, und kann die Leistung der Unteroperationen an verschiedenen Beschleunigungs-Engine und/oder verschiedenen Beschleunigern in einer Beschleunigungs-Engine planen.
  • Der Compiler 2430 kann beispielsweise aktiviert werden, wenn das Betriebssystem 2420 Eingaben von Tastatur, Maus, Touchscreen, Sprachbefehle oder andere Eingaben von den Eingabe-/Ausgabevorrichtungen 2408 empfängt. Die Eingaben können ferner Parameter für den Compiler 2430 beinhalten, wie etwa den Eingabecode 2442 zum Kompilieren und Konfigurieren von Optionen für den Kompilierungsprozess. Sobald der Compiler 2430 aktiviert ist, kann der Prozessor 2402 die Anweisungen für den Compiler 2430 in den Prozessorspeicher 2404 laden und die Anweisungen ausführen.
  • In dem Beispiel aus 24 beinhaltet der Compiler 2430 eine erste Stufe 2432, eine zweite Stufe 2436 und eine dritte Stufe 2440, die jeweils unterschiedliche Operationen durchführen, um kompilierten Code 2444 zu erzeugen. In anderen Beispielen kann der Compiler 2430 die Operationen der ersten Stufe 2432, der zweiten Stufe 2436 und/oder der dritten Stufe 2440 in weniger Stufen kombinieren oder kann die Operationen einer der Stufen in mehrere Stufen teilen.
  • Die erste Stufe 2432 kann den Eingabecode 2442 empfangen und verarbeiten. Der Eingabecode 2442 kann neben vielen anderen Beispielen ein Programm in einer höheren Programmiersprache wie etwa Java, C++ oder Tensorflow beschreiben. Der Eingabecode 2442 kann beispielsweise Schritte beschreiben, um Bilderkennung, Spracherkennung, maschinelle Übersetzung oder andere Operationen durchzuführen. Der Eingabecode 2442 kann beispielsweise von der Speichervorrichtung 2406 erhalten werden. Alternativ, obwohl hier nicht dargestellt, kann sich der Eingabecode 2442 im Prozessorspeicher 2404 befinden oder von einem Netzwerkstandort unter Verwendung der Netzwerkschnittstelle 2410 erhalten werden. Die Verarbeitung des Eingabecodes 2442 kann das Sortieren der im Eingabecode 2442 beschriebenen Operationen in Schichten beinhalten, wobei die Ausgaben einer Schicht die Eingaben an eine nächste Schicht bereitstellen. Die Verarbeitung kann auch das Identifizieren von Schritten beinhalten, die von dem Prozessor 2402 statt von der Beschleunigungs-Engine 2412 durchzuführen sind. Zum Beispiel kann der Prozessor 2402 durch die Ausführung eines Treibers 2422 unter anderem Schritte wie etwa das Konfigurieren von Direct Memory Access (DMA)-Deskriptoren zum Bewegen von Daten in die oder aus der Beschleunigungs-Engine 2412 durchführen müssen.
  • Die Ausgabe 2434 der ersten Stufe 2432 kann beispielsweise in den Schichten, Knoten und Verbindungen zwischen Knoten eines neuronalen Netzes organisiert sein. Die zweite Stufe 2436 kann eine Zwischenverarbeitung an dieser Ausgabe 2434 durchführen. Zum Beispiel können die Operationen, die in einer beliebigen Schicht oder an einem beliebigen Knoten in einer Schicht durchgeführt werden, zu viele für die Beschleunigungs-Engine 2412 sein, um sie gleichzeitig durchzuführen. Die Beschleunigungs-Engine 2412 kann beispielsweise eine begrenzte Menge an lokalem Speicherplatz für die für eine Berechnung benötigten Daten aufweisen oder die Berechnungen können mehr sein als die Beschleunigungs-Engine 2412 gleichzeitig durchführen kann. In diesem Beispiel kann die erste Stufe 2432 die Operationen der Schicht oder des Knotens in kleinere Operationen unterteilen, die in den lokalen Speicher der Beschleunigungs-Engine passen können und/oder in die Rechenkapazität der Beschleunigungs-Engine 2412 passen können. Das Verarbeiten der Ausgabe 2434 der ersten Stufe 2432 kann unter anderem andere Schritte beinhalten, wie etwa das Planen oder das Bestimmen der Reihenfolge, in der die Beschleunigungs-Engine 2412 und/oder der Prozessor 2402 Operationen durchführen.
  • In verschiedenen Beispielen beinhaltet die Ausgabe 2438 der zweiten Stufe 2436 die verschiedenen Schritte, die von Komponenten der Beschleunigungs-Engine 2412 in der Reihenfolge durchzuführen sind, in der die Schritte durchzuführen sind. Die Ausgabe 2438 kann beispielsweise als Datenflussgraph dargestellt werden, wobei die Knoten im Graphen Speicheroperationen, Berechnungen und andere Operationen darstellen und die Kanten oder Verbindungen zwischen den Knoten Abhängigkeiten zwischen den Knoten darstellen, wie etwa unter anderem Datenabhängigkeiten, Speicherabhängigkeiten oder Betriebsabhängigkeiten.
  • Die dritte Stufe 2440 kann an der Ausgabe 2438 der zweiten Stufe 2436 betreiben und verschiedene Schritte durchführen, bevor die Anweisungen erzeugt werden, die von der Beschleunigungs-Engine 2412 ausgeführt werden sollen. Diese Schritte können beispielsweise das Entfernen redundanter Abhängigkeiten, das Auflösen oder Behandeln von Abhängigkeiten zwischen Knoten durch Einfügen von Synchronisationsanweisungen in den Code, das Identifizieren von möglichen Optimierungen der Speichernutzung oder der Speicherbandbreitennutzung und andere Operationen beinhalten. In einigen Beispielen kann die dritte Stufe 2440 einen Datenplaner 2450 beinhalten.
  • Die Ausgabe der dritten Stufe 2440 ist ein kompilierter Code 2444, der Maschinenbefehle im Binärformat beinhalten kann. In einigen Beispielen kann der kompilierte Code 2444 im Prozessorspeicher 2404 gespeichert sein. Alternativ oder zusätzlich kann der kompilierte Code 2444 auf die Speichervorrichtung 2406 oder an einen Netzwerkstandort kopiert werden. Wie vorstehend angemerkt, kann sich die Beschleunigungs-Engine 2412 an einem anderen Host-System befinden, wobei in diesem Fall der kompilierte Code 2444 über die Netzwerkschnittstelle 2410 an das andere Host-System gesendet werden kann.
  • In dem Beispiel aus 24 kann das Host-System 2400 einen Treiber 2422 ausführen, der auch als Vorrichtungstreiber oder Laufzeittreiber bezeichnet werden kann, der die Beschleunigungs-Engine 2412 verwaltet. Der Treiber 2422 kann eine Schnittstelle zwischen Anwendungen, die auf dem Host-System 2400 (oder einem anderen Host-System) ausgeführt werden, und der Beschleunigungs-Engine 2412 bereitstellen. Zum Beispiel kann der Treiber 2422 eine Anwendungsprogrammschnittstelle (Application Program Interface - API) bereitstellen, die Funktionen zum Zuführen von Eingabedaten zu der Beschleunigungs-Engine 2412 und zum Definieren der an den Eingabedaten durchzuführenden Operation definiert. In diesem und anderen Beispielen kann der Treiber 2422 die Beschleunigungs-Engine 2412 konfigurieren, um die Operation durchzuführen. Zum Beispiel kann der Treiber 2422 ein neuronales Netz, das die Beschleunigungs-Engine 2412 ausführen soll, sowie die Stelle im Prozessorspeicher 2404 oder auf der Speichervorrichtung 2406, wo sich der kompilierte Code 2444 für das neuronale Netz befindet, identifizieren. Der Treiber 2422 kann ferner in die Beschleunigungs-Engine 2412 laden oder veranlassen, dass die Beschleunigungs-Engine 2412 den kompilierten Code 2444 lädt, kann die Beschleunigungs-Engine 2412 laden oder veranlassen, die Eingabedaten zu laden, mit denen das neuronale Netz arbeiten soll, und/oder kann veranlassen, dass die Beschleunigungs-Engine 2412 an den Eingabedaten ausgeführt wird. Sobald die Beschleunigungs-Engine 2412 beendet ist, kann die Beschleunigungs-Engine 2412 den Treiber 2422 benachrichtigen, und der Treiber 2422 kann ein Ergebnis an die Anwendung, die das Ergebnis angefordert hat, zurückliefern.
  • 25 beinhaltet ein Blockdiagramm, das ein Beispiel einer Beschleunigungs-Engine 2500 veranschaulicht. Die Beschleunigungs-Engine 2500 ist ein Beispiel für eine integrierte Schaltung, die einen oder mehrere Beschleuniger 2502a-2502n beinhalten kann, die dem vorstehend beispielsweise in Bezug auf 7 beschriebenen Beschleuniger ähnlich sein können. Zum Beispiel kann die Beschleunigungs-Engine 2500 in einer Ausführungsform vier Beschleuniger beinhalten, die dazu verwendet werden können, vier Unteroperationen einer Faltungsoperation parallel durchzuführen, wie vorstehend beschrieben.
  • In dem Beispiel aus 25 beinhaltet die Beschleunigungs-Engine 2500 mehrere Beschleuniger 2502a-2502n, von denen jeder einen Satz von Operationen durchführen kann. In verschiedenen Beispielen sind die Beschleuniger 2502a-2502n für bestimmte Arten von Operationen vorgesehen, so dass die Beschleuniger 2502a-2502n die Operationen viel schneller durchführen können, als wenn ähnliche Operationen von einem Allzweckprozessor durchgeführt werden. In verschiedenen Beispielen müssen, um einen Satz von Operationen durchzuführen, Eingabedaten, an denen die Operationen durchgeführt werden sollen, zuerst in die Beschleuniger 2502a-2502n bewegt werden. Außerdem wird in einigen Fällen auch Programmcode in die Beschleuniger 2502a-2502n bewegt, der die Operationen programmiert, die die Beschleuniger 2502a-2502n an den Daten durchführen. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungs-Engine 2500 N Beschleuniger 2502a-2502n. Beispiele von Beschleunigern, die in der Beschleunigungs-Engine 2500 beinhaltet sein können, beinhalten Grafikbeschleuniger, Gleitkommabeschleuniger, Beschleuniger neuronaler Netze und andere. In verschiedenen Beispielen können die Beschleuniger 2502a-2502n jeweils gleich sein (z. B. ist jeder von dem ein Grafikbeschleuniger) oder können unterschiedlich sein (z. B. beinhalten die Beschleuniger 2502a-2502n einen Grafikbeschleuniger, einen Gleitkommabeschleuniger und einen Beschleuniger eines neuronalen Netzes).
  • Die beispielhafte Beschleunigungs-Engine 2500 beinhaltet ferner DRAM-Controller 2542a-2542k zum Kommunizieren mit einem externen Speicher. Der externe Speicher ist in diesem Beispiel unter Verwendung von DRAM 2530 implementiert. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungs-Engine 2500 K DRAM-Controller 2542a-2542k, von denen jeder in der Lage sein kann, mit einem unabhängigen Satz von DRAM-Bänken zu kommunizieren. In anderen Beispielen können andere Arten von RAM-Technologie für den externen Speicher verwendet werden. Die DRAM-Controller 2542a-2542k können auch als Speicher-Controller bezeichnet werden.
  • In verschiedenen Beispielen können Eingabedaten und/oder Programmcode für die Beschleuniger 2502a-2502n im DRAM 2530 gespeichert sein. Unterschiedliche Programme können bewirken, dass die Beschleuniger 2502a-2502n unterschiedliche Operationen durchführen. Wenn beispielsweise einer der Beschleuniger ein Beschleuniger für ein neuronales Netz ist, kann ein Programm den Beschleuniger für ein neuronales Netz dazu konfigurieren, eine Spracherkennung durchzuführen, während ein anderes Programm den Beschleuniger für ein neuronales Netz dazu konfigurieren kann, eine Bilderkennung durchzuführen. In verschiedenen Beispielen können verschiedene Beschleuniger 2502a-2502n mit verschiedenen Programmen programmiert sein, so dass jeder einen anderen Satz von Operationen durchführt. In verschiedenen Beispielen können die Prozessoren 2548a-2548s das Bewegen von Programmcode vom DRAM 2530 zu den Beschleunigern 2502a-2502n verwalten.
  • Die beispielhafte Beschleunigungs-Engine 2500 beinhaltet ferner E/A-Controller 2544a-2544p zum Kommunizieren mit E/A-Geräten 2532 in dem System. Die Beschleunigungs-Engine 2500 kann mit E/A-Geräten beispielsweise über einen Prozessorbus kommunizieren. In einigen Beispielen kann der Prozessorbus unter Verwendung von Peripheral Component Interconnect (PCI) und/oder einer Variation des PCI-Busprotokolls implementiert sein. Der Prozessorbus kann die Beschleunigungs-Engine 2500 unter anderem mit E/A-Geräten wie beispielsweise Eingabe- und Ausgabevorrichtungen, Speicher-Controllern, Speichervorrichtungen und/oder Netzwerkschnittstellenkarten verbinden. In einigen Beispielen können die E/A-Controller 2544a-2544p ermöglichen, dass die Beschleunigungs-Engine 2500 als E/A-Gerät für einen Host-Prozessor fungiert. Zum Beispiel kann die Beschleunigungs-Engine 2500 der Empfänger von Eingabedaten von dem Host-Prozessor und eines Befehls, der eine Operation angibt, die an den Eingabedaten durchgeführt werden soll (z. B. eine bestimmte Berechnung oder Analyse), sein. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungs-Engine 2500 p E/A-Controller 2544a-2544p, von denen jeder einen separaten Root-Komplex beinhalten kann und mit einem separaten Satz von E/A-Geräten 2532 kommunizieren kann. In anderen Beispielen können andere standardisierte Busprotokolle wie etwa Ultra Path Interconnect (UPI) für den Host-Bus verwendet werden. In anderen Beispielen kann ein proprietäres Busprotokoll verwendet werden.
  • Die Bewegung von Daten in der Beschleunigungs-Engine 2500 kann durch einen oder mehrere Prozessoren 2548a-2548s verwaltet werden, die auch als Datenverwaltungsprozessoren bezeichnet werden können. In dem Beispiel aus 25 beinhaltet die Beschleunigungs-Engine 2500 s Prozessoren 2548a-2548s, die in die Vorrichtung integriert sind (z. B. auf demselben Silizium-Die). In anderen Beispielen können sich die Prozessoren 2548a-2548s außerhalb der Beschleunigungs-Engine 2500 befinden (z. B. auf einem anderen Die und/oder in einem anderen Package). In einigen Beispielen können die Prozessoren 2548a-2548s die Bewegung von Daten von den E/A-Geräten 2532 zu den Beschleunigern 2502a-2502n oder dem DRAM 2530 verwalten. Beispielsweise können sich Eingabedaten an einem E/A-Gerät 2532 oder im Prozessorspeicher befinden und die Prozessoren 2548a-2548s können die Eingabe von dem E/A-Gerät 2532 oder dem Prozessorspeicher in einen Beschleuniger oder in den DRAM 2530 bewegen. Als weiteres Beispiel kann sich der Programmcode für die Beschleuniger 2502a-2502n auf einem E/A-Gerät 2532 oder im Prozessorspeicher befinden.
  • Die beispielhafte Beschleunigungs-Engine 2500 beinhaltet ferner DMA-Engines 2546a-2546d, die Daten zwischen den Beschleunigern 2502a-2502n, den DRAM-Controllern 2542a-2542k und den E/A-Controllern 2544a-2544p bewegen können. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungs-Engine 2500 D DMA-Engines 2546a-2546d. In einigen Implementierungen können die DMA-Engines 2546a-2546d bestimmten Aufgaben zugewiesen sein, wie etwa dem Bewegen von Daten von den DRAM-Controllern 2542a-2542d zu den Beschleunigern 2502a-2502n oder dem Bewegen von Daten zwischen den E/A-Controllern 2544a-2544p und den Beschleunigern 2502a-2502n. Diese Aufgaben können beispielsweise durch Einreihen von Deskriptoren in die DMA-Engines 2546a-2546d zugewiesen werden, wobei ein Deskriptor eine Adresse für einen Datenblock und eine durchzuführende Operation (z. B. ein Lesen oder Schreiben) identifiziert. Ein Deskriptor kann beispielsweise eine DMA-Engine anleiten, einen DMA-Controller anzuweisen, einen Datenblock aus dem DRAM 2530 zu lesen. Ein Deskriptor kann als weiteres Beispiel die DMA-Engine anweisen, Daten, die von dem DMA-Controller gelesen wurden, in einen Beschleuniger zu schreiben. Weitere Deskriptoren können dazu verwendet werden, Daten von einem Beschleuniger zum DRAM 2530 zu bewegen.
  • In verschiedenen Beispielen kann jeder der Prozessoren 2548a-2548s für das Verwalten der Datenbewegung für einen anderen Beschleuniger verantwortlich sein. In einigen Beispielen kann ein Prozessor die Datenbewegung für mehr als einen Beschleuniger verwalten. In ähnlicher Weise kann in verschiedenen Beispielen jeder der Prozessoren 2548a-2548s einer oder mehreren DMA-Engines 2546a-2546d zugewiesen sein. In diesen und anderen Beispielen werden Zuordnungen zwischen Prozessoren 2548a-2548s, Beschleunigern 2502a-2502n und DMA-Engines 2546a-2546d durch Programmcode bestimmt, der von jedem jeweiligen Prozessor ausgeführt wird.
  • In der beispielhaften Beschleunigungs-Engine 2500 können die verschiedenen Komponenten über ein Chip-Interconnect 2520 kommunizieren. Der Chip-Interconnect 2520 beinhaltet hauptsächlich eine Verdrahtung zum Routen von Daten zwischen den Komponenten der Beschleunigungs-Engine 2500. In einigen Fällen kann der Chip-Interconnect 2520 eine minimale Menge an Logik beinhalten, wie etwa Multiplexer zum Steuern der Datenrichtung, Flip-Flops zum Behandeln von Taktdomänenkreuzungen und Zeitsteuerungslogik.
  • 26 beinhaltet ein Diagramm eines beispielhaften Netzwerks 2600, das ein oder mehrere Host-Systeme beinhalten kann, wie etwa das in 24 veranschaulichte Host-System. Beispielsweise beinhaltet das beispielhafte Netzwerk 2600 aus 26 mehrere Knoten 2602a-2602h, von denen einer oder mehrere ein Host-System sein können, wie in 24 veranschaulicht. Andere der Knoten 2602a-2602h können andere Rechenvorrichtungen sein, von denen jede mindestens einen Speicher zum Speichern von Programmanweisungen, einen Prozessor zum Ausführen der Anweisungen und eine Netzwerkschnittstelle zum Verbinden mit dem Netzwerk 2600 beinhaltet.
  • In verschiedenen Beispielen kann das Netzwerk 2600 dazu verwendet werden, Daten zu verarbeiten. Beispielsweise können Eingabedaten an einem der Knoten 2602a-2602h oder von anderen Netzwerken 2608, mit denen das Netzwerk 2600 kommunizieren kann, empfangen werden. In diesem Beispiel können die Eingabedaten an einen Knoten in dem Netzwerk 2600, das eine Beschleunigungs-Engine beinhaltet, gerichtet sein, damit die Beschleunigungs-Engine damit arbeiten kann und ein Ergebnis erzeugen kann. Das Ergebnis kann dann an den Knoten oder ein anderes Netzwerk, von dem die Eingabedaten empfangen wurden, übertragen werden. In verschiedenen Beispielen können Eingabedaten aus verschiedenen Quellen akkumuliert werden, einschließlich einem oder mehreren der Knoten 2602a-2602h und/oder Rechenvorrichtungen, die sich in den anderen Netzwerken 2608 befinden, und die akkumulierten Eingabedaten können an ein oder mehrere Host-Systeme in dem Netzwerk 2600 geleitet werden. Ergebnisse aus den Host-Systemen können dann zurück an die Quellen verteilt werden, aus denen die Eingabedaten gesammelt wurden.
  • In verschiedenen Beispielen können einer oder mehrere der Knoten 2602a-2602h für Operationen verantwortlich sein, wie etwa das Akkumulieren von Eingabedaten für Host-Systeme, mit denen gearbeitet werden soll, das Verfolgen, welche Host-Systeme beschäftigt sind und welche mehr Arbeit annehmen können, das Bestimmen, ob die Host-Systeme korrekt und/oder am effizientesten arbeiten, das Überwachen der Netzwerksicherheit und/oder andere Verwaltungsoperationen.
  • In dem Beispiel aus 26 sind die Knoten 2602a-2602h unter Verwendung einer Switch-Architektur mit Punkt-zu-Punkt-Verbindungen miteinander verbunden. Die Switch-Architektur beinhaltet mehrere Switches 2604a-2604d, die in einem mehrschichtigen Netzwerk wie etwa einem Clos-Netzwerk angeordnet sein können. Ein Netzwerkgerät, das Pakete zwischen LAN (Local Area Network)-Segmenten filtert und weiterleitet, kann als Switch bezeichnet werden. Switches arbeiten im Allgemeinen auf der Sicherungsschicht (Schicht 2) und manchmal auf der Netzwerkschicht (Schicht 3) des Open System Interconnect (OSI)-Referenzmodells und können mehrere Paketprotokolle unterstützen. Die Switches 2604a-2604d aus 26 können mit den Knoten 2602a-2602h verbunden sein und mehrere Pfade zwischen zwei beliebigen Knoten bereitstellen.
  • Das Netzwerk 2600 kann auch ein oder mehrere Netzwerkgeräte zur Verbindung mit anderen Netzwerken 2608, wie etwa einem Router 2606, beinhalten. Router verwenden Header und Weiterleitungstabellen, um den besten Pfad zum Weiterleiten der Pakete zu bestimmen, und verwenden Protokolle wie etwa das Internet Control Message Protocol (ICMP), um miteinander zu kommunizieren und die beste Route zwischen zwei beliebigen Geräten zu konfigurieren. Der Router 2606 aus 26 kann dazu verwendet werden, eine Verbindung mit anderen Netzwerken 2608 wie etwa Subnetzen, LAN, Weitverkehrsnetzen (WAN) und/oder dem Internet herzustellen.
  • In einigen Beispielen kann das Netzwerk 2600 ein beliebiges oder eine Kombination mehrerer verschiedener Arten von Netzwerken beinhalten, wie etwa Kabelnetzwerke, das Internet, drahtlose Netzwerke und andere private und/oder öffentliche Netzwerke. Die miteinander verbundenen Switches 2604a-2604d und der Router 2606, falls vorhanden, können als eine Switch-Fabric 2610, eine Fabric, eine Netzwerk-Fabric oder einfach als ein Netzwerk bezeichnet werden. Im Kontext eines Computernetzwerks können die Begriffe „Fabric“ und „Netzwerk“ hierin austauschbar verwendet werden.
  • Die Knoten 2602a-2602h können eine beliebige Kombination von Host-Systemen, Prozessorknoten, Speichersubsystemen und E/A-Chassis sein, die Benutzervorrichtungen, Dienstanbieter-Computer oder Computer von Drittanbietern darstellen.
  • Benutzervorrichtungen können Rechenvorrichtungen beinhalten, um auf eine Anwendung 2632 (z. B. einen Webbrowser oder eine Mobilvorrichtungsanwendung) zuzugreifen. In einigen Aspekten kann die Anwendung 2632 gehostet, verwaltet und/oder von einem Computerressourcendienst oder Dienstanbieter bereitgestellt sein. Die Anwendung 2632 kann es dem/den Benutzer(n) ermöglichen, mit dem/den Dienstanbieter-Computer(n) zu interagieren, um beispielsweise auf Webinhalte (z. B. Webseiten, Musik, Video usw.) zuzugreifen. Die Benutzervorrichtung(en) kann/können eine Rechenvorrichtung sein, wie beispielsweise ein Mobiltelefon, ein Smartphone, ein Personal Digital Assistant (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, ein Thin-Client-Gerät, ein Tablet-Computer, ein Lesegerät für elektronische Bücher (E-Books), eine Spielkonsole usw. In einigen Beispielen kann/können die Benutzervorrichtung(en) mit dem/den Computer(n) des Dienstanbieters über das/die andere(n) Netzwerk(e) 2608 kommunizieren. Außerdem kann/können die Benutzervorrichtung(en) Teil des verteilten Systems sein, das von dem/den Dienstanbieter-Computer(n) verwaltet wird, gesteuert wird oder anderweitig ein Teil davon ist (z. B. eine in die Dienstanbieter-Computer integrierte Konsolenvorrichtung).
  • Der/die Knoten aus 26 kann/können auch einen oder mehrere Dienstanbieter-Computer darstellen. Ein oder mehrere Dienstanbieter-Computer können eine native Anwendung bereitstellen, die so konfiguriert ist, dass sie auf den Benutzervorrichtungen, mit denen der/die Benutzer interagieren kann/können, läuft. Der/die Dienstanbieter-Computer können in einigen Beispielen Rechenressourcen bereitstellen, wie etwa unter anderem Client-Entitäten, Datenspeicherung mit geringer Latenz, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen, elektronisches Content-Performance-Management und so weiter. Der/die Dienstanbieter-Computer kann/können auch dazu betreibbar sein, dem/den Benutzer(n) Webhosting, Datenbanken, Computeranwendungsentwicklungs- und/oder Implementierungsplattformen, Kombinationen der vorstehenden oder dergleichen bereitzustellen. In einigen Beispielen kann/können der/die Dienstanbieter-Computer als eine oder mehrere virtuelle Maschinen bereitgestellt sein, die in einer gehosteten Rechenumgebung implementiert sind. Die gehostete Rechenumgebung kann eine oder mehrere schnell bereitgestellte und freigegebene Computerressourcen beinhalten. Diese Rechenressourcen können Rechen-, Netzwerk- und/oder Speichervorrichtungen beinhalten. Eine gehostete Rechenumgebung kann auch als Cloud-Rechenumgebung bezeichnet werden. Der/die Dienstanbieter-Computer können einen oder mehrere Server beinhalten, die möglicherweise in einem Cluster, als eine Serverfarm oder als einzelne Server, die nicht miteinander verbunden sind, angeordnet sind, und können die Anwendung 2632 und/oder Cloud-basierte Softwaredienste hosten. Diese Server können als Teil einer integrierten, verteilten Rechenumgebung konfiguriert sein. In einigen Aspekten kann/können der/die Dienstanbieter-Computer zusätzlich oder alternativ Rechenvorrichtungen wie etwa ein Mobiltelefon, ein Smartphone, einen Personal Digital Assistant (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, ein Server-Computer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielkonsole usw. beinhalten. In einigen Fällen kann/können der/die Dienstanbieter-Computer mit einem oder mehreren Drittanbieter-Computern kommunizieren.
  • In einer beispielhaften Konfiguration kann/können der/die Knoten 2602a-2602h mindestens einen Speicher 2618 und eine oder mehrere Verarbeitungseinheiten (oder Prozessor(en) 2620) beinhalten. Der/die Prozessor(en) 2620 kann/können in Hardware, computerausführbaren Anweisungen, Firmware oder Kombinationen davon implementiert sein. Implementierungen des/der Prozessors/Prozessoren 2620 in Software oder Firmware können computerausführbare oder maschinenausführbare Anweisungen beinhalten, die in einer geeigneten Programmiersprache geschrieben sind, um die verschiedenen beschriebenen Funktionen durchzuführen.
  • In einigen Fällen kann/können der/die Hardwareprozessor(en) 2620 ein Einzelkernprozessor oder ein Mehrkernprozessor sein. Ein Mehrkernprozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors beinhalten. In einigen Beispielen können sich die Mehrkernprozessoren bestimmte Ressourcen teilen, wie etwa Busse und Caches der zweiten oder dritten Ebene. In einigen Fällen kann jeder Kern in einem Einzel- oder Mehrkernprozessor auch mehrere ausführende logische Prozessoren (oder ausführende Threads) beinhalten. In einem derartigen Kern (z. B. solchen mit mehreren logischen Prozessoren) können auch mehrere Stufen der Ausführungspipeline und auch Caches niedrigerer Ebene gemeinsam genutzt werden.
  • Der Speicher 2618 kann Programmanweisungen, die auf dem/den Prozessor(en) 2620 geladen und ausgeführt werden können, sowie Daten, die während der Ausführung dieser Programme erzeugt oder empfangen werden, speichern. Abhängig von der Konfiguration und dem Typ des/der Knoten(s) 2602a-2602h kann der Speicher 2618 flüchtig (wie etwa RAM) und/oder nichtflüchtig (wie etwa ROM, Flash-Speicher usw.) sein. Der Speicher 2618 kann ein Betriebssystem 2628, einen oder mehrere Datenspeicher 2630, eine oder mehrere Anwendungen 2632, einen oder mehrere Treiber 2634 und/oder Dienste zum Implementieren der hierin offenbarten Features beinhalten.
  • Das Betriebssystem 2628 kann grundlegende Funktionen der Knoten 2602a-2602h unterstützen, wie etwa das Planen von Aufgaben, das Ausführen von Anwendungen und/oder Controller-Peripheriegeräte. In einigen Implementierungen kann ein Dienstanbieter-Computer eine oder mehrere virtuelle Maschinen hosten. In diesen Implementierungen kann jede virtuelle Maschine dazu konfiguriert sein, ihr eigenes Betriebssystem auszuführen. Beispiele für Betriebssysteme beinhalten Unix, Linux, Windows, Mac OS, iOS, Android und dergleichen. Das Betriebssystem 2628 kann auch ein proprietäres Betriebssystem sein.
  • Die Datenspeicher 2630 können permanente oder vorübergehende Daten beinhalten, die von dem Betriebssystem 2628, den Anwendungen 2632 oder den Treibern 2634 verwendet und/oder bearbeitet werden. Beispiele für solche Daten beinhalten Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten usw. Die Informationen in den Datenspeichern 2630 können in einigen Implementierungen über das/die Netzwerk(e) 2608 an Benutzervorrichtungen bereitgestellt werden. In einigen Fällen können die Datenspeicher 2630 zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber beinhalten. Alternativ oder zusätzlich können die Datenspeicher 2630 Standard- und/oder proprietäre Softwarebibliotheken und/oder Standard- und/oder proprietäre Anwendungsbenutzerschnittstellen (API)-Bibliotheken speichern. In den Datenspeichern 2630 gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
  • Die Treiber 2634 beinhalten Programme, die eine Kommunikation zwischen Komponenten in einem Knoten bereitstellen können. Zum Beispiel können einige Treiber 2634 eine Kommunikation zwischen dem Betriebssystem 2628 und zusätzlichem Speicher 2622, dem Netzwerkgerät 2624 und/oder dem E/A-Gerät 2626 bereitstellen. Alternativ oder zusätzlich können einige Treiber 2634 eine Kommunikation zwischen Anwendungen 2632 und dem Betriebssystem 2628 und/oder Anwendungen 2632 und Peripheriegeräten, auf die der Dienstanbieter-Computer zugreifen kann, bereitstellen. In vielen Fällen können die Treiber 2634 Treiber beinhalten, die eine gut verstandene Funktionalität bereitstellen (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Treiber für Solid-State-Vorrichtungen). In anderen Fällen können die Treiber 2634 proprietäre oder spezialisierte Funktionalität bereitstellen.
  • Der/die Dienstanbieter-Computer oder Server können auch zusätzlichen Speicher 2622 beinhalten, der entfernbaren Speicher und/oder nicht-entfernbaren Speicher beinhalten kann. Der zusätzliche Speicher 2622 kann Magnetspeicher, optische Plattenspeicher, Solid-State-Speicherplatten, Flash-Speicher und/oder Bandspeicher beinhalten. Der zusätzliche Speicher 2622 kann in demselben Rahmen wie der/die Knoten 2602a-2602h untergebracht sein oder kann sich in einem externen Gehäuse befinden. Der Speicher 2618 und/oder der zusätzliche Speicher 2622 und ihre zugehörigen computerlesbaren Medien können eine nichtflüchtige Speicherung von computerlesbaren Anweisungen, Datenstrukturen, Programmmodulen und anderen Daten für die Rechenvorrichtungen bereitstellen. In einigen Implementierungen kann der Speicher 2618 mehrere verschiedene Typen von Speicher beinhalten, wie etwa SRAM, DRAM oder ROM.
  • Der Speicher 2618 und der zusätzliche Speicher 2622, sowohl entfernbar als auch nichtentfernbar, sind Beispiele für computerlesbare Speichermedien. Computerlesbare Speichermedien können flüchtige und nicht-flüchtige, entfernbare und nicht-entfernbare Medien beinhalten, die in einen Verfahren oder einer Technologie zum Speichern von Informationen implementiert sind, wobei die Informationen zum Beispiel computerlesbare Anweisungen, Datenstrukturen, Programmmodule oder anderen Daten beinhalten. Der Speicher 2618 und der zusätzliche Speicher 2622 sind Beispiele für Computerspeichermedien. Zusätzliche Arten von Computerspeichermedien, die in dem/den Knoten 2602a-2602h vorhanden sein können, können unter anderem PRAM, SRAM, DRAM, RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologie, CD-ROM, DVD oder andere optische Speicher, Magnetkassetten, Magnetband, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen, Solid-State-Laufwerke oder andere Medien, die zum Speichern der gewünschten Informationen verwendet werden können und auf die der/die Knoten 2602a-2602h zugreifen kann/können, beinhalten. Computerlesbare Medien beinhalten auch Kombinationen von beliebigen der vorstehenden Medientypen, einschließlich mehrerer Einheiten eines Medientyps.
  • Alternativ oder zusätzlich können computerlesbare Kommunikationsmedien computerlesbare Anweisungen, Programmmodule oder andere Daten beinhalten, die innerhalb eines Datensignals übertragen werden, wie etwa einer Trägerwelle oder einer anderen Übertragung. Wie hierin verwendet, beinhalten computerlesbare Speichermedien jedoch keine computerlesbaren Kommunikationsmedien.
  • Der/die Knoten 2602a-2602h kann/können auch E/A-Gerät(e) 2626 beinhalten, wie etwa eine Tastatur, eine Maus, einen Stift, eine Spracheingabevorrichtung, eine Berührungseingabevorrichtung, eine Anzeige, Lautsprecher, einen Drucker und dergleichen. Der/die Knoten 2602a-2602h kann/können auch einen oder mehrere Kommunikationskanäle 2636 beinhalten. Ein Kommunikationskanal 2636 kann ein Medium bereitstellen, über das die verschiedenen Komponenten des/der Knoten(s) 2602a-2602h kommunizieren können. Der Kommunikationskanal oder die Kommunikationskanäle 2636 können die Form eines Busses, eines Rings, einer Switching-Fabric oder eines Netzwerks annehmen.
  • Der/die Knoten 2602a-2602h kann/können auch Netzwerkgerät(e) 2624 enthalten, die es dem/den Knoten 2602a-2602h ermöglichen, mit einer gespeicherten Datenbank, einer anderen Rechenvorrichtung oder einem anderen Server, Benutzerterminals und/oder anderen Geräten auf dem/den Netzwerk(en) 2600 zu kommunizieren.
  • In einigen Implementierungen ist das Netzwerkgerät 2624 ein Peripheriegerät, wie etwa ein PCI-basiertes Gerät. In diesen Implementierungen beinhaltet das Netzwerkgerät 2624 eine PCI-Schnittstelle zum Kommunizieren mit einem Host-Gerät. Der Begriff „PCI“ oder „PCIbasiert“ kann dazu verwendet werden, ein beliebiges Protokoll der PCI-Familie von Busprotokollen zu beschreiben, einschließlich des ursprünglichen PCI-Standards, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express (PCIe) oder einer beliebigen anderen Verbesserung oder abgeleiteter Protokolle, die auf den hierin erörterten PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle zum Verbinden von Geräten, wie etwa einem lokalen Peripheriegerät mit einem Host-Gerät. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation definiert und von verschiedenen Herstellern übernommen wurde. Hersteller stellen sicher, dass konforme Geräte mit Rechensystemen, die das Busprotokoll implementieren, kompatibel sind und umgekehrt. Wie hierin verwendet, beinhalten PCI-basierte Vorrichtungen auch Vorrichtungen, die unter Verwendung von Non-Volatile Memory Express (NVMe) kommunizieren. NVMe ist eine Geräteschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die mit PCIe an ein Rechensystem angeschlossen sind. Zum Beispiel kann das Busschnittstellenmodul NVMe implementieren und das Netzwerkgerät 2624 kann unter Verwendung einer PCIe-Schnittstelle mit einem Rechensystem verbunden sein.
  • Ein PCI-basiertes Gerät kann eine oder mehrere Funktionen beinhalten. Eine „Funktion“ beschreibt Operationen, die von dem Netzwerkgerät 2624 bereitgestellt werden können. Beispiele für Funktionen beinhalten unter anderem Massenspeicher-Controller, Netzwerk-Controller, Anzeige-Controller, Speicher-Controller, serielle Bus-Controller, drahtlose Controller und Verschlüsselungs- und Entschlüsselungs-Controller. In einigen Fällen kann ein PCI-basiertes Gerät mehr als eine Funktion beinhalten. Beispielsweise kann ein PCI-basiertes Gerät einen Massenspeicher-Controller und einen Netzwerkadapter bereitstellen. Als weiteres Beispiel kann ein PCI-basiertes Gerät zwei Speicher-Controller bereitstellen, um zwei unterschiedliche Speicherressourcen zu steuern. In einigen Implementierungen kann ein PCI-basiertes Gerät bis zu acht Funktionen aufweisen.
  • In einigen Implementierungen kann das Netzwerkgerät 2624 eine Single-Root-E/A-Virtualisierung (SR-IOV) beinhalten. SR-IOV ist eine erweiterte Fähigkeit, die in einem PCI-basierten Gerät beinhaltet sein kann. SR-IOV ermöglicht, dass eine physische Ressource (z. B. ein einzelner Netzwerkschnittstellen-Controller) als mehrere Ressourcen (z. B. 64 Netzwerkschnittstellen-Controller) erscheint. Somit kann ein PCI-basiertes Gerät, das eine bestimmte Funktionalität bereitstellt (z. B. ein Netzwerkschnittstellen-Controller), für ein Gerät, das das PCI-basierte Gerät verwendet, als mehrere Geräte, die dieselbe Funktionalität bereitstellen, erscheinen. Die Funktionen eines SR-IOV-fähigen Speicheradaptergeräts können als physische Funktionen (PF) oder virtuelle Funktionen (VF) klassifiziert sein. Physische Funktionen sind voll funktionsfähige Funktionen des Geräts, die erkannt, verwaltet und manipuliert werden können. Physische Funktionen verfügen über Konfigurationsressourcen, die zum Konfigurieren oder Steuern des Speicheradaptergeräts verwendet werden können. Physische Funktionen beinhalten denselben Konfigurationsadressraum und Speicheradressraum, den ein nicht virtualisiertes Gerät haben würde. Einer physischen Funktion kann eine Reihe von virtuellen Funktionen zugeordnet sein. Virtuelle Funktionen ähneln physischen Funktionen, sind jedoch leichtgewichtige Funktionen, denen im Allgemeinen Konfigurationsressourcen fehlen und die im Allgemeinen durch die Konfiguration ihrer zugrunde liegenden physischen Funktionen gesteuert werden. Jede der physischen Funktionen und/oder virtuellen Funktionen kann einem jeweiligen Ausführungs-Thread (wie beispielsweise einer virtuellen Maschine), der auf einem Host-Gerät läuft, zugewiesen werden.
  • Die hierin beschriebenen Module können Softwaremodule, Hardwaremodule oder eine geeignete Kombination davon sein. Wenn die Module Softwaremodule sind, können die Module auf einem nicht-transitorischen computerlesbaren Medium ausgeführt und von einem Prozessor in einem der hierin beschriebenen Computersysteme verarbeitet werden. Es sollte beachtet werden, dass die beschriebenen Prozesse und Architekturen entweder in Echtzeit oder in einem asynchronen Modus vor einer beliebigen Benutzerinteraktion durchgeführt werden können. Die Module können auf die in den vorhergehenden Figuren vorgeschlagene Weise konfiguriert sein und/oder hierin beschriebene Funktionen können durch ein oder mehrere Module bereitgestellt werden, die als separate Module existieren und/oder hierin beschriebene Modulfunktionen können auf mehrere Module verteilt sein.
  • Die Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nicht einschränkenden Sinne zu verstehen. Es versteht sich jedoch, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom umfassenden Geist und Umfang der Offenbarung abzuweichen, die in den Patentansprüchen dargelegt sind.
  • Andere Variationen liegen innerhalb des Geistes der vorliegenden Offenbarung. Somit können zwar bezüglich der offenbarten Techniken diverse Modifikationen und alternative Konstruktionen vorgenommen werden, bestimmte veranschaulichte Beispiele davon werden jedoch in den Zeichnungen gezeigt und wurden vorangehend ausführlich beschrieben. Allerdings versteht es sich, dass nicht die Absicht verfolgt wird, die Offenbarung auf die konkrete(n) offenbarte(n) Form(en) einzuschränken, sondern die Absicht ganz im Gegenteil darin besteht, sämtliche Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Geist und Umfang der wie in den beigefügten Ansprüchen definierten Offenbarung abzudecken.
  • Die Verwendung der Begriffe „ein“ und „eine“ und „der/die/das“ und ähnlicher Referenten im Zusammenhang der Beschreibung der offenbaren Beispiele (besonders im Zusammenhang der folgenden Patentansprüche) soll so ausgelegt werden, dass sie sowohl den Singular als auch den Plural abdeckt, sofern hierin nicht anderweitig angegeben oder im eindeutigen Widerspruch zum Kontext. Die Begriffe „umfassend“, „aufweisend“, „beinhaltend“ und „enthaltend“ sind als offene Begriffe auszulegen (d. h. „einschließlich unter anderem“), sofern nicht anderweitig angegeben. Der Begriff „verbunden“ ist als teilweise oder vollständig ineinander enthalten, aneinander befestigt oder aneinander angefügt auszulegen, selbst, wenn ein Element dazwischen eingefügt ist. Die Nennung von Wertebereichen hierin soll lediglich als schnelle Methode des einzelnen Bezugnehmens auf jeden separaten Wert dienen, der in den Bereich fällt, es sei denn, hierin ist etwas anderes angegeben, und jeder separate Wert ist in die Beschreibung eingeschlossen, als ob er einzeln hierin wiedergegeben wäre. Alle hierin beschriebenen Verfahren können in jeder geeigneten Reihenfolge durchgeführt werden, sofern es hierin nicht anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht. Die Verwendung jeglicher Beispiele oder beispielhafter Wortwahl (z. B. „wie etwa“), die hierin bereitgestellt sind, soll lediglich die Beispiele der Offenbarung besser veranschaulichen und stellt keine Einschränkung des Umfangs der Offenbarung dar, es sei denn, es ist etwas anderes beansprucht. Keinerlei Formulierung in der Beschreibung sollte so ausgelegt werden, dass sie ein beliebiges nicht beanspruchtes Element als für die Implementierung der Offenbarung wesentlich angibt.
  • Sofern nicht ausdrücklich anderes angegeben, sind disjunktive Formulierungen, wie etwa der Ausdruck „mindestens eins von X, Y oder Z“ innerhalb des Kontexts so aufzufassen, wie sie im Allgemeinen verwendet werden, um wiederzugeben, dass ein Artikel, Terminus usw. entweder X, Y oder Z oder eine beliebige Kombination daraus (z. B. X, Y und/oder Z) sein kann. Somit ist eine derartige disjunktive Sprache im Allgemeinen nicht dazu gedacht, und sollte nicht dazu verwendet werden, dass bestimmte Beispiele erforderlich machen, dass mindestens eines von X, mindestens eines von Y oder mindestens eines von Z jeweils vorhanden ist.
  • Hierin sind verschiedene Beispiele dieser Offenbarung, einschließlich der besten den Erfindern bekannten Art und Weise zum Ausführen der Erfindung, beschrieben. Der Fachmann kann bei der Lektüre der vorstehenden Beschreibung Variationen dieser beschriebenen Beispiele erkennen. Die Erfinder gehen davon aus, dass der Fachmann derlei Variationen im geeigneten Fall anwendet, und die Erfinder sehen vor, dass die Offenbarung anders als hierin konkret beschrieben implementiert werden kann. Dementsprechend beinhaltet diese Offenbarung alle Modifikationen und Äquivalente des in den beigefügten Patentansprüchen dargelegten Gegenstands, wie es durch das jeweils geltende Recht zulässig ist. Darüber hinaus ist jede beliebige Kombination der vorstehend beschriebenen Elemente in allen möglichen Variationen davon durch die Offenbarung abgedeckt, sofern es hierin nicht anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht.
  • Bestimmte Ausführungsformen werden in den folgenden Beispielen beschrieben. Wie nachfolgend verwendet, ist eine beliebige Bezugnahme auf eine Reihe von Beispielen als eine Bezugnahme auf jedes Beispiel der Reihe von Beispielen getrennt zu verstehen (z. B. ist „Beispiele 1-3“ als „Beispiel 1, Beispiel 2 oder Beispiel 3“ zu verstehen).
  • In Beispiel 1 umfasst ein computerimplementiertes Verfahren Folgendes: ein Empfangen eines Modells eines neuronalen Netzes, das eine erste Tensoroperation beinhaltet; ein Teilen der ersten Tensoroperation in Unteroperationen der ersten Tensoroperation, wobei die Unteroperationen zwei Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den beiden Unteroperationen aufweisen; ein Zuweisen einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine; und ein Erzeugen von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine.
  • In Beispiel 2 beinhaltet die erste Tensoroperation des computerimplementierten Verfahrens aus Beispiel 1 eine Mehrschicht-Perzeptronoperation.
  • In Beispiel 3 erzeugt die erste Tensoroperation des computerimplementierten Verfahrens eines der Beispiele 1-2 unter Verwendung eines Satzes von Eingabe-Feature-Maps und eines Satzes von Filtern einen Ausgabetensor, der einen Satz von Ausgabe-Feature-Maps beinhaltet.
  • Beispiel 4 beinhaltet das computerimplementierte Verfahren aus Beispiel 3, wobei: der Satz von Eingabe-Feature-Maps C Eingabe-Feature-Maps für jeden von N Eingabedatensätzen beinhaltet; der Satz von Filtern M Filter beinhaltet, von denen jeder C Filtermatrizen beinhaltet; und der Satz von Ausgabe-Feature-Maps M Ausgabe-Feature-Maps für jeden der N Eingabedatensätze beinhaltet, wobei jede der M Ausgabe-Feature-Maps für einen Eingabedatensatz das Ergebnis einer Faltung zwischen den C Eingabe-Feature-Maps des Eingabedatensatzes und den C Filtermatrizen in einem Filter der M Filter ist.
  • In Beispiel 5 beinhaltet die erste Rechen-Engine des computerimplementierten Verfahrens aus Beispiel 4 ein zweidimensionales Verarbeitungselement-Array, das durch Folgendes gekennzeichnet ist: eine Gesamtzahl von Spalten des zweidimensionalen Verarbeitungselement-Arrays von weniger als M; oder eine Gesamtzahl von Zeilen des zweidimensionalen Verarbeitungselement-Arrays von weniger als C.
  • In Beispiel 6 erzeugt die erste Unteroperation des computerimplementierten Verfahrens eines der Beispiele 3-5 einen Teil des Satzes von Ausgabe-Feature-Maps.
  • Beispiel 7 beinhaltet das computerimplementierte Verfahren aus Beispiel 6, wobei der Teil des Satzes von Ausgabe-Feature-Maps mindestens eines der Folgenden beinhaltet: einen Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps; einen Teil jeder Ausgabe-Feature-Map in mindestens einer Teilmenge des Satzes von Ausgabe-Feature-Maps; oder ein Teil jeder Ausgabe-Feature-Map in einem Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps.
  • In Beispiel 8 erzeugt die erste Unteroperation des computerimplementierten Verfahrens eines der Beispiele 6-7 den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung von mindestens einem der Folgenden: dem Satz von Eingabe-Feature-Maps und einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern; dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in mindestens einer Teilmenge des Satzes von Eingabe-Feature-Maps; oder einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in einer Teilmenge des Satzes von Eingabe-Feature-Maps.
  • In Beispiel 9 umfasst das computerimplementierte Verfahren eines der Beispiele 1-8 ferner ein Erzeugen von Anweisungen zum Ziehen einer Schlussfolgerung auf Grundlage eines Ergebnisses der ersten Unteroperation, eines Ergebnisses der zweiten Unteroperation oder beider.
  • In Beispiel 10 umfasst das computerimplementierte Verfahren eines der Beispiele 1-9 ferner Folgendes: ein Identifizieren einer zweiten Tensoroperation in dem Modell eines neuronalen Netzes, wobei die zweite Tensoroperation und die erste Tensoroperation keine Datenabhängigkeit aufweisen; ein Teilen der zweiten Tensoroperation in Unteroperationen der zweiten Tensoroperation, wobei die Unteroperationen der zweiten Tensoroperation keine Datenabhängigkeit aufweisen; ein Zuweisen einer ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation zu einer dritten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation zu einer vierten Rechen-Engine; und ein Erzeugen von Anweisungen zum Durchführen, parallel zu der ersten Unteroperation für die erste Tensoroperation und der zweiten Unteroperation für die erste Tensoroperation, der ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die dritte Rechen-Engine und der zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die vierte Rechen-Engine.
  • Beispiel 11 beinhaltet ein nicht-transitorisches computerlesbares Medium mit darin gespeicherten Anweisungen, wobei die Anweisungen, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren dazu veranlassen, Operationen durchzuführen, einschließlich: eines Empfangens eines Modells eines neuronalen Netzes, das eine Tensoroperation beinhaltet; eines Teilens der Tensoroperation in Unteroperationen, wobei die Unteroperationen zwei Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den beiden Unteroperationen aufweisen; eines Zuweisens einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine; eines Zuweisens einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine; und eines Erzeugens von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine.
  • Beispiel 12 beinhaltet das nicht-transitorische computerlesbare Medium aus Beispiel 11, wobei die Anweisungen ferner bewirken, dass der eine oder die mehreren Prozessoren Operationen durchführen, einschließlich: eines Erzeugens von Anweisungen zum Ziehen einer Schlussfolgerung auf Grundlage eines Ergebnisses der ersten Unteroperation, eines Ergebnisses der zweiten Unteroperation oder beider, wobei sich die erste Rechen-Engine und die zweite Rechen-Engine in derselben integrierten Schaltungsvorrichtung oder in zwei verschiedenen integrierten Schaltungsvorrichtungen befinden.
  • Beispiel 13 beinhaltet das nicht-transitorische computerlesbare Medium eines der Beispiele 11-12, wobei: die erste Tensoroperation unter Verwendung eines Satzes von Eingabe-Feature-Maps und eines Satzes von Filtern einen Ausgabetensor erzeugt, der ein Satz von Ausgabe-Feature-Maps beinhaltet; und die erste Unteroperation einen Teil des Satzes von Ausgabe-Feature-Maps erzeugt.
  • Beispiel 14 beinhaltet das nicht-transitorische computerlesbare Medium aus Beispiel 13, wobei der Teil des Satzes von Ausgabe-Feature-Maps mindestens eines der Folgenden beinhaltet: einen Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps; einen Teil jeder Ausgabe-Feature-Map in mindestens einer Teilmenge des Satzes von Ausgabe-Feature-Maps; oder ein Teil jeder Ausgabe-Feature-Map in einem Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps.
  • In Beispiel 15 erzeugt das nicht-transitorische computerlesbare Medium eines der Beispiele 13-14 den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung von mindestens einem der Folgenden: dem Satz von Eingabe-Feature-Maps und einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern; dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in mindestens einer Teilmenge des Satzes von Eingabe-Feature-Maps; oder einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in einer Teilmenge des Satzes von Eingabe-Feature-Maps.
  • Beispiel 16 beinhaltet das nicht-transitorische computerlesbare Medium eines der Beispiele 13-15, wobei: der Satz von Eingabe-Feature-Maps C Eingabe-Feature-Maps für jeden von N Eingabedatensätzen beinhaltet; der Satz von Filtern M Filter beinhaltet, von denen jeder C Filtermatrizen beinhaltet; und der Satz von Ausgabe-Feature-Maps M Ausgabe-Feature-Maps für jeden der N Eingabedatensätze beinhaltet, wobei jede der M Ausgabe-Feature-Maps für einen Eingabedatensatz das Ergebnis einer Faltung zwischen den C Eingabe-Feature-Maps des Eingabedatensatzes und den C Filtermatrizen in einem Filter der M Filter ist.
  • Beispiel 17 beinhaltet das nicht-transitorische computerlesbare Medium aus Beispiel 16, wobei die erste Rechen-Engine ein zweidimensionales Verarbeitungselement-Array beinhaltet, das durch Folgendes gekennzeichnet ist: eine Gesamtzahl von Spalten des zweidimensionalen Verarbeitungselement-Arrays von weniger als M; oder eine Gesamtzahl von Zeilen des zweidimensionalen Verarbeitungselement-Arrays von weniger als C.
  • In Beispiel 18 beinhaltet die erste Tensoroperation des nicht-transitorischen computerlesbaren Mediums eines der Beispiele 11-17 eine Mehrschicht-Perzeptronoperation.
  • Beispiel 19 beinhaltet ein System, umfassend: einen Prozessor und ein computerlesbares Medium, das Anweisungen umfasst, die bei Ausführung durch den Prozessor den Prozessor dazu veranlassen, Operationen durchzuführen, die Folgendes umfassen: ein Empfangen eines Modells eines neuronalen Netzes, das eine erste Tensoroperation beinhaltet; ein Teilen der ersten Tensoroperation in Unteroperationen der ersten Tensoroperation, wobei die Unteroperationen zwei Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den beiden Unteroperationen aufweisen; ein Zuweisen einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine; und ein Erzeugen von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine.
  • In Beispiel 20 beinhaltet die erste Tensoroperation des Systems aus Beispiel 19 eine Mehrschicht-Perzeptronoperation.
  • In Beispiel 21 erzeugt die erste Tensoroperation des Systems eines der Beispiele 19-20 unter Verwendung eines Satzes von Eingabe-Feature-Maps und eines Satzes von Filtern einen Ausgabetensor, der einen Satz von Ausgabe-Feature-Maps beinhaltet.
  • Beispiel 22 beinhaltet das System aus Beispiele 21, wobei: der Satz von Eingabe-Feature-Maps C Eingabe-Feature-Maps für jeden von N Eingabedatensätzen beinhaltet; der Satz von Filtern M Filter beinhaltet, von denen jeder C Filtermatrizen beinhaltet; und der Satz von Ausgabe-Feature-Maps M Ausgabe-Feature-Maps für jeden der N Eingabedatensätze beinhaltet, wobei jede der M Ausgabe-Feature-Maps für einen Eingabedatensatz das Ergebnis einer Faltung zwischen den C Eingabe-Feature-Maps des Eingabedatensatzes und den C Filtermatrizen in einem Filter der M Filter ist.
  • In Beispiel 23 beinhaltet die erste Rechen-Engine des Systems aus Beispiel 22 ein zweidimensionales Verarbeitungselement-Array, das durch Folgendes gekennzeichnet ist: eine Gesamtzahl von Spalten des zweidimensionalen Verarbeitungselement-Arrays von weniger als M; oder eine Gesamtzahl von Zeilen des zweidimensionalen Verarbeitungselement-Arrays von weniger als C.
  • In Beispiel 24 erzeugt die erste Unteroperation des Systems eines der Beispiele 21-23 einen Teil des Satzes von Ausgabe-Feature-Maps.
  • Beispiel 25 beinhaltet das System aus Beispiel 24, wobei der Teil des Satzes von Ausgabe-Feature-Maps mindestens eines der Folgenden beinhaltet: einen Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps; einen Teil jeder Ausgabe-Feature-Map in mindestens einer Teilmenge des Satzes von Ausgabe-Feature-Maps; oder ein Teil jeder Ausgabe-Feature-Map in einem Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps.
  • Beispiel 26 beinhaltet das System eines der Beispiele 24-25, wobei die erste Unteroperation den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung von mindestens einem der Folgenden erzeugt: dem Satz von Eingabe-Feature-Maps und einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern; dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in mindestens einer Teilmenge des Satzes von Eingabe-Feature-Maps; oder einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in einer Teilmenge des Satzes von Eingabe-Feature-Maps.
  • In Beispiel 27 umfassen die Operationen des Systems eines der Beispiele 19-26 ferner ein Erzeugen von Anweisungen zum Ziehen einer Schlussfolgerung auf Grundlage eines Ergebnisses der ersten Unteroperation, eines Ergebnisses der zweiten Unteroperation oder beider.
  • In Beispiel 28 umfassen die Operationen des Systems eines der Beispiele 19-27 ferner Folgendes: ein Identifizieren einer zweiten Tensoroperation in dem Modell eines neuronalen Netzes, wobei die zweite Tensoroperation und die erste Tensoroperation keine Datenabhängigkeit aufweisen; ein Teilen der zweiten Tensoroperation in Unteroperationen der zweiten Tensoroperation, wobei die Unteroperationen der zweiten Tensoroperation keine Datenabhängigkeit aufweisen; ein Zuweisen einer ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation zu einer dritten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation zu einer vierten Rechen-Engine; und ein Erzeugen von Anweisungen zum Durchführen, parallel zu der ersten Unteroperation für die erste Tensoroperation und der zweiten Unteroperation für die erste Tensoroperation, der ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die dritte Rechen-Engine und der zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die vierte Rechen-Engine.

Claims (15)

  1. Computerimplementiertes Verfahren, umfassend: ein Empfangen eines Modells eines neuronalen Netzes, das eine erste Tensoroperation beinhaltet; ein Teilen der ersten Tensoroperation in Unteroperationen der ersten Tensoroperation, wobei die Unteroperationen zwei oder mehr Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den zwei Unteroperationen aufweisen; ein Zuweisen einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine; und ein Erzeugen von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine.
  2. Computerimplementiertes Verfahren nach Anspruch , wobei die erste Tensoroperation eine Mehrschicht-Perzeptronoperation beinhaltet.
  3. Computerimplementiertes Verfahren nach einem der Ansprüche -, wobei die erste Tensoroperation unter Verwendung eines Satzes von Eingabe-Feature-Maps und eines Satzes von Filtern einen Ausgabetensor, der einen Satz von Ausgabe-Feature-Maps beinhaltet, erzeugt.
  4. Computerimplementiertes Verfahren nach Anspruch , wobei: der Satz von Eingabe-Feature-Maps C Eingabe-Feature-Maps für jeden von N Eingabedatensätzen beinhaltet; der Satz von Filtern M Filter beinhaltet, von denen jeder C Filtermatrizen beinhaltet; und der Satz von Ausgabe-Feature-Maps M Ausgabe-Feature-Maps für jeden der N Eingabedatensätze beinhaltet, wobei jede der M Ausgabe-Feature-Maps für einen Eingabedatensatz das Ergebnis einer Faltung zwischen den C Eingabe-Feature-Maps des Eingabedatensatzes und den C Filtermatrizen in einem Filter der M Filter ist.
  5. Computerimplementiertes Verfahren nach Anspruch , wobei die erste Rechen-Engine ein zweidimensionales Verarbeitungselement-Array beinhaltet, das durch Folgendes gekennzeichnet ist: eine Gesamtzahl von Spalten des zweidimensionalen Verarbeitungselement-Arrays von weniger als M; oder eine Gesamtzahl von Zeilen des zweidimensionalen Verarbeitungselement-Arrays von weniger als C.
  6. Computerimplementiertes Verfahren nach einem der Ansprüche -, wobei die erste Unteroperation einen Teil des Satzes von Ausgabe-Feature-Maps erzeugt.
  7. Computerimplementiertes Verfahren nach Anspruch, wobei der Teil des Satzes von Ausgabe-Feature-Maps mindestens eines der Folgenden beinhaltet: einen Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps; einen Teil jeder Ausgabe-Feature-Map in mindestens einer Teilmenge des Satzes von Ausgabe-Feature-Maps; oder einen Teil jeder Ausgabe-Feature-Map in einem Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps.
  8. Computerimplementiertes Verfahren nach einem der Ansprüche -, wobei die erste Unteroperation den Teil des Satzes von Ausgabe-Feature-Maps unter Verwendung von mindestens einem der Folgenden erzeugt: dem Satz von Eingabe-Feature-Maps und einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern; dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in mindestens einer Teilmenge des Satzes von Eingabe-Feature-Maps; oder einem Bruchteil einer Gesamtzahl von Filtern in dem Satz von Filtern und einem Teil jeder Eingabe-Feature-Map in einer Teilmenge des Satzes von Eingabe-Feature-Maps.
  9. Computerimplementiertes Verfahren nach einem der Ansprüche -, ferner umfassend: ein Erzeugen von Anweisungen zum Ziehen einer Schlussfolgerung auf Grundlage eines Ergebnisses der ersten Unteroperation, eines Ergebnisses der zweiten Unteroperation oder beider.
  10. Computerimplementiertes Verfahren nach Anspruch -, ferner umfassend: ein Identifizieren einer zweiten Tensoroperation in dem Modell eines neuronalen Netzes, wobei die zweite Tensoroperation und die erste Tensoroperation keine Datenabhängigkeit aufweisen; ein Teilen der zweiten Tensoroperation in Unteroperationen der zweiten Tensoroperation, wobei die Unteroperationen der zweiten Tensoroperation keine Datenabhängigkeit aufweisen; ein Zuweisen einer ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation zu einer dritten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation zu einer vierten Rechen-Engine; und ein Erzeugen von Anweisungen zum Durchführen der ersten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die dritte Rechen-Engine und der zweiten Unteroperation in den Unteroperationen der zweiten Tensoroperation durch die vierte Rechen-Engine parallel zu der ersten Unteroperation für die erste Tensoroperation und der zweiten Unteroperation für die erste Tensoroperation.
  11. Nicht-transitorisches computerlesbares Medium, auf dem Anweisungen gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren dazu veranlassen, Operationen durchzuführen, beinhaltend: ein Empfangen eines Modells eines neuronalen Netzes, das eine Tensoroperation beinhaltet; ein Teilen der Tensoroperation in Unteroperationen, wobei die Unteroperationen zwei oder mehr Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den zwei Unteroperationen aufweisen; ein Zuweisen einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine; und ein Erzeugen von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine.
  12. Nicht-transitorisches computerlesbares Medium nach Anspruch , wobei die Anweisungen den einen oder die mehrere Prozessoren dazu veranlassen, Operationen durchzuführen, beinhaltend: ein Erzeugen von Anweisungen zum Ziehen einer Schlussfolgerung auf Grundlage eines Ergebnisses der ersten Unteroperation, eines Ergebnisses der zweiten Unteroperation oder beider; wobei sich die erste Rechen-Engine und die zweite Rechen-Engine in derselben integrierten Schaltungsvorrichtung oder in zwei unterschiedlichen integrierten Schaltungsvorrichtungen befinden.
  13. Nicht-transitorisches computerlesbares Medium nach Anspruch oder 12, wobei: die erste Tensoroperation unter Verwendung eines Satzes von Eingabe-Feature-Maps und eines Satzes von Filtern einen Ausgabetensor, der einen Satz von Ausgabe-Feature-Maps beinhaltet, erzeugt; und die erste Unteroperation einen Teil des Satzes von Ausgabe-Feature-Maps erzeugt.
  14. Nicht-transitorisches computerlesbares Medium nach Anspruch, wobei der Teil des Satzes von Ausgabe-Feature-Maps mindestens eines der Folgenden beinhaltet: einen Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps; einen Teil jeder Ausgabe-Feature-Map in mindestens einer Teilmenge des Satzes von Ausgabe-Feature-Maps; oder einen Teil jeder Ausgabe-Feature-Map in einem Bruchteil einer Gesamtzahl von Ausgabe-Feature-Maps in dem Satz von Ausgabe-Feature-Maps.
  15. System, umfassend: einen Prozessor; und ein computerlesbares Medium, umfassend Anweisungen, die, wenn sie von dem Prozessor ausgeführt werden, den Prozessor dazu veranlassen, Operationen durchzuführen, umfassend: ein Empfangen eines Modells eines neuronalen Netzes, das eine erste Tensoroperation beinhaltet; ein Teilen der ersten Tensoroperation in Unteroperationen der ersten Tensoroperation, wobei die Unteroperationen zwei oder mehr Unteroperationen beinhalten, die keine Datenabhängigkeit zwischen den zwei Unteroperationen aufweisen; ein Zuweisen einer ersten Unteroperation in den zwei Unteroperationen zu einer ersten Rechen-Engine; ein Zuweisen einer zweiten Unteroperation in den zwei Unteroperationen zu einer zweiten Rechen-Engine; und ein Erzeugen von Anweisungen zum parallelen Durchführen der ersten Unteroperation durch die erste Rechen-Engine und der zweiten Unteroperation durch die zweite Rechen-Engine.
DE112020003127.6T 2019-06-28 2020-06-26 Erweiterung von dynamischem Verarbeitungselement-Array Pending DE112020003127T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/456,414 2019-06-28
US16/456,414 US11568238B2 (en) 2019-06-28 2019-06-28 Dynamic processing element array expansion
PCT/US2020/039804 WO2020264282A1 (en) 2019-06-28 2020-06-26 Dynamic processing element array expansion

Publications (1)

Publication Number Publication Date
DE112020003127T5 true DE112020003127T5 (de) 2022-05-05

Family

ID=71728894

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020003127.6T Pending DE112020003127T5 (de) 2019-06-28 2020-06-26 Erweiterung von dynamischem Verarbeitungselement-Array

Country Status (4)

Country Link
US (2) US11568238B2 (de)
CN (1) CN114051615A (de)
DE (1) DE112020003127T5 (de)
WO (1) WO2020264282A1 (de)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11704573B2 (en) * 2019-03-25 2023-07-18 Here Global B.V. Method, apparatus, and computer program product for identifying and compensating content contributors
US11568238B2 (en) 2019-06-28 2023-01-31 Amazon Technologies, Inc. Dynamic processing element array expansion
US11157705B2 (en) * 2019-07-22 2021-10-26 International Business Machines Corporation Semantic parsing using encoded structured representation
US20210089904A1 (en) * 2019-09-20 2021-03-25 Electronics And Telecommunications Research Institute Learning method of neural network model for language generation and apparatus for performing the learning method
US11768911B2 (en) * 2019-09-24 2023-09-26 Alibaba Group Holding Limited Method and apparatus for execution of neural network
US11936864B2 (en) * 2019-11-07 2024-03-19 Bitmovin, Inc. Fast multi-rate encoding for adaptive streaming using machine learning
US11651194B2 (en) * 2019-11-27 2023-05-16 Nvidia Corp. Layout parasitics and device parameter prediction using graph neural networks
US11610102B1 (en) * 2019-11-27 2023-03-21 Amazon Technologies, Inc. Time-based memory allocation for neural network inference
KR20210071471A (ko) * 2019-12-06 2021-06-16 삼성전자주식회사 뉴럴 네트워크의 행렬 곱셈 연산을 수행하는 장치 및 방법
US11748356B2 (en) * 2019-12-06 2023-09-05 Nec Corporation Answering complex queries in knowledge graphs with bidirectional sequence encoders
US11651456B1 (en) * 2019-12-17 2023-05-16 Ambarella International Lp Rental property monitoring solution using computer vision and audio analytics to detect parties and pets while preserving renter privacy
US11520853B2 (en) * 2020-02-28 2022-12-06 Meta Platforms, Inc. Mapping convolution to a partition channel convolution engine
US11227151B2 (en) * 2020-03-05 2022-01-18 King Fahd University Of Petroleum And Minerals Methods and systems for computerized recognition of hand gestures
US11580192B2 (en) * 2020-04-08 2023-02-14 Meta Platforms, Inc. Grouped convolution using point-to-point connected channel convolution engines
US11475303B2 (en) * 2020-04-14 2022-10-18 Microsoft Technology Licensing, Llc Spread neural networks
CN111737995B (zh) * 2020-05-29 2024-04-05 北京百度网讯科技有限公司 基于多种词向量训练语言模型的方法、装置、设备及介质
US20210383199A1 (en) * 2020-06-03 2021-12-09 Google Llc Object-Centric Learning with Slot Attention
KR20210156554A (ko) * 2020-06-18 2021-12-27 삼성전자주식회사 텐서 처리 방법, 가속기 및 이를 포함한 전자 장치
US20220067533A1 (en) * 2020-08-27 2022-03-03 Microsoft Technology Licensing, Llc Transformer-Based Neural Network including a Mask Attention Network
CN116868202A (zh) * 2021-02-23 2023-10-10 华为技术有限公司 一种数据处理方法、装置、设备及介质
US11960842B2 (en) 2021-02-27 2024-04-16 Walmart Apollo, Llc Methods and apparatus for natural language understanding in conversational systems using machine learning processes
US11693692B2 (en) 2021-06-17 2023-07-04 International Business Machines Corporation Program event recording storage alteration processing for a neural network accelerator instruction
US11797270B2 (en) 2021-06-17 2023-10-24 International Business Machines Corporation Single function to perform multiple operations with distinct operation parameter validation
US11675592B2 (en) 2021-06-17 2023-06-13 International Business Machines Corporation Instruction to query for model-dependent information
US11669331B2 (en) 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
US11269632B1 (en) 2021-06-17 2022-03-08 International Business Machines Corporation Data conversion to/from selected data type with implied rounding mode
US11734013B2 (en) 2021-06-17 2023-08-22 International Business Machines Corporation Exception summary for invalid values detected during instruction execution
US11494627B1 (en) 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
US11442775B1 (en) * 2021-12-03 2022-09-13 FriendliAI Inc. Dynamic batching for inference system for transformer-based generation tasks
US11514370B1 (en) 2021-12-03 2022-11-29 FriendliAI Inc. Selective batching for inference system for transformer-based generation tasks
CN114113495B (zh) * 2021-12-27 2022-12-30 中国科学技术大学 一种高精度低功耗全集成的便携式电子鼻
CN115311536B (zh) * 2022-10-11 2023-01-24 绍兴埃瓦科技有限公司 图像处理中稀疏卷积处理方法及装置
CN117407793B (zh) * 2023-11-03 2024-05-28 上海无问芯穹智能科技有限公司 一种用于大语言模型的并行化策略优化方法、系统、设备及介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8924455B1 (en) 2011-02-25 2014-12-30 Xilinx, Inc. Multiplication of matrices using systolic arrays
US10650508B2 (en) * 2014-12-03 2020-05-12 Kla-Tencor Corporation Automatic defect classification without sampling and feature selection
US10438117B1 (en) * 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
EP3523751A4 (de) 2016-10-04 2020-05-06 Magic Leap, Inc. Effiziente datenlayouts für neurale faltungsnetzwerke
US20190164037A1 (en) 2017-11-29 2019-05-30 Electronics And Telecommunications Research Institute Apparatus for processing convolutional neural network using systolic array and method thereof
US20200082258A1 (en) * 2018-09-10 2020-03-12 Carl Steven Gold Organic learning
US11568238B2 (en) 2019-06-28 2023-01-31 Amazon Technologies, Inc. Dynamic processing element array expansion

Also Published As

Publication number Publication date
US20230153620A1 (en) 2023-05-18
CN114051615A (zh) 2022-02-15
US20200410337A1 (en) 2020-12-31
US11568238B2 (en) 2023-01-31
WO2020264282A1 (en) 2020-12-30
US11868895B2 (en) 2024-01-09

Similar Documents

Publication Publication Date Title
DE112020003127T5 (de) Erweiterung von dynamischem Verarbeitungselement-Array
WO2020216227A9 (zh) 图像分类方法、数据处理方法和装置
KR102545128B1 (ko) 뉴럴 네트워크를 수반한 클라이언트 장치 및 그것을 포함하는 시스템
WO2021057056A1 (zh) 神经网络架构搜索方法、图像处理方法、装置和存储介质
WO2021018163A1 (zh) 神经网络的搜索方法及装置
NL2015087B1 (en) Deep receptive field networks.
Ebrahimi et al. Study of residual networks for image recognition
Lopes et al. Towards adaptive learning with improved convergence of deep belief networks on graphics processing units
WO2022001805A1 (zh) 一种神经网络蒸馏方法及装置
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
WO2021218517A1 (zh) 获取神经网络模型的方法、图像处理方法及装置
WO2021008206A1 (zh) 神经网络结构的搜索方法、图像处理方法和装置
DE112020005799T5 (de) Effiziente Ausnutzung eines Verarbeitungselementarrays
DE112020000584T5 (de) Verfahren für unüberwachte bild-zu-bild-übersetzung mit wenigen aufnahmen
US11983903B2 (en) Processing images using self-attention based neural networks
DE112020003066T5 (de) Transponierungsoperationen mit verarbeitungselementarray
DE112020002693T5 (de) Verringerung der berechnung in neuralen netzwerken mit selbstmodifizierendem code
DE102021107509A1 (de) Multi-modell-trainingspipeline in verteilten systemen
Liang et al. Dualformer: Local-global stratified transformer for efficient video recognition
DE112020005789T5 (de) Hierarchische partitionierung von operatoren
Bezak Building recognition system based on deep learning
DE112020003105T5 (de) Schicht für schicht-debugging von neuronalen netzwerken
DE112020003055T5 (de) Neuanordnen der operationen eines neuronalen netzwerks für parallele ausführung
US20200167655A1 (en) Method and apparatus for re-configuring neural network
DE102022105808A1 (de) Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen

Legal Events

Date Code Title Description
R012 Request for examination validly filed