-
HINTERGRUND
-
Ausführungsformen der vorliegenden Offenbarung betreffen Systeme für neuronale Inferenz und insbesondere speicherorientierte Beschleuniger für neuronale Netze für bereitstellbare Inferenzsysteme.
-
KURZDARSTELLUNG
-
Gemäß Ausführungsformen der vorliegenden Offenbarung weisen Verfahren und Computerprogrammprodukte eines Systems auf: ein Prozessorsystem für neuronale Netze, aufweisend mindestens einen Verarbeitungskern für neuronale Netze, einen Aktivierungsspeicher, einen Anweisungsspeicher und mindestens ein Steuerregister, wobei der Verarbeitungskern für neuronale Netze zur Implementierung von Berechnungs-, Steuerungs- und Datenübertragungs-Basiselementen für neuronale Netze geeignet ist; eine Speicherabbildung, die Bereiche aufweist, die jeweils dem Aktivierungsspeicher, dem Anweisungsspeicher und mindestens einem Steuerregister entsprechen, und eine Schnittstelle, die operativ mit dem Prozessorsystem für neuronale Netze verbunden ist, wobei die Schnittstelle geeignet ist, mit einem Host Daten auszutauschen und die Speicherabbildung zugänglich zu machen.
-
Gemäß Ausführungsformen der vorliegenden Offenbarung ist der Prozessor für neuronale Netze dazu konfiguriert, eine Beschreibung eines neuronalen Netzes über die Schnittstelle zu empfangen, Eingabedaten über die Schnittstelle zu empfangen und Ausgabedaten über die Schnittstelle auszugeben. In einigen Ausführungsformen macht das Prozessorsystem für neuronale Netze eine API über die Schnittstelle zugänglich, wobei die API Verfahren zum Empfangen der Beschreibung eines neuronalen Netzes über die Schnittstelle, zum Empfangen von Eingabedaten über die Schnittstelle und zum Ausgeben von Ausgabedaten über die Schnittstelle aufweist. In einigen Ausführungsformen weist die Schnittstelle eine AXI-, PCIe-, USB-, Ethernet- oder Firewire-Schnittstelle auf.
-
In einigen Ausführungsformen weist das System ferner einen redundanten Verarbeitungskern für neuronale Netze auf, wobei der redundante Verarbeitungskern für neuronale Netze dazu konfiguriert ist, ein neuronales Netzmodell parallel zu dem Verarbeitungskern für neuronale Netze zu berechnen. In einigen Ausführungsformen ist das Prozessorsystem für neuronale Netze dazu konfiguriert, eine redundante Berechnung eines neuronalen Netzmodells bereitzustellen, und/oder ist dazu konfiguriert, für Redundanz auf Hardware-, Software- und/oder Modellebene zu sorgen. In einigen Ausführungsformen weist das Prozessorsystem für neuronale Netze programmierbare Firmware auf, wobei die programmierbare Firmware dazu konfigurierbar ist, die Eingabedaten und Ausgabedaten zu verarbeiten. In einigen Ausführungsformen weist die Verarbeitung Puffern auf. In einigen Ausführungsformen weist das Prozessorsystem für neuronale Netze nichtflüchtigen Speicher auf. In einigen Ausführungsformen ist das Prozessorsystem für neuronale Netze dazu konfiguriert, Konfigurations- oder Betriebsparameter oder einen Programmzustand zu speichern. In einigen Ausführungsformen ist die Schnittstelle für einen Betrieb in Echtzeit oder schneller als Echtzeit konfiguriert. In einigen Ausführungsformen ist die Schnittstelle zum Datenaustausch mit mindestens einem Sensor oder einer Kamera verbunden. In einigen Ausführungsformen weist das System eine Mehrzahl der oben beschriebenen Systeme auf, die über ein Netzwerk miteinander verbunden sind. In einigen Ausführungsformen ist ein System vorgesehen, das eine Mehrzahl der oben beschriebenen Systeme und eine Mehrzahl von Datenverarbeitungsknoten umfasst, die durch ein Netzwerk miteinander verbunden sind. In einigen Ausführungsformen weist das System ferner eine Mehrzahl getrennter Speicherabbildungen auf, die jeweils zu einem der oben genannten Mehrzahl von Systemen gehören.
-
Gemäß einem weiteren Aspekt der Offenbarung ist ein Verfahren vorgesehen, aufweisend: Empfangen einer Beschreibung eines neuronalen Netzes an einem Prozessorsystem für neuronale Netze über eine Schnittstelle von einem Host, wobei das Prozessorsystem für neuronale Netze mindestens einen Verarbeitungskern für neuronale Netze, einen Aktivierungsspeicher, einen Anweisungsspeicher und mindestens ein Steuerregister aufweist, wobei der Verarbeitungskern für neuronale Netze geeignet ist, Berechnungs-, Steuerungs- und Datenübertragungs-Basiselemente eines neuronalen Netzes zu implementieren, wobei die Schnittstelle operativ mit dem Prozessorsystem für neuronale Netze verbunden ist; Zugänglichmachen einer Speicherabbildung über die Schnittstelle, wobei die Speicherabbildung Bereiche aufweist, die jeweils dem Aktivierungsspeicher, dem Anweisungsspeicher und mindestens einem Steuerregister entsprechen; Empfangen von Eingabedaten an dem Prozessorsystem für neuronale Netze über die Schnittstelle; Berechnen von Ausgabedaten aus den Eingabedaten auf Grundlage des neuronalen Netzmodells; und Ausgeben der Ausgabedaten von dem Prozessorsystem für neuronale Netze über die Schnittstelle. In einigen Ausführungsformen empfängt das Prozessorsystem für neuronale Netze eine Beschreibung eines neuronalen Netzes über die Schnittstelle, empfängt Eingabedaten über die Schnittstelle und gibt Ausgabedaten über die Schnittstelle aus. In einigen Ausführungsformen macht das Prozessorsystem für neuronale Netze eine API über die Schnittstelle zugänglich, wobei die API Verfahren zum Empfangen der Beschreibung eines neuronalen Netzes über die Schnittstelle, zum Empfangen von Eingabedaten über die Schnittstelle und zum Ausgeben von Ausgabedaten über die Schnittstelle aufweist. In einigen Ausführungsformen arbeitet die Schnittstelle in Echtzeit oder schneller als Echtzeit.
-
Figurenliste
-
- 1 zeigt ein beispielhaftes speicherorientiertes(MM-) System gemäß Ausführungsformen der vorliegenden Offenbarung.
- 2 zeigt ein beispielhaftes Nachrichtenaustausch(MP)-System gemäß Ausführungsformen der vorliegenden Offenbarung.
- 3 zeigt einen neuronalen Kern gemäß Ausführungsformen der vorliegenden Offenbarung.
- 4 zeigt eine beispielhafte Inferenzverarbeitungseinheit (IPU) gemäß Ausführungsformen der vorliegenden Offenbarung.
- 5 zeigt eine Mehrkern-Inferenzverarbeitungseinheit (IPU) gemäß Ausführungsformen der vorliegenden Offenbarung.
- 6 zeigt einen neuronalen Kern und zugehörige Netzwerke gemäß Ausführungsformen der vorliegenden Offenbarung.
- 7 zeigt ein Integrationsverfahren zwischen einem Hostsystem und einer IPU gemäß Ausführungsformen der vorliegenden Offenbarung.
- Die 8A bis C zeigen beispielhafte Redundanzverfahren gemäß Ausführungsformen der vorliegenden Offenbarung.
- 9 zeigt eine Systemarchitektur einer speicherorientierten neuronalen Inferenz-Engine gemäß Ausführungsformen der vorliegenden Offenbarung.
- 10 zeigt einen beispielhaften Laufzeitsoftwarestapel gemäß Ausführungsformen der vorliegenden Offenbarung.
- 11 zeigt eine beispielhafte Ausführungsabfolge gemäß Ausführungsformen der vorliegenden Offenbarung.
- 12 zeigt eine beispielhafte Integration einer neuronalen Inferenzeinheit gemäß Ausführungsformen der vorliegenden Offenbarung.
- 13 zeigt eine beispielhafte Integration einer neuronalen Inferenzeinheit gemäß Ausführungsformen der vorliegenden Offenbarung.
- 14 zeigt eine beispielhafte Konfiguration, in der eine neuronale Inferenzeinheit gemäß Ausführungsformen der vorliegenden Offenbarung mit einem Host über eine PCIe-Brücke verbunden ist.
- 15 zeigt ein Flussdiagramm eines Verfahrens zum Zugänglichmachen einer Speicherabbildung in einem Prozessorsystem für neuronale Netze gemäß Ausführungsformen der vorliegenden Offenbarung.
- 16 zeigt einen Datenverarbeitungsknoten gemäß Ausführungsformen der vorliegenden Offenbarung.
-
DETAILLIERTE BESCHREIBUNG
-
Verschiedene herkömmliche Datenverarbeitungssysteme tauschen Daten zwischen Systemkomponenten über ein Shared-Memory-/speicherorientiertes(MM-) Paradigma aus. Im Gegensatz dazu tauschen verschiedene parallele, verteilte Datenverarbeitungssysteme wie z.B. neurosynaptische Systeme Daten über ein Nachrichtenaustausch(MP)-Paradigma aus. Die vorliegende Offenbarung sorgt für effiziente Schnittstellen zwischen diesen beiden Systemarten.
-
Ein künstliches Neuron ist eine mathematische Funktion, deren Ausgabe eine nichtlineare Funktion einer linearen Kombination ihrer Eingaben ist. Zwei Neuronen sind verbunden, wenn der Ausgang des einen ein Eingang des anderen ist. Ein Gewicht ist ein Skalarwert, der die Stärke der Verbindung zwischen dem Ausgang eines Neurons und dem Eingang eines anderen Neurons codiert.
-
Ein Neuron berechnet seine als Aktivierung bezeichnete Ausgabe, indem es eine nichtlineare Aktivierungsfunktion auf eine gewichtete Summe seiner Eingaben anwendet. Eine gewichtete Summe ist ein Zwischenergebnis, das berechnet wird, indem jede Eingabe mit der entsprechenden Gewichtung multipliziert und die Produkte aufsummiert werden. Eine Teilsumme ist eine gewichtete Summe einer Teilmenge der Eingaben. Eine gewichtete Summe aller Eingaben kann schrittweise berechnet werden, indem eine oder mehrere Teilsummen aufsummiert werden.
-
Ein neuronales Netz ist ein Satz eines oder mehrerer Neuronen. Ein neuronales Netz wird oft in Gruppen von Neuronen unterteilt, die Schichten genannt werden. Eine Schicht ist ein Satz eines oder mehrerer Neuronen, die alle Eingaben von denselben Schichten empfangen und alle Ausgaben an dieselben Schichten senden und üblicherweise eine ähnliche Aufgabe erfüllen. Eine Eingabeschicht ist eine Schicht, die Eingaben von einer Quelle außerhalb des neuronalen Netzes empfängt. Eine Ausgabeschicht ist eine Schicht, die eine Ausgabe an ein Ziel außerhalb des neuronalen Netzes sendet. Alle anderen Schichten sind Verarbeitungszwischenschichten. Ein mehrschichtiges neuronales Netz ist ein neuronales Netz mit mehr als einer Schicht. Ein tiefes neuronales Netz ist ein mehrschichtiges neuronales Netz mit vielen Schichten.
-
Ein Tensor ist eine mehrdimensionale Anordnung numerischer Werte. Ein Tensorblock ist eine zusammenhängende Teilanordnung der Elemente in einem Tensor.
-
Zu jeder neuronalen Netzschicht gehört ein Parametertensor V, ein Gewichtstensor W, ein Eingabedatentensor X, ein Ausgabedatentensor Y, und ein Zwischendatentensor Z. Der Parametertensor enthält alle Parameter, die die Neuronenaktivierungsfunktionen σ in der Schicht steuern. Der Gewichtstensor enthält alle Gewichte, die Eingaben mit der Schicht verbinden. Der Eingabedatentensor enthält alle Daten, die die Schicht als Eingabe verwendet. Der Ausgabedatentensor enthält alle Daten, die die Schicht als Ausgabe berechnet. Der Zwischendatentensor enthält alle Daten, die die Schicht als Zwischenrechnungen erzeugt, wie z.B. Teilsummen.
-
Die Datentensoren (Eingabe-, Ausgabe- und Zwischendaten-) für eine Schicht können dreidimensional sein, wobei die ersten beiden Dimensionen als Codierung der räumlichen Position und die dritte Dimension als Codierung verschiedener Merkmale interpretiert werden kann. Wenn beispielsweise ein Datentensor ein Farbbild darstellt, codieren die ersten beiden Dimensionen vertikale und horizontale Koordinaten in dem Bild, und die dritte Dimension codiert die Farbe an jeder Position. Jedes Element des Eingabedatentensors X kann mit jedem Neuron durch ein getrenntes Gewicht verbunden sein, so dass der Gewichtstensor W im Allgemeinen 6 Dimensionen hat, die die 3 Dimensionen des Eingabedatentensors (Eingabezeile a, Eingabespalte b, Eingabemerkmal c) mit den 3 Dimensionen des Ausgabedatentensors (Ausgabezeile i, Ausgabespalte j, Ausgabemerkmal k) verknüpft. Der Zwischendatentensor Z hat die gleiche Form wie der Ausgabedatentensor Y. Der Parametertensor V verknüpft die 3 Dimensionen des Ausgabedatentensors mit einer zusätzlichen Dimension o, die die Parameter der Aktivierungsfunktion σ indiziert. In einigen Ausführungsformen erfordert die Aktivierungsfunktion σ keine zusätzlichen Parameter, in welchem Fall die zusätzliche Dimension unnötig ist. In einigen Ausführungsformen erfordert die Aktivierungsfunktion σ jedoch mindestens einen zusätzlichen Parameter, der in der Dimension o liegt.
-
Ein Element des Ausgabedatentensors Y einer Schicht kann wie in Gleichung 1 berechnet werden, in der die Neuronenaktivierungsfunktion σ durch den Vektor der Aktivierungsfunktionsparameter V[i,j, k,: ] konfiguriert ist, und die gewichtete Summe Z[i, j, k] kann wie in Gleichung 2 dargestellt berechnet werden.
-
Der Einfachheit halber kann die gewichtete Summe in Gleichung 2 als Ausgabe bezeichnet werden, was der Verwendung einer linearen Aktivierungsfunktion Y[i,j, k] = σ(Z[i, j, k]) = Z[i, j, k] entspricht, unter der Maßgabe, dass dieselben Aussagen ohne Einschränkung der Allgemeinheit gelten, wenn eine andere Aktivierungsfunktion verwendet wird.
-
In verschiedenen Ausführungsformen wird die oben beschriebene Berechnung des Ausgabedatentensors in kleinere Aufgaben zerlegt. Jede Aufgabe kann dann auf einem oder mehreren neuronalen Kernen oder auf einem oder mehreren Kernen eines herkömmlichen Mehrkernsystems parallel gelöst werden.
-
Aus dem Obigen geht hervor, dass neuronale Netze aus parallelen Strukturen bestehen. Neuronen in einer bestimmten Schicht empfangen Eingaben X mit Elementen xi aus einer oder mehreren Schichten oder andere Eingaben. Jedes Neuron berechnet seinen Zustand y ∈ Y auf Grundlage der Eingaben und von Gewichten W mit Elementen wi. In verschiedenen Ausführungsformen wird die gewichtete Summe von Eingaben durch einen Bias b angepasst, und dann wird das Ergebnis an eine Nichtlinearität F(·) übergeben. Beispielsweise kann eine einzelne Neuronenaktivierung ausgedrückt werden als y = F(b + Σ xiwi).
-
Da alle Neuronen in einer bestimmten Schicht Eingaben von denselben Schichten empfangen und ihre Ausgaben unabhängig voneinander berechnen, können Neuronenaktivierungen parallel berechnet werden. Aufgrund dieses Aspekts des gesamten neuronalen Netzes beschleunigt das Ausführen von Berechnungen in parallelen verteilten Kernen die Gesamtberechnung. Ferner können innerhalb jedes Kerns Vektoroperationen parallel berechnet werden. Auch bei wiederkehrenden Eingaben, beispielsweise wenn eine Schicht auf sich selbst zurückverweist, werden alle Neuronen gleichzeitig aktualisiert. Tatsächlich werden die rekurrenten Verbindungen so verzögert, dass sie mit einer nachfolgenden Eingabe der Schicht ausgerichtet sind.
-
In Bezug auf 1 ist ein beispielhaftes speicherorientiertes System 100 gezeigt. Eine Speicherabbildung 101 ist segmentiert und Bereiche 102...105 sind verschiedenen Systemkomponenten zugeordnet. Rechenkerne 106...109, z.B. Prozessorkerne auf einem oder mehreren Chips, sind mit einem Bus 110 verbunden. Jeder Kern 106...109 ist mit dem Bus 110 verbunden und kann über gemeinsam genutzten Speicher 111...112 Daten austauschen, der den adressierbaren Bereichen der Speicherabbildung 102...103 entspricht. Jeder Kern 106...109 kann mit einem Teilsystem 113 über einen adressierbaren Bereich 104 der Speicherabbildung 101 Daten austauschen. Ebenso kann jeder Kern 106...109 mit einem externen System 114 über einen adressierbaren Bereich 105 der Speicherabbildung 101 Daten austauschen.
-
Speicherabbildungs(MM)-Adressen beziehen sich in diesem Beispiel auf die globale Speicherabbildung, die in diesem Beispiel von 0x00000000 bis 0xFFFFFFFF reicht.
-
Mit Bezug auf 2 ist ein beispielhaftes Nachrichtenaustausch(MP)-System 200 gezeigt. Eine Mehrzahl von Kernen 201...209 weisen jeweils einen Rechenkern 210, Speicher 211 und eine Datenübertragungsschnittstelle 212 auf. Jeder der Kerne 201...209 ist über ein Netzwerk 213 verbunden. Die Datenübertragungsschnittstelle 212 weist einen Eingangspuffer 214 und einen Ausgangspuffer 215 zum Einspeisen und Empfangen von Paketen in das/aus dem Netzwerk 213 auf. Auf diese Weise können die Kerne 201...209 miteinander Daten austauschen, indem sie Nachrichten weitergeben.
-
Ebenso kann ein Teilsystem 216 mit dem Netzwerk 213 über eine Datenübertragungsschnittstelle 217 mit einem Eingangspuffer 218 und einem Ausgangspuffer 219 verbunden sein. Externe Systeme können mit dem Netzwerk 213 über eine Schnittstelle 220 verbunden sein. Auf diese Weise können die Kerne 201...209 mit Teilsystemen und externen Systemen Daten austauschen, indem sie Nachrichten weitergeben.
-
Nachrichtenaustausch(MP)-Adressen beziehen sich auf im Kern angesiedelte Netzwerkadressen. Beispielsweise kann ein einzelner Kern durch seine X-Y-Position auf einem Chip gefunden werden, während die lokalen Adressen für lokalen Puffer oder Speicher eines einzelnen Kerns verwendet werden können.
-
Bezieht man sich nun auf 3, ist ein neuronaler Kern gemäß Ausführungsformen der vorliegenden Offenbarung gezeigt. Ein neuronaler Kern 300 ist eine kachelbare Recheneinheit, die einen Block eines Ausgabetensors berechnet. Ein neuronaler Kern 300 hat M Eingaben und N Ausgaben. In verschiedenen Ausführungsformen ist M = N. Um einen Ausgabetensorblock zu berechnen, multipliziert ein neuronaler Kern einen M × 1-Eingabetensorblock 301 mit einem M × N-Gewichtstensorblock 302 und summiert die Produkte zu gewichteten Summen auf, die in einem 1× N-Zwischentensorblock 303 gespeichert werden. Ein O × N-Parametertensorblock enthält die O Parameter, die jede der N Neuronenaktivierungsfunktionen bestimmen, die auf den Zwischentensorblock 303 angewendet werden, um einen 1× N-Ausgabetensorblock 305 zu erzeugen.
-
Mehrere neuronale Kerne können in einem neuronalen Kernarray gekachelt werden. In einigen Ausführungsformen ist das Array zweidimensional.
-
Ein neuronales Netzmodell ist ein Satz von Konstanten, die gemeinsam die gesamte von einem neuronalen Netz ausgeführte Berechnung bestimmen, beispielsweise den Graphen der Verbindungen zwischen Neuronen sowie die Gewichte und Aktivierungsfunktionsparameter für jedes Neuron. Training ist der Prozess des Änderns des neuronalen Netzmodells, um eine gewünschte Aufgabe zu erfüllen. Inferenz ist der Prozess der Anwendung eines neuronalen Netzes auf eine Eingabe, um eine Ausgabe zu erzeugen, ohne das Modell des neuronalen Netzes zu ändern.
-
Eine Inferenzverarbeitungseinheit ist eine Kategorie von Prozessoren, die eine Inferenz eines neuronalen Netzes ausführen. Ein neuronaler Inferenzchip ist eine bestimmte physische Instanz einer Inferenzverarbeitungseinheit.
-
In Bezug auf 4 ist eine beispielhafte Inferenzverarbeitungseinheit (IPU) gemäß Ausführungsformen der vorliegenden Offenbarung gezeigt. Die IPU 400 enthält Speicher 401 für das neuronale Netzmodell. Wie oben beschrieben, kann das neuronale Netzmodell die Synapsengewichte für ein zu berechnendes neuronales Netz enthalten. Die IPU 400 enthält einen Aktivierungsspeicher 402, der transient sein kann. Der Aktivierungsspeicher 402 kann in Eingabe- und Ausgabebereiche unterteilt sein und speichert Neuronenaktivierungen zur Verarbeitung. Die IPU 400 enthält eine neuronale Recheneinheit 403, in die ein neuronales Netzmodell aus dem Modellspeicher 401 geladen wird. Eingangsaktivierungen werden vor jedem Berechnungsschritt aus dem Aktivierungsspeicher 402 ausgegeben. Ausgaben der neuronalen Recheneinheit 403 werden in den Aktivierungsspeicher 402 zur Verarbeitung auf derselben oder einer anderen neuronalen Recheneinheit zurück geschrieben.
-
In verschiedenen Ausführungsformen ist eine Mikro-Engine 404 in der IPU 400 vorgesehen. In solchen Ausführungsformen werden alle Operationen in der IPU von der Mikro-Engine gesteuert. Wie unten dargelegt, können in verschiedenen Ausführungsformen zentrale und/oder verteilte Mikro-Engines eingesetzt werden. Eine globale Mikro-Engine kann als Chip-Mikro-Engine bezeichnet werden, während eine lokale Mikro-Engine als Kern-Mikro-Engine oder lokaler Controller bezeichnet werden kann. In verschiedenen Ausführungsformen weist eine Mikro-Engine eine oder mehrere Mikro-Engines, Mikrocontroller, Zustandsmaschinen, CPUs oder andere Controller auf.
-
In Bezug auf 5 ist eine Mehrkern-Inferenzverarbeitungseinheit (IPU) gemäß Ausführungsformen der vorliegenden Offenbarung gezeigt. Die IPU 500 enthält Speicher 501 für das neuronale Netzmodell und Anweisungen. In einigen Ausführungsformen ist der Speicher 501 in einen Gewichtsabschnitt 511 und einen Anweisungsabschnitt 512 unterteilt. Wie oben beschrieben, kann das neuronale Netzmodell die Synapsengewichte für ein zu berechnendes neuronales Netz enthalten. Die IPU 500 enthält einen
Aktivierungsspeicher 502, der transient sein kann. Der Aktivierungsspeicher 502 kann in Eingabe- und Ausgabebereiche unterteilt sein und speichert Neuronenaktivierungen zur Verarbeitung.
-
Die IPU 500 enthält ein Array 506 von neuronalen Kernen 503. Jeder Kern 503 enthält eine Recheneinheit 533, in die ein neuronales Netzmodell aus dem Modellspeicher 501 geladen wird, und ist betreibbar, um eine Vektorberechnung auszuführen. Jeder Kern enthält auch einen lokalen Aktivierungsspeicher 532. Eingangsaktivierungen werden vor jedem Berechnungsschritt vom lokalen Aktivierungsspeicher 532 ausgegeben. Ausgaben der Recheneinheit 533 werden in den Aktivierungsspeicher 532 zur Verarbeitung auf derselben oder einer anderen Recheneinheit zurück geschrieben.
-
Die IPU 500 enthält ein oder mehrere Network-on-Chips (NoCs) 505. In einigen Ausführungsformen verbindet ein Teilsummen-NoC 551 die Kerne 503 und überträgt Teilsummen zwischen ihnen. In einigen Ausführungsformen verbindet ein getrennter Parameterverteilungs-NoC 552 die Kerne 503 mit dem Speicher 501 zum Verteilen der Gewichte und Anweisungen auf die Kerne 503. Es versteht sich, dass verschiedene Konfigurationen der NoCs 551 und 552 zur Verwendung gemäß der vorliegenden Offenbarung geeignet sind. Beispielsweise können Broadcast-Netzwerke, Reihen-Broadcast-Netzwerke, Baumnetzwerke und Schaltnetzwerke verwendet werden.
-
In verschiedenen Ausführungsformen ist eine globale Mikro-Engine 504 in der IPU 500 vorgesehen. In verschiedenen Ausführungsformen ist ein lokaler Kern-Controller 534 auf jedem Kern 503 vorgesehen. In solchen Ausführungsformen wird die Steuerung der Operationen zwischen der globalen Mikro-Engine (der Chip-Mikro-Engine) und dem lokalen Kern-Controller (der Kern-Mikro-Engine) aufgeteilt. Insbesondere werden von der globalen Mikro-Engine 504 Rechenanweisungen bei 511 aus dem Modellspeicher 501 in die neuronale Recheneinheit 533 auf jedem Kern 503 geladen. Bei 512 werden von der globalen Mikro-Engine 504 Parameter (z.B. neuronale Netz-/ synaptische Gewichte) aus dem Modellspeicher 501 in die neuronale Recheneinheit 533 auf jedem Kern 503 geladen. Bei 513 werden Aktivierungsdaten des neuronalen Netzes von dem lokalen Kern-Controller 534 aus dem lokalen Aktivierungsspeicher 532 in die neuronale Recheneinheit 533 auf jedem Kern 503 geladen. Wie oben erwähnt, werden die Aktivierungen an die Neuronen des jeweiligen neuronalen Netzes ausgegeben, das durch das Modell definiert ist, und können von derselben oder einer anderen neuronalen Recheneinheit oder von außerhalb des Systems stammen. Bei 514 führt die neuronale Recheneinheit 533 die Berechnung aus, so dass Neuronen-Ausgabeaktivierungen erzeugt werden, gesteuert vom lokalen Kern-Controller 534. Insbesondere weist die Berechnung ein Anwenden der synaptischen Eingangsgewichte auf die eingegebenen Aktivierungen auf. Es versteht sich, dass verschiedene Verfahren zum Ausführen solcher Berechnungen verfügbar sind, beispielsweise in silico Dendriten sowie Vektormultiplikationseinheiten. Bei 515 werden die Ergebnisse der Berechnung im lokalen Aktivierungsspeicher 532 gespeichert, gesteuert vom lokalen Kern-Controller 534. Wie oben beschrieben, können diese Stufen in einer Pipeline verarbeitet werden, um für eine wirtschaftliche Nutzung der neuronalen Recheneinheit auf jedem Kern zu sorgen. Es versteht sich auch, dass Eingaben und Ausgaben vom lokalen Aktivierungsspeicher 532 zum globalen Aktivierungsspeicher 502 entsprechend den Anforderungen eines gegebenen neuronalen Netzes übertragen werden können.
-
Dementsprechend sieht die vorliegende Offenbarung eine Laufzeitsteuerung von Operationen in einer Inferenzverarbeitungseinheit (IPU) vor. In einigen Ausführungsformen ist die Mikro-Engine zentralisiert (Einzel-Mikro-Engine). In einigen Ausführungsformen ist die IPU-Berechnung verteilt (wird von einem Array von Kernen ausgeführt). In einigen Ausführungsformen ist die Laufzeitsteuerung von Operationen hierarchisch - sowohl eine zentrale Mikro-Engine als auch verteilte Mikro-Engines sind daran beteiligt.
-
Die Mikro-Engine oder Mikro-Engines steuern die Ausführung aller Operationen in der IPU. Jede Mikro-Engine-Anweisung entspricht mehreren Teiloperationen (z.B. Adresserzeugung, Laden, Berechnen, Speichern usw.). Im verteilten Fall wird Kern-Mikrocode auf den Kern-Mikro-Engines (z.B. 534) ausgeführt. Der Kern-Mikrocode enthält eine oder mehrere Anweisungen zum Ausführen einer vollständigen einzelnen Tensoroperation. Zum Beispiel handelt es sich um eine Faltung zwischen einem Gewichtstensor und einem Datentensor. Im Kontext eines einzelnen Kerns enthält der Kern-Mikrocode Anweisungen zum Ausführen einer einzelnen Tensoroperation an der lokal gespeicherten Teilmenge des Datentensors (und Teilsummen). Der Chip-Mikrocode wird auf der Chip-Mikro-Engine (z.B. 504) ausgeführt. Der Mikrocode enthält Anweisungen zum Ausführen aller Tensoroperationen in einem neuronalen Netz.
-
Nimmt man nun auf 6 Bezug, sind ein beispielhafter neuronaler Kern und zugehörige Netzwerke gemäß Ausführungsformen der vorliegenden Offenbarung gezeigt. Ein Kern 601, der wie unter Bezugnahme auf 3 beschrieben ausgeführt sein kann, ist über Netzwerke 602...604 mit weiteren Kernen verbunden. In diesen Ausführungsformen sorgt das Netzwerk 602 für die Verteilung von Gewichten und/oder Anweisungen, das Netzwerk 603 sorgt für die Verteilung von Teilsummen und das Netzwerk 604 sorgt für die Verteilung von Aktivierungen. Es versteht sich jedoch, dass in den verschiedenen Ausführungsformen der vorliegenden Offenbarung diese Netzwerke zusammengeführt oder in mehrere zusätzliche Netzwerke weiter aufgeteilt werden können.
-
Eingangsaktivierungen (X) werden von außerhalb des Kerns über das Aktivierungsnetzwerk 604 zum Kern 601 zu einem Aktivierungsspeicher 605 verteilt. Schichtanweisungen werden von außerhalb des Kerns über das Gewichts/Anweisungsnetzwerk 602 zum Kern 601 zu einem Anweisungsspeicher 606 verteilt. Schichtgewichte (W) und/oder Parameter werden von außerhalb des Kerns über das Gewichts/Anweisungsnetzwerk 602 zum Kern 601 zu einem Gewichtsspeicher 607 und/oder einem Parameterspeicher 608 verteilt.
-
Die Gewichtsmatrix (W) wird von einer Vektor-Matrix-Multiplikations(VMM)-Einheit 609 aus dem Gewichtsspeicher 607 gelesen. Der Aktivierungsvektor (V) wird von der Vektor-Matrix-Multiplikations(VMM)-Einheit 609 aus dem Aktivierungsspeicher 605 gelesen. Die Vektor-Matrix-Multiplikations(VMM)-Einheit 609 berechnet dann die Vektor-Matrix-Multiplikation Z = XTW und gibt das Ergebnis an eine Vektor-Vektor-Einheit 610 aus. Die Vektor-Vektor-Einheit 610 liest zusätzliche Teilsummen aus einem Teilsummenspeicher 611 und empfängt zusätzliche Teilsummen über das Teilsummennetzwerk 603 von außerhalb des Kerns. Aus diesen Quellen-Teilsummen wird durch die Vektor-Vektor-Einheit 610 eine Vektor-Vektor-Operation berechnet. Beispielsweise können die verschiedenen Teilsummen wiederum aufsummiert werden. Die resultierenden Ziel-Teilsummen werden in den Teilsummenspeicher 611 geschrieben, über das Teilsummennetzwerk 603 aus dem Kern heraus gesendet und/oder zur weiteren Verarbeitung durch die Vektor-Vektor-Einheit 610 zurückgegeben.
-
Die Teilsummenergebnisse von der Vektor-Vektor-Einheit 610 werden, nachdem alle Berechnungen für die Eingaben einer gegebenen Schicht abgeschlossen sind, an eine Aktivierungseinheit 612 zur Berechnung von Ausgabeaktivierungen ausgegeben. Der Aktivierungsvektor (Y) wird in den Aktivierungsspeicher 605 geschrieben. Die Schichtaktivierungen (wie beispielsweise die in den Aktivierungsspeicher geschriebenen Ergebnisse) werden vom Aktivierungsspeicher 605 über das Aktivierungsnetzwerk 604 auf die Kerne umverteilt. Beim Empfang werden sie in den lokalen Aktivierungsspeicher jedes empfangenden Kerns geschrieben. Nach Abschluss der Verarbeitung für einen gegebenen Frame werden die Ausgabeaktivierungen aus dem Aktivierungsspeicher 605 gelesen und über das Netzwerk 604 aus dem Kern heraus gesendet.
-
Dementsprechend orchestriert im Betrieb eine Mikro-Engine zur Kernsteuerung (z.B. 613) die Datenbewegungen und Berechnungen des Kerns. Die Mikro-Engine gibt eine Operation zum Lesen einer Aktivierungsspeicheradresse aus, um einen Eingabeaktivierungsblock in die Vektor-Matrix-Multiplikationseinheit zu laden. Die Mikro-Engine gibt eine Operation zum Lesen einer Gewichtsspeicheradresse aus, um einen Gewichtsblock in die Vektor-Matrix-Multiplikationseinheit zu laden. Die Mikro-Engine gibt eine Berechnungsoperation an die Vektor-Matrix-Multiplikationseinheit aus, damit das Vektor-Matrix-Multiplikationseinheit-Rechenarray einen Teilsummenblock berechnet.
-
Die Mikro-Engine gibt eine Operation zum Lesen/Schreiben einer Teilsummen-Speicheradresse, eine Vektorberechnungsoperation und/oder eine Teilsummen-Datenübertragungsoperation aus, um ein Lesen von Teilsummendaten aus Teilsummenquellen; ein Berechnen unter Verwendung von Teilsummen-Arithmetikeinheiten; und/oder ein Schreiben von Teilsummendaten in Teilsummenziele auszuführen. Das Schreiben von Teilsummendaten in Teilsummenziele kann einen Datenaustausch nach außerhalb des Kerns über die Teilsummennetzwerkschnittstelle oder ein Senden von Teilsummendaten an die Aktivierungsarithmetikeinheit umfassen.
-
Die Mikro-Engine gibt eine Aktivierungsfunktions-Berechnungsoperation aus, damit die Aktivierungsfunktions-Arithmetikeinheit einen Ausgabeaktivierungsblock berechnet. Die Mikro-Engine gibt eine Speicheradresse zum Schreiben der Aktivierungen aus und der Ausgabeaktivierungsblock wird über die Aktivierungsspeicherschnittstelle in den Aktivierungsspeicher geschrieben.
-
Somit sind eine Vielzahl von Quellen, Zielen, Adressarten, Berechnungsarten und Steuerkomponenten für einen gegebenen Kern definiert.
-
Zu den Quellen für die Vektor-Vektor-Einheit 610 gehören die Vektor-Matrix-Multiplikations(VMM)-Einheit 609, der Aktivierungsspeicher 605, Konstanten aus dem Parameterspeicher 608, der Teilsummenspeicher 611, Teilsummenergebnisse aus vorherigen Zyklen (TGT-Teilsummen); und das Teilsummennetzwerk 603.
-
Zu den Zielen für die Vektor-Vektor-Einheit 610 gehören der Teilsummenspeicher 611, Teilsummenergebnisse für nachfolgende Zyklen (SRC-Teilsummen), die Aktivierungseinheit 612 und das Teilsummennetzwerk 603.
-
Dementsprechend kann eine gegebene Anweisung den Aktivierungsspeicher 605 lesen oder beschreiben, den Gewichtsspeicher 607 lesen oder den Teilsummenspeicher 611 lesen oder beschreiben. Berechnungsoperationen, die von dem Kern ausgeführt werden, umfassen eine Vektor-Matrix-Multiplikation durch die VMM-Einheit 609, Vektor(Teilsummen)-Operationen durch die Vektoreinheit 610, und Aktivierungsfunktionen durch die Aktivierungseinheit 612.
-
Steueroperationen umfassen Programmzähler und Schleifen- und/oder Sequenzzähler.
-
Somit werden Speicheroperationen ausgegeben, um Gewichte von Adressen im Gewichtsspeicher zu lesen, Parameter von Adressen im Parameterspeicher zu lesen, Aktivierungen von Adressen im Aktivierungsspeicher zu lesen und Teilsummen in Adressen im Teilsummenspeicher zu lesen/schreiben. Berechnungsoperationen werden ausgegeben, um Vektor-Matrix-Multiplikationen, Vektor-Vektor-Operationen und Aktivierungsfunktionen auszuführen. Datenaustauschoperationen werden ausgegeben, um die Vektor-Vektor-Operanden auszuwählen, Nachrichten über das Teilsummennetzwerk zu leiten und Teilsummenziele auszuwählen. Durch Steueroperationen werden Schleifen über Schichtausgaben und Schleifen über Schichteingaben gesteuert, die Programmzähler, Schleifenzähler und Sequenzzähler festlegen.
-
In verschiedenen Ausführungsformen wird eine speicherorientierte Architektur implementiert, die es einer IPU wie oben beschrieben ermöglicht, mit einem Host mittels Lesen und Schreiben eines Speichers Daten auszutauschen. Mit Bezug auf 7 ist ein beispielhaftes Integrationsverfahren zwischen einem Hostsystem und einer IPU gezeigt.
Bei 701 bereitet ein Host Daten zur Inferenz vor. Bei 702 benachrichtigt der Host die IPU, dass die Daten bereit sind. Bei 703 liest die IPU die Daten. Bei 704 führt die IPU eine Berechnung an den Daten durch. Bei 705 benachrichtigt die IPU den Host, dass die Berechnungsergebnisse bereit sind. Bei 706 liest der Host die Ergebnisse.
-
In Bezug auf die 8A bis C sind beispielhafte Redundanzverfahren gezeigt. Es versteht sich, dass neuromorphe Systeme wie die hierin beschriebenen Daten von mehreren Sensoren gleichzeitig verarbeiten können. Es können mehrere Netzwerke vorhanden sein und gleichzeitig betrieben werden. Wie hierin beschrieben, werden in verschiedenen Ausführungsformen Netzwerkergebnisse unter Verwendung einer Hochgeschwindigkeits-E/A-Schnittstelle übertragen.
-
In Bezug auf 8A ist direkte/Hardware-Redundanz gezeigt. In diesem Beispiel wird dasselbe Modell mehr als einmal ausgeführt und die Ausgaben werden verglichen. In Bezug auf 8B ist Modellredundanz gezeigt. In diesem Beispiel wird ein Ensemble unterschiedlicher Daten bearbeitet und/oder unterschiedliche Daten werden bearbeitet und ein statistisches Modell (z.B. gewichtete Mittelwertbildung zwischen Modellen) wird angewendet, um zu einer Gesamtausgabe zu gelangen. In Bezug auf 8C wird Lehrlings-Validierung gezeigt. In diesem Beispiel wird ein Lehrlingsmodell gegen ein Kontrollmodell (bzw. einen Lehrer) validiert.
-
Die Anforderungen an niedrigen Stromverbrauch der hierin beschriebenen Architekturen erlauben es, dass mehrere Chips in einem System redundante Netzwerke betreiben. Ebenso können redundante Netzwerke auf Partitionen eines Chips laufen. Darüber hinaus wird für eine schnelle und teilweise Rekonfigurierbarkeit gesorgt, bei der zwischen Betriebsmodi und Testmodus gewechselt wird, um Anomalien zu erkennen/finden/vermeiden.
-
Es versteht sich, dass Inferenzverarbeitungseinheiten, wie sie hierin beschrieben sind, in eine Vielzahl von Formfaktoren integriert werden können. Beispielsweise kann ein System-on-Chip (SoC) bereitgestellt werden. Ein SoC erlaubt Skalierung zur Anpassung an ein Flächenbudget. Dieser Ansatz ermöglicht eine On-Die-Integration mit entsprechend schneller Datenübertragungskapazität. Der SoC-Formfaktor kann auch einfacher und billiger zu verpacken sein als verschiedene Alternativen. In einem weiteren Beispiel kann ein System-in-Package (SiP) bereitgestellt werden. Ein SiP-Ansatz kombiniert die SoC-Komponenten mit IPU-Dies und unterstützt eine Integration verschiedener Prozesstechnologien. An bestehenden Komponenten sind nur minimale Implementierungsänderungen nötig.
-
In einem weiteren Beispiel wird eine PCIe (oder eine andere Erweiterungskarte) bereitgestellt. Bei diesem Ansatz kann für jede Komponente ein unabhängiger Entwicklungszyklus eingesetzt werden. Dies hat den Vorteil, dass eine standardisierte Hochgeschwindigkeitsschnittstelle übernommen und modulare Integration ermöglicht wird. Dies eignet sich besonders für frühe Prototypen und Rechenzentren. Zudem kann eine elektronische Steuereinheit (ECU) bereitgestellt werden. Dies entspricht Automotive-Standards, auch in Bezug auf Sicherheit und Redundanz. Ein ECU-Modul ist für den Einsatz im Fahrzeug geeignet, erfordert jedoch im Allgemeinen zusätzliche F&E-Zeit.
-
Nimmt man nun auf 9 Bezug, ist eine Systemarchitektur einer speicherorientierten neuronalen Inferenz-Engine gemäß Ausführungsformen der vorliegenden Offenbarung gezeigt. Eine neuronale Inferenz-Engine 901 (wie weiter oben beschrieben) ist mit einer Systemverbindung 902 verbunden. Ein Host 903 ist ebenfalls mit der Systemverbindung 902 verbunden.
-
In verschiedenen Ausführungsformen entspricht die Systemverbindung 902 einer Advanced Microcontroller Bus Architecture (AMBA), wie z.B. der Advanced eXtensible Interface (AXI). In verschiedenen Ausführungsformen besteht die Systemverbindung 902 aus einem PCle-Bus („Peripheral Component Interconnect Express“) oder einem anderen PCI-Bus. Es versteht sich, dass eine Vielzahl anderer in der Technik bekannter Busarchitekturen für die hierin beschriebene Verwendung geeignet sind. In jedem Fall verbindet die Systemverbindung 902 den Host 903 mit der neuronalen Inferenz-Engine 901 und bietet eine flache speicherorientierte Darstellung der neuronalen Inferenz-Engine im virtuellen Speicher des Hosts.
-
Der Host 903 umfasst eine Anwendung 904 und eine API/einen Treiber 905. In verschiedenen Ausführungsformen enthält die API drei Funktionen: configure(), die das eigenständige neuronale Netzprogramm über die Speicherabbildung in die neuronale Inferenz-Engine 901 kopiert; push(), die die Eingabedaten über die Speicherabbildung in die neuronale Inferenz-Engine 901 kopiert und mit der Auswertung beginnt; und pull(), die die Ausgabedaten über die Speicherabbildung aus der neuronalen Inferenz-Engine 901 abruft.
-
In einigen Ausführungsformen wird von der neuronalen Inferenz-Engine 901 ein Interrupt 906 bereitgestellt, der dem Host 903 signalisiert, dass die Netzwerkauswertung abgeschlossen ist.
-
In Bezug auf 10 ist ein beispielhafter Laufzeitsoftwarestapel gemäß verschiedenen Ausführungsformen gezeigt. In diesem Beispiel wird eine Bibliothek 1001 zum Datenaustausch mit der neuronalen Inferenz-Engine-Einheit 1002 bereitgestellt. Es werden API-Aufrufe zum Laden eines Netzwerks und zur Speicherverwaltung (wie Standardfunktionen für Speicherzuweisung und -freigabe, Kopieren in den Speicher und Abrufen aus dem Speicher) bereitgestellt.
-
In Bezug auf 11 ist eine beispielhafte Ausführungsabfolge gemäß Ausführungsformen der vorliegenden Offenbarung gezeigt. In diesem Beispiel führt Offline-Lernen zu einer Netzdefinitionsdatei, nw.bin 1111. Während der Netzinitialisierung 1102 wird auf eine neuronale Inferenzeinheit zugegriffen, beispielsweise über den offenen API-Aufruf, und eine Netzdefinitionsdatei 1111 wird geladen. Während der Laufzeit-Betriebsphase 1103 wird ein Datenraum auf der neuronalen Inferenzeinheit zugewiesen und Eingabedaten 1131 (z.B. Bilddaten) werden in den Einheitenspeicherpuffer kopiert. Es werden ein oder mehrere Berechnungszyklen ausgeführt, wie oben ausführlicher beschrieben. Nachdem ein Berechnungszyklus abgeschlossen ist, kann eine Ausgabe von der Einheit empfangen werden, beispielsweise über den rcv-API-Aufruf.
-
Die neuronale Inferenzeinheit kann für Eingaben und Ausgaben auf einen Speicher abgebildet werden und ihre Berechnungen werden ohne Hostanweisungen und ohne die Notwendigkeit externen Speichers entweder für das neuronale Netzmodell oder für Zwischenaktivierungen durchgeführt. Dies bietet ein vereinfachtes Programmiermodell, bei dem die neuronale Inferenzeinheit einfach angewiesen wird, ein neuronales Netz zu berechnen, anstatt dass einzelne Anweisungen für Komponentenoperationen wie beispielsweise eine Matrixmultiplikation benötigt werden. Insbesondere gibt es keine Übertragung der Faltung in eine Matrixmultiplikation und somit keine Notwendigkeit der Rückübertragung. Dementsprechend müssen keine neuen Aufrufe für jede neue Schicht des Netzes ausgegeben werden. Wie oben im Hinblick auf das Gesamt-Chipdesign beschrieben, verlassen Neuronenaktivierungen zwischen Schichten niemals den Chip. Mit diesem Ansatz müssen während der Laufzeit keine neuen Netzmodellparameter geladen werden.
-
In Bezug auf 12 ist eine beispielhafte Integration einer neuronalen Inferenzeinheit 1201 gezeigt. In diesem Beispiel sind die FIFO-Puffer auf dem Datenweg mit interner Decodierung vorgesehen. Dies bietet eine Mehrkanal-DMA-Konfiguration, ohne dass mehrere Master vorhanden sein müssen. Alternativ können mehrere AXI-Schnittstellen mit Mastern bereitgestellt werden, wodurch gleichzeitig der Durchsatz erhöht wird.
-
Auf Hardwareseite stellt ein erster AXI-Slave eine FIFO-Schnittstelle zum Aktivierungsspeicher der neuronalen Inferenzeinheit bereit. Ein zweiter AXI-Slave stellt eine FIFO-Schnittstelle von dem Aktivierungsspeicher der neuronalen Inferenzeinheit bereit. Ein dritter AXI-Slave stellt vier FIFO-Schnittstellen bereit, eine zum Anweisungsspeicher, eine vom Anweisungsspeicher, eine zu Parameter-/Steuerregistern und eine von den Parameter-/ Steuerregistern.
-
Der AXI-Master veranlasst eine Datenbewegung von den Datenwegen für die neuronale Inferenz, angewiesen über MC-DMA. Ein Mehrkanal-DMA-Controller (MC-DMA) stellt eine programmierbare DMA-Engine bereit, die gleichzeitig Datenbewegungen für mehrere AXI-Slaves ausführen kann.
-
Für dieses Integrationsszenario erstellte Anwendungen verwenden für bestimmte Aufgaben (z.B. sendTensor, recvTensor) API-Routinen. Die Laufzeitbibliothek ist dementsprechend unabhängig von bestimmten Hardwareinstanzen, während der Treiber für eine gegebene Hardwarekonfiguration erstellt wird.
-
In Bezug auf 13 ist eine beispielhafte Integration einer neuronalen Inferenzeinheit 1301 gezeigt. In diesem Beispiel wird eine vollständig speicherorientierte Schnittstelle verwendet.
-
Auf Hardwareseite stellt ein erster AXI-Slave eine speicherorientierte Schnittstelle zum Aktivierungsspeicher der neuronalen Inferenzeinheit bereit. Ein zweiter AXI-Slave stellt eine speicherorientierte Schnittstelle von dem Aktivierungsspeicher der neuronalen Inferenzeinheit bereit. Ein dritter AXI-Slave stellt speicherorientierte Schnittstellen bereit, eine für Anweisungsspeicher, eine für globalen Speicher und eine für Parameter-/Steuerregister.
-
Der AXI-Master veranlasst eine Datenbewegung von den Datenwegen für die neuronale Inferenz, angewiesen über MC-DMA. Ein Mehrkanal-DMA-Controller (MC-DMA) stellt eine programmierbare DMA-Engine bereit, die gleichzeitig Datenbewegungen für mehrere AXI-Slaves ausführen kann.
-
Für dieses Integrationsszenario erstellte Anwendungen verwenden für bestimmte Aufgaben (z.B. sendTensor, recvTensor) API-Routinen. Die Laufzeitbibliothek ist dementsprechend unabhängig von bestimmten Hardwareinstanzen, während der Treiber für eine gegebene Hardwarekonfiguration erstellt wird.
-
In Bezug auf 14 ist eine beispielhafte Konfiguration gezeigt, in der eine neuronale Inferenzeinheit 1401 über eine PCIe-Brücke mit einem Host verbunden ist.
-
In einigen Ausführungsformen wird eine Laufzeitumgebung in der Anwendungsschicht bereitgestellt. In solchen Ausführungsformen macht die Anwendung die Primärschnittstelle (z.B. Configure, Put Tensor, Get Tensor) für andere Anwendungen zugänglich. Eine grundlegende Softwareschicht tauscht über einen PCIe-Treiber Daten mit der neuronalen Inferenzeinheit aus und erstellt so die Abstraktionsschicht. Die neuronale Inferenzeinheit wird dann über eine Hochgeschwindigkeitsschnittstelle als Peripherieeinheit mit dem System verbunden.
-
In einigen Ausführungsformen wird ein Laufzeittreiber bereitgestellt, der die Primärschnittstelle (z.B. Configure, Put Tensor, Get Tensor) für andere AUTOSAR-Anwendungen zugänglich macht. Die neuronale Inferenzeinheit wird dann über eine Hochgeschwindigkeitsschnittstelle als Peripherieeinheit mit dem System verbunden.
-
Die oben beschriebenen Techniken und das oben beschriebene Layout ermöglichen eine Vielfalt mehrerer Modelle für neuronale Inferenzeinheiten. In einigen Ausführungsformen tauschen mehrere neuronale Inferenzmodule über eine ausgewählte Hochgeschwindigkeitsschnittstelle mit einem Host Daten aus. In einigen Ausführungsformen tauschen mehrere neuronale Inferenzchips miteinander und einem Host über eine Hochgeschwindigkeitsschnittstelle Daten aus mit der Möglichkeit der Verwendung von Glue-Logik. In einigen Ausführungsformen tauschen mehrere neuronale Inferenz-Dies über eine dedizierte Schnittstelle entweder mit einem Host oder anderen neuronalen Inferenz-Dies Daten aus, mit der Möglichkeit einer Verwendung von Glue-Logik (auf dem Chip oder über einen Interposer). In einigen Ausführungsformen tauschen mehrere neuronale Inferenz-System-in-Packages miteinander und/oder einem Host auf dem Die über eine Hochgeschwindigkeitsschnittstelle Daten aus. Beispielhafte Schnittstellen umfassen PCIe gen4/5, AXI4, SerDes und benutzerdefinierte Schnittstellen.
-
In Bezug auf 15 ist ein Verfahren 1500 vorgesehen zum: Empfangen 1501 einer neuronalen Netzbeschreibung an einem Prozessorsystem für neuronale Netze über eine Schnittstelle von einem Host, wobei das Prozessorsystem für neuronale Netze mindestens einen Verarbeitungskern für neuronale Netze, einen Aktivierungsspeicher, einen Anweisungsspeicher und mindestens ein Steuerregister aufweist, wobei der Verarbeitungskern des neuronalen Netzes geeignet ist, Berechnungs-, Steuerungs- und Datenübertragungs-Basiselemente des neuronalen Netzes zu implementieren, wobei die Schnittstelle operativ mit dem Prozessorsystem für neuronale Netze verbunden ist. Das Verfahren umfasst auch 1502 ein Zugänglichmachen einer Speicherabbildung über die Schnittstelle, wobei die Speicherabbildung Bereiche aufweist, die jeweils dem Aktivierungsspeicher, dem Anweisungsspeicher und mindestens einem Steuerregister entsprechen. Das Verfahren umfasst auch 1503 ein Empfangen von Eingabedaten an dem Prozessorsystem für neuronale Netze über die Schnittstelle. Das Verfahren umfasst auch 1504 ein Berechnen von Ausgabedaten aus den Eingabedaten auf Grundlage des neuronalen Netzmodells. Das Verfahren umfasst auch 1505 ein Ausgeben der Ausgabedaten von dem Prozessorsystem für neuronale Netze über die Schnittstelle. In einigen Ausführungsformen umfasst das Verfahren 1506 ein Empfangen einer Beschreibung eines neuronalen Netzes über die Schnittstelle, Empfangen von Eingabedaten über die Schnittstelle und Ausgeben von Ausgabedaten über die Schnittstelle.
-
Wie oben beschrieben, ist in verschiedenen Ausführungsformen eine speicherorientierte neuronale Inferenz-Engine vorgesehen, die einen oder mehrere neuronale Inferenzchips mit Schnittstellen für periphere Datenübertragung zum Datenaustausch mit Hosts, Sensoren und/oder anderen Inferenz-Engines aufweist. In einigen Ausführungsformen ist jeder neuronale Inferenzchip speicherorientiert und verwendet einen verringerten Satz von API-Basiselementen für die Datenübertragung, etwa: configure_network(), push_data(), pull_data(). In einigen Ausführungsformen werden austauschbare Schnittstellen für den Datenaustausch mit der neuronalen Inferenz-Engine verwendet, beispielsweise: AXI, PCIe, USB, Ethernet, Firewire oder drahtlos. In einigen Ausführungsformen werden für eine erhöhte Systemausbeute und ordnungsgemäßen Systembetrieb mehrere Redundanzebenen auf Hardware-, Software- und Modellebene verwendet. In einigen Ausführungsformen wird Firmware verwendet, um für verbesserte Leistung eingehende/ausgehende Daten zu bearbeiten und zu puffern. In einigen Ausführungsformen wird ein Laufzeitprogrammiermodell verwendet, um die neuronalen Beschleunigerchips zu steuern. In einigen Ausführungsformen wird ein Hardware-Firmware-Software-Stapel verwendet, um eine Mehrzahl von Anwendungen auf der neuronalen Inferenz-Engine zu implementieren.
-
In einigen Ausführungsformen arbeitet das System in einem eigenständigen Modus, indem integrierter nichtflüchtiger Speicher (wie beispielsweise Flash oder SD-Karten) integriert wird, um die Konfigurations- und Betriebsparameter des Systems zu speichern oder um von einem vorherigen Zustand fortzufahren. In einigen Ausführungsformen unterstützt die Leistungsfähigkeit des Systems und die Datenübertragungsinfrastruktur Echtzeitbetrieb und einen Datenaustausch mit den neuronalen Beschleunigerchips. In einigen Ausführungsformen unterstützen die Leistungsfähigkeit des Systems und die Datenübertragungsinfrastruktur einen Betrieb schneller als Echtzeit und einen Datenaustausch mit den neuronalen Beschleunigerchips.
-
In einigen Ausführungsformen ermöglichen die neuronalen Inferenzchips, Firmware, Software und Datenübertragungsprotokolle, dass mehrere solcher Systeme zu einem größeren System (einem Mehrchip-System, einem Multi-Board-System, einem Rack, einem Rechenzentrum usw.) vereinigt werden. In einigen Ausführungsformen bilden die neuronalen Inferenzchips und Mikroprozessorchips ein energieeffizientes Echtzeitverarbeitungs-Hybrid-Cloud-Computing-System. In einigen Ausführungsformen werden die neuronalen Inferenzchips in einem Cloud-System für sensor-, neuronal-, video- und/oder sprachgestützte Anwendungen sowie Modellierungsanwendungen verwendet. In einigen Ausführungsformen wird ein Schnittstellencontroller verwendet, um mit anderen Cloud-Segmenten/-Hosts Daten auszutauschen, die verschiedene Datenübertragungsschnittstellen verwenden können.
-
In einigen Ausführungsformen führen Firmware- und Software-Stapel (etwa Treiber) Interaktionen von Inferenz-Engine/Mikroprozessor, Inferenz-Engine/Host und Mikroprozessor/Host aus. In einigen Ausführungsformen wird eine Laufzeit-API bereitgestellt, die die maschinennahen Interaktionen mit den neuronalen Inferenzchips ausführt. In einigen Ausführungsformen wird ein Softwarestapel bereitgestellt, der ein Betriebssystem enthält und automatisch Arbeitslast und Benutzeranwendungen auf die Einheiten des Systems abbildet und zeitlich anordnet.
-
Bezugnehmend auf 16 ist ein Schema eines Beispiels eines Datenverarbeitungsknotens gezeigt. Der Datenverarbeitungsknoten 10 ist nur ein Beispiel eines geeigneten Datenverarbeitungsknotens und soll keine Einschränkung hinsichtlich des Umfangs der Verwendung oder Wirkungsweise der hierin beschriebenen Ausführungsformen der Erfindung darstellen. Unabhängig davon kann der Datenverarbeitungsknoten 10 wie oben beschrieben implementiert sein und/oder eine der oben beschriebenen Aufgaben erfüllen.
-
Im Datenverarbeitungsknoten 10 gibt es ein Computersystem/einen Server 12, der mit zahlreichen anderen Allzweck- oder Spezial-Datenverarbeitungssystemumgebungen oder -konfigurationen betriebsfähig ist. Beispiele für bekannte Datenverarbeitungssysteme, -umgebungen und/oder -konfigurationen, die zur Verwendung mit dem Computersystem/Server 12 geeignet sein können, umfassen ohne Einschränkung Personal-Computer-Systeme, Server-Computersysteme, Thin Clients, Thick Clients, Handheld- oder Laptopeinheiten, Multiprozessorsysteme, mikroprozessorgestützte Systeme, Set-Top-Boxen, programmierbare Unterhaltungselektronik, Netzwerkcomputer, Minicomputersysteme, Mainframe-Computer-Systeme und verteilte Cloud-Computing-Umgebungen, die beliebige der oben genannten Systeme oder Einheiten umfassen, und dergleichen.
-
Das Computersystem/der Server 12 kann im allgemeinen Kontext von durch das Computersystem ausführbaren Anweisungen beschrieben werden, beispielsweise Programmmodulen, die von einem Computersystem ausgeführt werden. Im Allgemeinen können die Programmmodule Routinen, Programme, Objekte, Komponenten, Logik, Datenstrukturen usw. umfassen, die bestimmte Aufgaben ausführen oder bestimmte abstrakte Datentypen implementieren. Das Computersystem/der Server 12 kann in verteilten Cloud-Computing-Umgebungen betrieben werden, bei denen Aufgaben von Fernverarbeitungseinheiten ausgeführt werden, die über ein Datenübertragungsnetzwerk verbunden sind. In einer verteilten Cloud-Computing-Umgebung können sich Programmmodule sowohl auf lokalen als auch auf entfernt angeordneten Computersystem-Speichermedien wie beispielsweise Speichereinheiten befinden.
-
Wie in 16 gezeigt, ist das Computersystem/der Server 12 im Datenverarbeitungsknoten 10 in Form einer Allzweck-Datenverarbeitungseinheit gezeigt. Die Komponenten des Computersystems/Servers 12 können, ohne darauf beschränkt zu sein, einen oder mehrere Prozessoren oder Verarbeitungseinheiten 16, Speicher 28 und einen Bus 18 umfassen, der verschiedene Systemkomponenten wie beispielsweise den Speicher 28 mit dem Prozessor 16 verbindet.
-
Der Bus 18 stellt eine oder mehrere von mehreren Arten von Busstrukturen dar, beispielsweise eines Speicherbusses bzw. eines Speichercontrollers, eines Peripheriebusses, eines Accelerated Graphics Port und eines Prozessor- bzw. lokalen Busses, unter Verwendung einer Vielfalt von Busarchitekturen. Beispielhaft und nicht einschränkend umfassen solche Architekturen einen ISA-Bus („Industry Standard Architecture“), einen MCA-Bus („Micro Channel Architecture“), einen EISA-Bus („Enhanced ISA“), einen lokalen VESA-Bus („Video Electronics Standards Association“) und einen PCI-Bus („Peripheral Component Interconnect“).
-
Das Computersystem/der Server 12 umfasst üblicherweise eine Vielfalt von durch ein Computersystem lesbaren Medien. Solche Medien können aus allen verfügbaren Medien bestehen, auf die das Computersystem/der Server 12 zugreifen kann, und sie umfassen sowohl flüchtige als auch nichtflüchtige Medien, austauschbare und nicht austauschbare Medien.
-
Der Systemspeicher 28 kann vom Computersystem lesbare Medien in Form von flüchtigem Speicher umfassen, beispielsweise Direktzugriffsspeicher (RAM) 30 und/oder Cache-Speicher 32. Das Computersystem/der Server 12 kann ferner weitere austauschbare/nicht austauschbare, flüchtige/nichtflüchtige Speichermedien für Computersysteme umfassen. Nur beispielhaft kann das Speichersystem 34 zum Lesen von und Schreiben auf einem nicht austauschbaren, nichtflüchtigen magnetischen Medium (nicht gezeigt und üblicherweise als „Festplatte“ bezeichnet) eingerichtet sein. Obwohl nicht gezeigt, können ein Magnetplattenlaufwerk zum Lesen von und Schreiben auf einer austauschbaren, nichtflüchtigen Magnetplatte (z.B. einer „Diskette“) und ein Laufwerk für optische Platten zum Lesen von oder Schreiben auf einer austauschbaren, nichtflüchtigen optischen Platte wie einer CD-ROM, DVD-ROM oder einem anderen optischen Medium vorgesehen sein. In solchen Fällen können diese jeweils über eine oder mehrere Medien-Datenschnittstellen mit dem Bus 18 verbunden sein. Wie nachstehend weiter gezeigt und beschrieben, kann der Speicher 28 mindestens ein Programmprodukt mit einem Satz von Programmmodulen (z.B. mindestens einem) enthalten, die zum Ausführen der Funktionen von Ausführungsformen der Erfindung konfiguriert sind.
-
Als Beispiel und nicht einschränkend können ein Programm/Dienst 40 mit einem Satz (mindestens einem) von Programmmodulen 42 ebenso wie ein Betriebssystem, ein oder mehrere Anwendungsprogramme, weitere Programmmodule und Programmdaten im Speicher 28 gespeichert sein. Das Betriebssystem, das eine oder die mehreren Anwendungsprogramme, die weiteren Programmmodule und Programmdaten oder eine Kombination davon können eine Umsetzung einer Netzwerkumgebung umfassen. Die Programmmodule 42 führen im Allgemeinen die Funktionen und/oder Verfahren von Ausführungsformen der Erfindung wie hierin beschrieben aus.
-
Das Computersystem/der Server 12 kann auch mit einem oder mehreren externen Einheiten 14 Daten austauschen, beispielsweise einer Tastatur, einer Zeigeeinheit, einer Anzeige 24 usw.; einer oder mehreren Einheiten, die es einem Benutzer erlauben, mit dem Computersystem/Server 12 zu interagieren; und/oder einer oder mehreren Einheiten (z.B. einer Netzwerkkarte, einem Modem usw.), die es dem Computersystem/Server 12 erlauben, mit einem oder mehreren anderen Recheneinheiten Daten auszutauschen. Ein solcher Datenaustausch kann über Eingabe/Ausgabe(E/A)-Schnittstellen 22 erfolgen. Noch weiter kann das Computersystem/der Server 12 über einen Netzwerkadapter 20 mit einem oder mehreren Netzwerken wie einem lokalen Netzwerk (LAN), einem Weitverkehrsnetzwerk (WAN) und/oder einem öffentlichen Netzwerk (z.B. dem Internet) Daten austauschen. Wie gezeigt, tauscht der Netzwerkadapter 20 mit den anderen Komponenten des Computersystems/Servers 12 über den Bus 18 Daten aus. Es versteht sich, dass andere Hardware- und/oder Softwarekomponenten, obwohl nicht gezeigt, in Verbindung mit dem Computersystem/Server 12 verwendet werden könnten. Beispiele hierfür sind unter anderem: Mikrocode, Einheitentreiber, redundante Verarbeitungseinheiten, externe Festplattenarrays, RAID-Systeme, Bandlaufwerke und Datenarchivierungsspeichersysteme usw.
-
Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann ein durch einen Computer lesbares Speichermedium (oder -medien) mit durch einen Computer lesbaren Programmanweisungen darauf umfassen, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
-
Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch ein System zur Ausführung von Anweisungen aufbewahren und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhabene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein computerlesbares Speichermedium, wie es hierin verwendet wird, ist nicht als transitorische Signale an sich zu verstehen, wie etwa Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder andere Übertragungsmedien ausbreiten (z.B. Lichtpulse, die ein Glasfaserkabel durchlaufen) oder elektrische Signale, die durch einen Draht übertragen werden.
-
Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
-
Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der fern angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
-
Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
-
Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaubilder angegebenen Funktion/Schritts umsetzen.
-
Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaubilder festgelegten Funktionen/Schritte umsetzen.
-
Die Ablaufpläne und die Blockschaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Ausführungen können die in den Blöcken angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.
-
Die Beschreibungen der verschiedenen Ausführungsformen der vorliegenden Erfindung wurden zu Zwecken der Veranschaulichung angegeben, sind aber nicht als erschöpfend oder auf die offenbarten Ausführungsformen beschränkt anzusehen. Viele Modifikationen und Varianten sind für Fachleute offensichtlich, ohne vom Umfang und Geist der beschriebenen Ausführungsformen abzuweichen. Die hierin verwendete Terminologie wurde ausgewählt, um die Grundsätze der Ausführungsformen, die praktische Anwendung oder die technische Verbesserung gegenüber Technologien, die am Markt vorhanden sind, am besten zu beschreiben oder anderen Fachleuten zu ermöglichen, die hierin offenbarten Ausführungsformen zu verstehen.