-
QUERVERWEIS AUF VERWANDTE ANWENDUNGEN
-
Die vorliegende Anmeldung beansprucht den Vorteil der Priorität gegenüber der
US-Patentanmeldung Nr. 16/831,060 , eingereicht am 26. März 2020.
-
ALLGEMEINER STAND DER TECHNIK
-
Neuronale Netzwerke können verwendet werden, um Aufgaben auszuführen, wie etwa ein Erkennen eines Objekts in einem Bild. In einem neuronalen Netzwerk werden Eingabedaten mit Gewichtungen kombiniert, um Ausgabedaten mithilfe von Aktivierungsfunktionen abzuleiten. Zum Beispiel kann ein neuronales Netzwerk ein Bild als Eingabedaten nehmen und eine Entscheidung oder Wahrscheinlichkeit ausgeben, dass sich ein bestimmtes Objekt in dem Bild befindet. Der in einem neuronalen Netzwerk verwendete Satz von Gewichtungen kann durch einen Trainingsprozess bestimmt sein, bei dem das neuronale Netzwerk lernen kann, wie eine bestimmte Rechenaufgabe für eine Anwendung ausgeführt wird. Der Trainingsprozess schließt das Versorgen des neuronalen Netzwerks mit Trainingseingabedaten und einer entsprechenden Referenzausgabe ein, die eine bestimmte Entscheidung unterstützt (z. B. eine Erkennung oder Nichterkennung eines Objekts in einem Bild). Das neuronale Netzwerk kann Berechnungen durchführen, um die Gewichtungen mit den Trainingseingabedaten zu kombinieren, um Trainingsausgabedaten zu erzeugen, und die Trainingsausgabedaten können mit den Referenzausgabedaten verglichen werden, um die Genauigkeit des Modells des neuronalen Netzwerks zu bewerten. Während des Trainings können unterschiedliche Trainingseingabedatensätze bereitgestellt werden, um unterschiedliche Trainingsausgabedatensätze zu erzeugen. Die Gewichtungen des neuronalen Netzwerks können angepasst werden, um die Unterschiede zwischen den Trainingsausgabedaten und den Referenzausgabedaten zu minimieren. Um die Wahrscheinlichkeit zu verbessern, dass das neuronale Netzwerk eine korrekte Entscheidung erzeugt, kann ein großes Volumen von Trainingseingabedaten, die eine große Anzahl von Szenarien abdecken, verwendet werden, um das neuronale Netzwerk zu trainieren. Infolgedessen kann das Trainieren eines neuronalen Netzwerks viel Zeit und Rechenressourcen erfordern.
-
Figurenliste
-
Verschiedene Ausführungsformen gemäß der vorliegenden Offenbarung werden unter Bezugnahme auf die Zeichnungen beschrieben, in denen Folgendes gilt:
- 1 veranschaulicht ein Beispiel einer Klassifizierungsvorrichtung;
- 2 veranschaulicht ein vereinfachtes Blockdiagramm eines Beispiels eines Vorhersagemodells;
- 3 veranschaulicht ein vereinfachtes Blockdiagramm eines Beispiels eines Vorgangs, der unter Verwendung eines Vorhersagemodells ausgeführt wird;
- 4 veranschaulicht ein Beispiel eines Trainingsprozesses eines neuronalen Netzwerks;
- 5 veranschaulicht ein Diagramm eines Beispiels eines verteilten Systems;
- 6 veranschaulicht ein Zeitablaufdiagramm eines Beispiels eines Trainingsprozesses;
- 7 veranschaulicht ein Zeitablaufdiagramm eines anderen Beispiels eines Trainingsprozesses;
- 8 veranschaulicht ein Zeitablaufdiagramm eines weiteren Beispiels eines Trainingsprozesses;
- 9 veranschaulicht ein Ablaufdiagramm eines Beispiels eines Trainingsprozesses;
- 10 veranschaulicht ein Ablaufdiagramm eines anderen Beispiels eines Trainingsprozesses;
- 11 veranschaulicht ein Blockdiagramm eines Beispiels einer Rechenvorrichtung;
- 12 veranschaulicht ein Blockdiagramm eines anderen Beispiels einer Rechenvorrichtung;
- 13 veranschaulicht ein Blockdiagramm eines Beispiels einer Vorrichtung einer integrierten Schaltung;
- 14 beinhaltet ein Blockdiagramm eines Beispiels einer Beschleunigungsengine;
- 15 beinhaltet ein Blockdiagramm eines Beispiels eines Hostsystems; und
- 16 beinhaltet ein Diagramm eines beispielhaften Netzwerks.
-
DETAILLIERTE BESCHREIBUNG
-
Ein neuronales Netzwerk beinhaltet typischerweise eine Anzahl von kaskadierenden Schichten des neuronalen Netzwerks, die jeweils einem Satz von Gewichtungen zugeordnet sind. In einem Ableitungsvorgang kann eine erste Schicht des neuronalen Netzwerks einen Eingabedatensatz empfangen, den Eingabedatensatz mit den Gewichtungen kombinieren (z. B. durch das Multiplizieren des Eingabedatensatzes mit den Gewichtungen und dann das Summieren der Produkte), um einen ersten Ausgabedatensatz für die Schicht zu erzeugen und um den Ausgabedatensatz an eine zweite Schicht des neuronalen Netzwerks in einem Vorwärtspropagationsvorgang zu propagieren. Die zweite Schicht des neuronalen Netzwerks führt einen weiteren Satz von Vorwärtspropagationsvorgänge an dem ersten Ausgabedatensatz aus der ersten Schicht aus, um einen zweiten Ausgabedatensatz zu erzeugen und den zweiten Ausgabedatensatz an höhere Schichten des neuronalen Netzwerks zu propagieren. Die Vorwärtspropagationsvorgänge können bei der ersten Schicht des neuronalen Netzwerks beginnen und bei der höchsten Schicht des neuronalen Netzwerks enden. Die Vorwärtspropagationsvorgänge auf jeder Schicht des neuronalen Netzwerks können unterschiedliche Stufen der Extraktion und Verarbeitung von Informationen aus dem Eingabedatensatz darstellen. Eine Entscheidung kann dann auf Grundlage der Ausgabedaten der höchsten Schicht des neuronalen Netzwerks getroffen werden. Zum Beispiel kann jede Schicht des neuronalen Netzwerks Merkmale aus einem Bild extrahieren und/oder verarbeiten und es kann eine Entscheidung darüber, ob sich ein Objekt in dem Bild befindet, auf Grundlage des Ergebnisses der Verarbeitung der extrahierten Merkmale auf den Schichten des neuronalen Netzwerks erzeugt werden.
-
Der Satz von Gewichtungen des neuronalen Netzwerks kann durch einen Trainingsprozess erzeugt und/oder aktualisiert werden, um die Wahrscheinlichkeit zu verbessern, dass das neuronale Netzwerk eine korrekte Entscheidung ausgibt. Ein beispielhafter Trainingsprozess kann ein Gradientenabstiegsschema verwenden. Als Teil des Trainingsprozesses können Vorwärtspropagationsvorgänge an einem Trainingseingabedatensatz unter Verwendung des Satzes von Gewichtungen auf jeder Schicht des neuronalen Netzwerks durchgeführt werden, um einen Trainingsausgabedatensatz auf der Schicht des neuronalen Netzwerks auf höchster Ebene zu erzeugen. Der Trainingsausgabedatensatz kann mit einem Referenzausgabedatensatz verglichen werden, um den Fehler des Modells des neuronalen Netzwerks zu bestimmen, das mit den Trainingseingabedaten arbeitet, und dieser Fehler kann verwendet werden, um die Gewichtungen des Modells anzupassen, um die Genauigkeit des neuronalen Netzwerks zu verbessern.
-
Als Teil des Trainingsprozesses kann jede Schicht des neuronalen Netzwerks Rückwärtspropagationsvorgänge ausführen, um den Satz von Gewichtungen auf jeder Schicht des neuronalen Netzwerks anzupassen. Während der Rückwärtspropagation wird der Fehler oder der Unterschied zwischen dem Trainingsausgabedatensatz und dem Referenzausgabedatensatz von der höchsten Schicht des neuronalen Netzwerks zurück zur ersten Schicht des neuronalen Netzwerks rückwärts propagiert. Bei jeder Schicht wird auf Grundlage des Fehlers ein Satz von Gewichtungsgradienten berechnet, um den Umfang der Anpassung zu bestimmen, die an jedem Gewichtungswert vorgenommen werden muss. Ein Durchlauf des Trainingsprozesses ist abgeschlossen, wenn die Gewichtungen von jeder Schicht angepasst wurden. Der nächste Durchlauf des Trainingsprozesses kann dann mit den aktualisierten Gewichtungen durchgeführt werden, und der Trainingsprozess kann für eine Anzahl von Durchläufen wiederholt werden, bis ein Verlustziel erreicht ist, wie etwa das Minimieren des Fehlers oder bis der Fehler auf einen bestimmten Schwellenwert abfällt.
-
Der Trainingsprozess kann aufgrund der aufeinanderfolgenden Art und Datenabhängigkeit zwischen den beteiligten Vorgängen sehr zeitaufwändig sein. Wie vorstehend beschrieben, werden Vorwärtspropagationsvorgänge zuerst ausgeführt, um einen Trainingsausgabedatensatz zu berechnen, und dann werden Rückwärtspropagationsvorgänge ausgeführt, um die Gewichtungsgradienten zu berechnen. Die Gewichtungen auf jeder Schicht des neuronalen Netzwerks können dann unter Verwendung der Gewichtungsgradienten aktualisiert werden. Aufgrund der Datenabhängigkeit zwischen Rückwärtspropagationsvorgängen und Vorwärtspropagationsvorgängen können die beiden Sätze von Vorgängen nicht parallel ausgeführt werden. Darüber hinaus kann der nächste Durchlauf des Trainingsprozesses erst gestartet werden, wenn die Gewichtungswerte aktualisiert wurden. Das Fehlen von Parallelität kann die Trainingszeit drastisch verlängern, was sich weiter erhöht, wenn mehrere Durchläufe des Trainingsprozesses durchgeführt werden, um das Verlustziel zu erreichen. Darüber hinaus schließt der Trainingsprozess typischerweise das Versorgen des neuronalen Netzwerks mit mehreren Sätzen von Trainingseingabedaten ein, um unterschiedliche Eingabeszenarien derartig abzudecken, dass das neuronale Netzwerk trainiert werden kann, um eine korrekte Entscheidung über einen weiten Bereich von Eingaben bereitzustellen. Das Computersystem, welches das neuronale Netzwerk umsetzt, muss ein Training für eine große Anzahl von Eingabedatensätzen durchführen, was die Trainingszeit weiter erhöht. Der Trainingsprozess kann außerdem eine höhere Präzision als der Ableitungsvorgang erfordern, was zu einer zusätzlichen Belastung der Rechenressourcen führt.
-
Eine Möglichkeit, einen Trainingsprozess zu beschleunigen, besteht in der Verwendung eines verteilten Systems, bei dem der Trainingsprozess auf mehrere Computersysteme verteilt ist, von denen jedes als ein Verarbeitungsknoten konfiguriert werden kann. Ein Trainingseingabedatensatz kann in mehrere Abschnitte aufgeteilt werden, wobei jeder Abschnitt von einem Verarbeitungsknoten verarbeitet werden muss. Jeder Verarbeitungsknoten kann die Vorwärts- und Rückwärtspropagationsvorgänge unabhängig auf Grundlage eines Abschnitts der Trainingseingabedaten ausführen, um einen Satz von Gewichtungsgradienten für jede Schicht des neuronalen Netzwerks zu erzeugen. Bei jedem Durchlauf des Trainingsprozesses kann jeder Verarbeitungsknoten seinen Satz von Gewichtungsgradienten mit anderen Verarbeitungsknoten austauschen und seinen Satz von Gewichtungsgradienten und die von anderen Verarbeitungsknoten empfangenen Sätze von Gewichtungsgradienten mitteln. Jeder Verarbeitungsknoten kann dann den Satz von Gewichtungen für jede Schicht des neuronalen Netzwerks auf Grundlage der für diese Schicht berechneten gemittelten Gewichtungsgradienten aktualisieren.
-
Die Verteilung des Trainingsprozesses auf mehrere Verarbeitungsknoten kann die Menge der an jedem Verarbeitungsknoten verarbeiteten Trainingseingabedaten verringern, was die Zeiten für den Abschluss der Vorwärts- und Rückwärtspropagationsvorgänge auf jeder Schicht des neuronalen Netzwerks verringern kann, um den Trainingsprozess zu beschleunigen. Der Austausch von Gewichtungsgradienten zwischen den Verarbeitungsknoten kann jedoch zu einem erheblichen Engpass im Trainingsprozess führen. Zum Beispiel kann in einem Fall, bei dem sich das verteilte System in einer Cloud-Infrastruktur befindet und die Verarbeitungsknoten durch das Senden von Netzwerkpaketen Gewichtungsgradienten miteinander austauschen, die Netzwerklatenz in Bezug auf die Zeiten für den Abschluss der Vorwärts-/Rückwärtspropagationsvorgänge erheblich sein. Dies kann dazu führen, dass jeder Verarbeitungsknoten inaktiv ist, während darauf gewartet wird, dass der nächste Satz von Gewichtungen für den nächsten Durchlauf des Trainingsprozesses verfügbar wird. Somit kann die Netzwerklatenz zum Austausch von Gewichtungsgradienten die Verringerung der vom verteilten System verursachten Trainingszeit verringern oder sogar die Trainingszeit verlängern, wenn eine große Anzahl von Verarbeitungsknoten verwendet wird.
-
Gemäß einigen Umsetzungen kann jeder Verarbeitungsknoten, um den Durchsatz des Systems zu verbessern, anstatt inaktiv zu bleiben, während darauf gewartet wird, dass der nächste Satz von Gewichtungen durch den Gradientenaustauschprozess verfügbar wird, seinen eigenen Satz von Gewichtungen unter Verwendung der lokalen Gewichtungsgradienten aktualisieren, um einen Satz ovn spekulativen Gewichtungen erzeugen. Der nächste Durchlauf des Trainingsprozesses kann unter Verwendung des Satzes von spekulativen Gewichtungen durchgeführt werden, während der Gradientenaustauschprozess parallel durchgeführt wird, um den nächsten Satz von Gewichtungen zu erhalten. Wenn der nächste Satz von Gewichtungen verfügbar wird, kann der nächste Satz von aus dem Gradientenaustauschprozess erhaltenen Gewichtungen mit dem Satz von spekulativen Gewichtungen verglichen werden, um einen Unterschied zwischen den beiden Sätzen von Gewichtungen zu bestimmen. Dieser Unterschied stellt das Delta zwischen dem Satz von unter Verwendung der lokalen Gewichtungsgradienten des Verarbeitungsknotens aktualisierten spekulativen Gewichtungen und dem Satz von unter Verwendung der gemittelten über die Verarbeitungsknoten des Systems genommenen Gradienten aktualisierten Gewichtungen dar. Wenn der Unterschied unter einem Schwellenwertunterschied liegt, befindet sich der Satz von spekulativen Gewichtungen für den lokalen Verarbeitungsknoten nahe genug an den global aktualisierten Gewichtungen, und der Trainingsprozess am Verarbeitungsknoten kann weiterhin die Ergebnisse der spekulativen Gewichtungen verwenden. Somit kann, anstatt inaktiv zu bleiben, während auf die Aktualisierung der globalen Gewichtungen gewartet wird, jeder Verarbeitungsknoten den nächsten Durchlauf der Trainingsverarbeitung unter Verwendung der lokal aktualisierten spekulativen Gewichtungen auslösen und durchführen.
-
In einigen Fällen kann der Satz von spekulativen Gewichtungen zu weit von den global aktualisierten Gewichtungen entfernt sein, wenn der Unterschied zwischen dem Satz von spekulativen Gewichtungen und den global aktualisierten Gewichtungen den Schwellenwertunterschied überschreitet. In derartigen Fällen können die Berechnungen, die unter Verwendung des Satzes von spekulativen Gewichtungen durchgeführt werden, verworfen werden, und der Durchlauf des Trainingsprozesses kann unter Verwendung der global aktualisierten Gewichtungen anstelle der spekulativen Gewichtungen wiederholt werden. Obwohl mit dem Neustart eines Durchlaufes des Trainingsprozesses einige Gemeinkosten verbunden sind, wird erwartet, dass die Anzahl der Fälle, in denen ein Durchlauf des Trainingsprozesses wiederholt werden muss, im Vergleich zu der Anzahl der Fälle, in denen die Ergebnisse aus der Verwendung der spekulativen Gewichtungen verwendet werden können. Somit kann, trotz der Möglichkeit, dass ein Durchlauf des Trainingsprozesses wiederholt werden muss, das gesamte Training im Vergleich zu Systemen schneller abgeschlossen werden, bei denen die Verarbeitungsknoten während des Gradientenaustauschprozesses inaktiv bleiben.
-
In der folgenden Beschreibung werden verschiedene Beispiele beschrieben. Zu Zwecken der Erläuterung werden konkrete Konfigurationen und Einzelheiten dargelegt, um ein umfassendes Verständnis der Beispiele bereitzustellen. Dem Fachmann ist jedoch außerdem ersichtlich, dass das Beispiel ohne die konkreten Einzelheiten umgesetzt sein kann. Darüber hinaus können hinlänglich bekannte Merkmale weggelassen oder vereinfacht sein, um die beschriebenen Ausführungsformen nicht unverständlich zu machen.
-
1 veranschaulicht ein Beispiel einer Klassifizierungsvorrichtung 100, bei der die in dieser Schrift offenbarten Methoden verwendet werden können, um Daten zu verarbeiten. Die Klassifizierungsvorrichtung 100 kann zum Beispiel eine Rechenvorrichtung sein, die eine Softwareanwendung 102 und ein Vorhersagemodell 103 ausführt, um in einer Datensequenz beinhaltete Informationen vorherzusagen und eine vorbestimmte Funktion auf Grundlage der Vorhersage auszuführen. Zum Beispiel kann die Klassifizierungsvorrichtung 100 Teil eines Bilderkennungsdienstes sein, der bereitgestellt ist, um bestimmte Objekte (z. B. Text, eine Person usw.) von einem Bild zu identifizieren. Es versteht sich, dass der Bilderkennungsdienst lediglich als veranschaulichendes Beispiel bereitgestellt ist und dass die in dieser Schrift offenbarten Methoden für andere Datenverarbeitungsanwendungen verwendet werden können, die zum Beispiel textbasierte Datenverarbeitung (z. B. Verarbeitung von Suchanfragen), Audiodatenverarbeitung usw. beinhalten. Darüber hinaus kann die Klassifizierungsvorrichtung 100 eine Anzahl von unterschiedlichen Vorhersagemodellen betreiben, um unterschiedliche Eingabedaten entweder parallel oder zu unterschiedlichen Zeitpunkten zu verarbeiten.
-
In einigen Beispielen kann der Bilderkennungsdienst in einem mandantenfähigen Rechendienstsystem bereitgestellt sein. Das mandantenfähige Rechendienstsystem kann typischerweise eine Vielzahl von Servern beinhalten, die Daten hosten und von mehreren Clients oder Organisationen zum Ausführen von Instanzen verwendet werden können, wie etwa Instanzen virtueller Maschinen oder Bare-Metal-Instanzen (z. B. Betriebssysteme, die direkt auf der Serverhardware ausgeführt werden). Bei den meisten Instanzen, wie etwa Bare-Metal-Instanzen oder den Instanzen virtueller Maschinen, kann ein mandantenfähiges Rechendienstsystem derartig einem Client zugewiesen werden, wenn der Client sie benötigt, und außer Betrieb genommen werden, wenn sie nicht mehr benötigt werden, dass die Ressourcen anderen Clients neu zugewiesen werden können. In der vorliegenden Offenbarung können die Begriffe „Mandant“, „Client“ und „Kunde“ austauschbar verwendet werden, obwohl derartige Begriffe nicht zwangsläufig das Bestehen einer bestimmten Geschäftsvereinbarung implizieren. Der Begriff „Instanz“ kann sich zum Beispiel auf eine Instanz beziehen, die direkt auf Serverhardware oder als eine virtuelle Maschine ausgeführt wird. Unterschiedliche Arten von Instanzen entsprechen im Allgemeinen unterschiedlichen Hardwarefunktionen und/oder Anordnungen von Hardware (z. B. unterschiedliche Mengen an verfügbarem Speicher und/oder Verarbeitungshardware). In dem Beispiel von 1 kann das mandantenfähige Rechendienstsystem den Bilderkennungsdienst derartig bereitstellen, wenn der Client ihn benötigt, und den Dienst außer Betrieb nehmen, wenn er nicht mehr benötigt wird, dass die Ressourcen, die den Bilderkennungsdienst unterstützen (z. B. Zugriff auf die Softwareanwendung 102 und die zugrundeliegenden Hardwareressourcen für die Verarbeitung der Softwareanwendung 102) können anderen Clients neu zugewiesen werden. Unterschiedliche Clients (oder ein Client) können anfordern, dass die Anwendung 102 die Verarbeitung unterschiedlicher Eingabedaten unter Verwendung derselben oder unterschiedlicher Vorhersagemodelle durchführen, die das Vorhersagemodell 103 beinhalten.
-
In dem Beispiel von 1 kann die Softwareanwendung 102 Pixeldaten eines Bildes 104 von einem Benutzer empfangen. Das Bild 104 kann eine Matrix von Pixeln beinhalten. Die Softwareanwendung 102 kann eine Analyse der Pixeldaten durchführen und ein oder mehrere in Bild 104 dargestellte Objekte 106 vorhersagen. Die Analyse kann zum Beispiel das Vergleichen der Pixeldaten mit einem Satz von vorbestimmten Merkmalsdaten beinhalten. Die vorbestimmten Merkmalsdaten können Daten beinhalten, die einem Satz vorbestimmter visueller Bildmerkmale zugeordnet sind, wie etwa ein Nasenobjekt, ein Mundobjekt usw. Die vorbestimmten Merkmalsdaten können außerdem Daten beinhalten, die nichtvisuellen Bildmerkmalen oder einer Kombination visueller und nichtvisueller Bildmerkmale zugeordnet sind. Wie nachfolgend ausführlicher erörtert ist, kann die Softwareanwendung 102 das Vorhersagemodell 103 verwenden, um einen Satz von Bewertungen auf Grundlage der Pixeldaten des Bildes 104 zu berechnen. Der Satz von Bewertungen kann zum Beispiel die Wahrscheinlichkeit des Bildes 104 darstellen, die Bildmerkmale zu beinhalten, die durch die Merkmalsdaten dargestellt sind. Die Softwareanwendung 102 kann dann andere Informationen über den Inhalt des Bildes 104 auf Grundlage der Bewertungen bestimmen. Zum Beispiel kann die Softwareanwendung 102 auf Grundlage der Bewertungen bestimmen, dass das Bild 104 ein Bild von zum Beispiel einem Panda, einer Katze oder anderen Objekten ist.
-
Das Vorhersagemodell 103 kann in Form eines künstlichen neuronalen Netzwerks vorliegen. Das neuronale Netzwerk kann mehrere Verarbeitungsknoten beinhalten, wobei jeder Verarbeitungsknoten dazu konfiguriert ist, einen Teil der Eingabepixeldaten zu verarbeiten oder die Zwischenausgaben von anderen Verarbeitungsknoten weiterzuverarbeiten. 1 veranschaulicht ein Beispiel des Vorhersagemodells 103, das die in dieser Schrift offenbarten Methoden verwenden kann. In 1 kann das Vorhersagemodell 103 ein mehrschichtiges neuronales Netzwerk sein, wie etwa ein tiefes neuronales Netzwerk (deep neural network - DNN), ein neuronales Faltungsnetzwerk (convolutional neural network - CNN) usw.
-
Unter Bezugnahme auf 2 kann das Vorhersagemodell 203 eine Eingabeschicht 207, einen Satz von Zwischenschichten, welche die Zwischenschichten 209 und 211 beinhalten, und eine Ausgabeschicht (in 2 nicht gezeigt) beinhalten. Es versteht sich, dass das Vorhersagemodell 203 auch andere unterschiedliche Arten von neuronalen Netzwerken beinhalten kann, die zum Beispiel Langzeit-Kurzzeitgedächtnis (LSTM), Mehrschichtwahrnehmung (MTP), Multiskalen-Densenet (MSDNET) usw. beinhalten.
-
Die Schicht 207 kann Pixeldaten verarbeiten, die unterschiedliche Abschnitte des zu analysierenden Bildes darstellen. Zum Beispiel kann in dem Beispiel von 2 die Schicht 207 die Pixeldaten des Bildes 204 verarbeiten. Jedem Verarbeitungsknoten der Schicht 207 wird zugewiesen, einen Pixelwert (z. B. x0, x1, x2, ... xn) zu empfangen, der einem vorbestimmten Pixel innerhalb des Bildes 204 entspricht, und ein oder mehrere Gewichtungen mit dem empfangenen Pixelwert an die Schicht 209 zu übermitteln. In einem Fall, bei dem das Vorhersagemodell 203 ein DNN ist, kann jedem Verarbeitungsknoten der Schicht 207 ein Satz von Gewichtungen zugewiesen werden, die auf Grundlage einer Matrix W1 definiert sind. Jeder Verarbeitungsknoten der Schicht 207 kann den empfangenen Pixelwert und die zugewiesenen Gewichtungen an jeden Verarbeitungsknoten der Schicht 209 senden. In einem Fall, bei dem das Vorhersagemodell 203 ein CNN ist, können Gruppen der Verarbeitungsknoten der Schicht 207 einen Satz von Gewichtungen teilen, und jede Gruppe kann den Satz von Gewichtungen und die von der Gruppe von Verarbeitungsknoten empfangenen Pixelwerte an einen einzelnen Verarbeitungsknoten der Schicht 209 senden. Unterschiedliche Modell des neuronalen Netzwerkse können unterschiedliche Topologien (die z. B. eine unterschiedliche Anzahl von Schichten, unterschiedliche Verbindungen zwischen Schichten usw. beinhalten) beinhalten und/oder einen unterschiedlichen Satz von Gewichtungen für jede Schicht beinhalten.
-
Die Schicht 209 kann die skalierten Ausgaben von der Schicht 207 verarbeiten, um einen Satz von Zwischenausgaben zu erzeugen. Zum Beispiel kann, unter der Annahme, dass der Verarbeitungsknoten 210a der Schicht 209 mit n Verarbeitungsknoten in der Schicht 207 verbunden ist, der Verarbeitungsknoten 210a eine Summe der von der Schicht 207 empfangenen skalierten Ausgaben auf Grundlage der folgenden Gleichung erzeugen:
-
-
Hier stellt Summe210a eine Zwischenausgabe dar, die vom Verarbeitungsknoten 210a erzeugt wurde. W1i × xi stellt eine Skalierung eines bestimmten Pixelwerts (z. B. xo) mit der zugeordneten Gewichtung (z. B. W10) durch einen Verarbeitungsknoten der Schicht 207 dar. In einem Fall, bei dem das Vorhersagemodell 203 ein DNN ist, kann jeder Verarbeitungsknoten der Schicht 209 die Summe auf Grundlage der Skalierung von Pixelwerten von jedem Verarbeitungsknoten der Schicht 207 erzeugen und dann eine Summe (z. B. Summe210a) durch das Summieren der skalierten Pixelwerte erzeugen. Die Summe kann außerdem ein Punktprodukt zwischen einem Eingabevektor, der eine Anzahl von Elementen (z. B. Pixelwerte) umfasst, und einem Gewichtungsvektor (z. B. W1) darstellen. In einigen Beispielen kann außerdem eine Verzerrung zu den skalierten Ausgaben addiert werden, um die Zwischenausgabe zu erzeugen.
-
In einem Fall, bei dem das Vorhersagemodell 203 ein CNN ist, kann jeder Verarbeitungsknoten der Schicht 209 die Zwischenausgabe auf Grundlage der Skalierung von Pixelwerten aus einer Gruppe von Verarbeitungsknoten der Schichten 207 erzeugen. Die Zwischenausgabe kann ein Faltungsergebnis zwischen einer Gruppe von Pixelwerten und einem Filter darstellen, der die Gewichtungswerte umfasst.
-
3 veranschaulicht ein Beispiel eines Faltungsvorgangs, den die Schicht 209 ausführen kann. In 3 kann der Filter 330 eine zweidimensionale Matrix von Gewichtungen beinhalten. Die Gewichtungen in Filter 330 können eine räumliche Verteilung von Pixeln für bestimmte Merkmale darstellen, die aus dem Bild erfasst werden sollen. Die zweidimensionale Matrix kann eine Höhe von R-Zeilen und eine Breite von S-Spalten aufweisen und ist typischerweise kleiner als ein Eingabebild mit einer Höhe von H-Pixeln und einer Breite von W-Pixeln. Jede Gewichtung kann einem Pixel in einem rechteckigen Block von Pixelwerten mit denselben R-Zeilen und S-Spalten zugeordnet werden. Ein Verarbeitungsknoten der Schicht 209 (z. B. der Verarbeitungsknoten 210a) kann von einer Gruppe von Verarbeitungsknoten der Eingabeschicht 207 eine Gruppe 340 von Pixelwerten empfangen, die einem ersten rechteckigen Block von Pixeln aus dem Eingabebild entsprechen, der einem Standort des ersten Schritts des Filters 330 entspricht, und eine Faltungsausgabe 342 auf Grundlage einer Summierung von Multiplikationsergebnissen zwischen jeder Gewichtung des Filters 330 und jedem entsprechenden Pixel in der Gruppe 340 gemäß Gleichung 1 erzeugen, um ein Punktprodukt zwischen einer durch den Filter 330 dargestellten Matrix und einer durch die Gruppe 340 dargestellten Matrix zu erzeugen. Ein weiterer Verarbeitungsknoten der Schicht 209 kann außerdem von einer weiteren Gruppe von Verarbeitungsknoten der Eingabeschicht 207 eine Gruppe 344 von Pixelwerten empfangen, die einem zweiten rechteckigen Block von Pixeln aus dem Eingabebild entsprechen, der einem Standort des zweiten Schritts des Filters 330 entspricht, und eine Faltungsausgabe 346 auf Grundlage einer Summierung von Multiplikationsergebnissen zwischen jeder Gewichtung des Filters 330 und jedem entsprechenden Pixel in der Gruppe 344 gemäß Gleichung 1 erzeugen, um ein Punktprodukt zwischen der Matrix des Filters 330 und einer durch die Gruppe 340 dargestellten Matrix zu erzeugen. In einigen Beispielen kann jede Faltungsausgabe in 3 (z. B. Faltungsausgabe 342, Faltungsausgabe 346 usw.) der Ausgabe eines Verarbeitungsknotens der Schicht 209 entsprechen. In einigen Beispielen können die Pixeldaten in dem Eingabebild als eine Eingabemerkmalsabbildung bezeichnet sein, um anzuzeigen, dass die Pixel von demselben Filter (oder denselben Filtersätzen) verarbeitet werden, die (einem) bestimmten Merkmal(en) entsprechen. Die Faltungsausgaben können als eine Ausgabemerkmalsabbildung bezeichnet sein, um anzuzeigen, dass die Ausgabe das Ergebnis der Verarbeitung einer Eingabemerkmalsabbildung mit dem Filter ist.
-
Wie in 3 gezeigt, können die Faltungsvorgänge in einem Schiebefenster derartig angeordnet sein, dass der zweite rechteckige Block den ersten rechteckigen Block in dem Eingabebild überdeckt oder auf andere Weise an diesen angrenzt. Zum Beispiel kann in dem Beispiel von 3 D derartig ein Schrittabstand (in Pixel) des Gleitfensters für jeden Faltungsvorgang sein, dass der Block von Pixeln, welcher der Gruppe 344 entspricht, in einem Abstand D (in Bezug auf Pixel) von dem Block von Pixeln, welcher der Gruppe 340 entspricht, angeordnet sein und der nächste Block von Pixeln kann sich ebenfalls in demselben Abstand D von Gruppe 344 befinden. Andere Verarbeitungsknoten der Schicht 309 können außerdem Gruppen von Pixeln empfangen, die anderen rechteckigen Blöcken entsprechen, und andere Zwischenausgaben erzeugen. Die Faltungsausgänge können Teil einer Faltungsausgabematrix sein. Die Matrix von Faltungsausgaben kann eine kleinere Höhe und eine kleinere Breite als das Eingabebild aufweisen. Rechteckige Blöcke der Faltungsausgaben können weiter gruppiert werden, und Faltungsvorgänge können auf der Schicht 211 zwischen den Gruppen von Faltungsausgaben und einem anderen Satz von Filtergewichtungen ausgeführt werden, um einen weiteren Satz von Faltungsausgaben zu erzeugen.
-
Unter erneuter Bezugnahme auf 2 kann ein Verarbeitungsknoten der Schicht 209 dazu konfiguriert sein, die Faltungsausgabeelemente einer Faltungsausgabematrix zu erzeugen, und ein Satz M von Verarbeitungsknoten der Schicht 209 kann einem Satz M von Faltungsausgabematrizen entsprechen. Der Verarbeitungsknoten der Schicht 209 kann außerdem jede Faltungsausgabe mit einer Aktivierungsfunktion verarbeiten, um eine Aktivierungsausgabe zu erzeugen. Die Aktivierungsfunktion kann die Faltungsausgabe in eine Entscheidung darüber übersetzen, ob die Faltungsausgabe an die Zwischenschicht 211 weitergeleitet werden soll, um die Klassifiziererentscheidung zu beeinflussen (analog zum Abfeuern eines biologischen Neurons). Ein Beispiel für die Aktivierungsfunktion kann eine gleichgerichtete Lineareinheit (rectified linear unit - ReLU) sein, die gemäß der folgenden Gleichung definiert ist:
-
-
Zusätzlich zur ReLU können auch andere Formen der Aktivierungsfunktion verwendet werden, was zum Beispiel eine Softplus-Funktion (die eine glatte Annäherung einer ReLU-Funktion sein kann), eine hyperbolische Tangensfunktion (tanh), eine Bogen-Tangensfunktion (arctan), eine Sigmoidfunktion, eine Gaußsche Funktion usw. beinhaltet.
-
Ein Verarbeitungsknoten der Schicht 209 (z. B. der Verarbeitungsknoten 210a) kann die Summe mit der ReLU-Funktion verarbeiten, um eine erste Ausgabe der Schicht 209 auf Grundlage der folgenden Gleichung zu erzeugen:
-
-
Optional kann das Vorhersagemodell 203 eine Bündelungsschicht beinhalten, um die Anzahl von Zwischenausgaben (z. B. Summe210a) der Schicht 209 zu verringern. Die Bündelungsschicht kann die Zwischenausgaben gruppieren und einen Bündelungsvorgang für jede Gruppe ausführen. Der Bündelungsvorgang kann Folgendes beinhalten: wie etwa maximale Bündelung (z. B. das Auswählen einer maximalen Zwischenausgabe innerhalb der Gruppe), minimale Bündelung (z. B. das Auswählen einer minimalen Zwischenausgabe), durchschnittliche Bündelung (z. B. das Finden eines Durchschnitts jeder Gruppe), Summenbündelung (z. B. das Finden einer Summe jeder Gruppe) usw., und die verringerten Zwischenausgaben können von der Aktivierungsfunktion verarbeitet werden, um erste Ausgaben der Schicht 209 zu erzeugen. Der Bündelungsvorgang kann durchgeführt werden, um die der Verarbeitung der Aktivierungsfunktion zugeordneten Berechnungskosten zu verringern.
-
Die Schicht 211 kann die skalierten Zwischenausgaben von der Schicht 209 zum Beispiel durch das Durchführen zusätzlicher Faltungsvorgänge auf Grundlage unterschiedlicher Sätze von Filtern weiter verarbeiten. Die Ausgaben von jedem Verarbeitungsknoten der Schicht 211 können an andere höhere Zwischenschichten oder an eine Ausgabeschicht (in 2 nicht gezeigt) weitergeleitet werden. Die Ausgabeschicht kann einen Ausgabevektor bilden, der zum Beispiel eine Wahrscheinlichkeit, dass bestimmte Merkmale in Bild 204 beinhaltet sind, und/oder eine Wahrscheinlichkeit darstellt, dass das Bild 204 ein Bild eines Pandas beinhaltet. Zum Beispiel kann der Ausgabevektor mit einem Nasenobjekt eines Pandas zugeordneten Referenzvektor oder mit einem einem Panda zugeordneten Referenzvektor verglichen werden. Eine Entscheidung darüber, ob das Bild 204 ein Bild eines Pandas ist, kann auf Grundlage des Vergleichsergebnisses bestimmt werden.
-
Die in den 2-3 beschriebenen Gewichtungen und Filterkoeffizienten können erzeugt und durch einen Trainingsprozess aktualisiert werden, um die Wahrscheinlichkeit zu verbessern, dass das Vorhersagemodell 203 eine korrekte Entscheidung erzeugt. Unter Bezugnahme auf die Beispiele der 2-3 kann das Vorhersagemodul 203 auf Grundlage eines Satzes von Trainingsbildern trainiert werden. Die Trainingsbilder können Bilder von unterschiedlichen Pandas, Bilder von anderen Tieren und anderen Artefakten usw. beinhalten. Das Vorhersagemodell 203 kann diese Bilder verarbeiten und unterschiedliche Ausgabevektoren erzeugen. Die Gewichtungen in den Schichten des neuronalen Netzwerks des Vorhersagemodells 203 können aktualisiert werden, um die Anzahl korrekter Entscheidungen (z. B. Erfassung eines Pandas in Trainingsbildern, die einen Panda enthalten, Nichterfassung eines Pandas in Trainingsbildern, die keinen Panda enthalten usw.) durch das Vorhersagemodell 203 zu maximieren.
-
4 veranschaulicht ein Beispiel eines Trainingsprozesses 400, um ein neuronales Netzwerk zu trainieren, welches das neuronale Netzwerk des Vorhersagemodells 203 beinhalten kann. Ein Trainingsprozess kann zum Beispiel von einem Hardwarebeschleuniger für ein neuronales Netzwerk, der das neuronale Netzwerk umsetzt, einem Allzweck-Hardwareprozessor oder anderen geeigneten Computersystemen durchgeführt werden, welche die arithmetischen Vorgänge unterstützen, die an der Verarbeitung eines neuronalen Netzwerks wie vorstehend beschrieben beteiligt sind. Das Training kann auf einem Gradientenabstiegsschema basieren, das Vorwärtspropagationsvorgänge, Verlustgradientenvorgänge und Rückwärtspropagationsvorgänge beinhaltet. Insbesondere kann, wie in 4 gezeigt, ein Vorwärtspropagationsvorgang für jede Schicht des neuronalen Netzwerks ausgeführt werden, wie etwa ein Vorwärtspropagationsvorgang 402a für die unterste Schicht 1 (die der Eingabeschicht 207 von 2 entsprechen kann), ein Vorwärtspropagationsvorgang 402a für die Schicht 2 (die der Schicht 209 von 2 entsprechen kann), einem Vorwärtspropagationsvorgang 402n für die höchste Schicht n (die der Schicht 211 von 2 entsprechen kann) usw. Ein Vorwärtspropagationsvorgang in einer Schicht des neuronalen Netzwerks kann die Multiplikations- und Summenberechnungen zwischen Eingabedaten und einem Satz von Gewichtungen für diese Schicht, gefolgt von einer Aktivierungsfunktionsverarbeitung beinhalten, wie vorstehend in den Gleichungen 1 und 2 beschrieben, um Ausgabedaten zu erzeugen. Die Ausgabedaten können sich dann als Eingabe für den Vorwärtspropagationsvorgang auf dieser Schicht auf die nächste Schicht des neuronalen Netzwerks propagieren. Zum Beispiel kann, wie in 4 gezeigt, der Vorwärtspropagationsvorgang 402a Trainingseingabedaten mit W1-Gewichtungen von Schicht 1 kombinieren, um Ausgabedaten outl zu erzeugen, die sich als Eingabe auf Schicht 2 propagieren. Der Vorwärtspropagationsvorgang 402b kann Daten outl mit W2-Gewichtungen der Schicht 2 kombinieren, um Ausgabedaten out2 zu erzeugen, die sich dann zur nächsten Schicht propagieren können. Bei der höchsten Schicht n empfängt der Vorwärtspropagationsvorgang 402n Daten outn-1 von der Schicht n-1 (in 4 nicht gezeigt), kombiniert mit Wn-Gewichtungen der Schicht n und erzeugt Ausgabedaten outn.
-
Ein Verlustgradientenvorgang 404 kann die Ausgabedaten outn der Schicht n mit den Referenzausgabedaten refoutn vergleichen, um Eingabedatengradienten din zu erzeugen. Die Eingabedatengradienten din können einen Unterschiedsgrad zwischen outn und refoutn im Hinblick auf jedes Datenelement der Ausgabedaten outn messen. In einigen Beispielen besteht ein Ziel des Trainings darin, den Unterschied zwischen outn und refoutn derartig zu minimieren, dass die Eingabedatengradienten din nahe Null werden.
-
Nach der Erzeugung der Eingabedatengradienten din durch den Verlustgradientenvorgang 404 kann ein Rückwärtspropagationsvorgang 406 für jede Schicht des neuronalen Netzwerks durchgeführt werden. Zum Beispiel kann ein Rückwärtspropagationsvorgang 406n auf der höchsten Schicht n ausgeführt werden, ein Rückwärtspropagationsvorgang 406b kann auf der Schicht 2 durchgeführt werden, ein Rückwärtspropagationsvorgang 406a kann auf der Schicht 1 durchgeführt werden. Ein Rückwärtspropagationsvorgang auf einer Schicht des neuronalen Netzwerks kann auf Grundlage der Gewichtungen dieser Schicht des neuronalen Netzwerks, der Datengradienteneingabe in diese Schicht des neuronalen Netzwerks sowie der Eingabe in den Vorwärtspropagationsvorgang dieser Schicht durchgeführt werden. Zum Beispiel kann für die Schicht n der Rückwärtspropagationsvorgang 406n als Eingaben Gewichtungen wn, Eingabedaten outn-1 (von dem Vorwärtspropagationsvorgang bei der Schicht n-1 des neuronalen Netzwerks) und den Eingabedatengradienten din empfangen. Der Rückwärtspropagationsvorgang kann Multiplikations- und Summenberechnungen ähnlich denen von Gleichung 1 an der Eingabe durchführen, um Ausgabedatengradienten (dn-1, d2, dl usw. in 4) und Gewichtungsgradienten wgrad (dwn, dw2, dw1 usw. in 4) zu erzeugen. Die Ausgabedatengradienten können als Eingaben für den Rückwärtspropagationsvorgang in dieser Schicht an die nächstniedrigere Schicht des neuronalen Netzwerks weitergeleitet werden, wohingegen die Gewichtungsgradienten Änderungen darstellen können, die auf Gewichtungen in einer Schicht des neuronalen Netzwerks angewendet werden sollen. Die Gewichtungen auf Schicht n können durch einen Aktualisierungsvorgang 408 (z. B. der Aktualisierungsvorgang 408n für Schicht n) auf Grundlage der Gewichtungsgradienten dwn auf Grundlage der folgenden Gleichung aktualisiert werden:
-
-
In Gleichung 4 kann sich wn' auf die aktualisierten Gewichtungen wn beziehen, wohingegen α einen Satz von vorbestimmten Konstanten beinhalten kann.
-
Die durch die Schicht n erzeugten Ausgabedatengradienten dn-1 können sich dann als Eingabe für den Rückwärtspropagationsvorgang auf dieser Schicht auf die nächstniedrige Schicht n-1 des neuronalen Netzwerks propagieren. Der Rückwärtspropagationsvorgang 402b der Schicht 2 kann mit Datengradienten d2, Gewichtungen w2 und Eingabedaten out1 arbeiten, um Ausgabedatengradienten dl sowie Gewichtungsgradienten dw2 zu erzeugen. Gewichtungsgradienten dw2 können durch den Aktualisierungsvorgang 408b verwendet werden, um w2-Gewichtungen auf Grundlage der Gleichung 4 zu aktualisieren. Datengradienten dl können sich auf Schicht 1 propagieren. Der Rückwärtspropagationsvorgang 402a von Schicht 1 kann mit Datengradienten d2, Gewichtungen w1 und Trainingseingabedaten arbeiten, um die Gewichtungsgradienten dw1 zu erzeugen. Die Gewichtungsgradienten dw1 können durch den Aktualisierungsvorgang 408a verwendet werden, um wl-Gewichtungen auf Grundlage der Gleichung 4 zu aktualisieren.
-
Ein Trainingsprozess schließt typischerweise das Versorgen des neuronalen Netzwerks mit mehreren Sätzen von Trainingseingabedaten ein, um derartig unterschiedliche Betriebsbedingungen abzudecken, dass das neuronale Netzwerk trainiert werden kann, um eine korrekte Entscheidung unter diesen unterschiedlichen Betriebsbedingungen bereitzustellen. Aufgrund begrenzter Rechenressourcen fehlt dem Computersystem (z. B. einem Hardwarebeschleuniger für neuronale Netzwerke) typischerweise die Fähigkeit, alle Trainingseingabedatensätze gleichzeitig zu verwenden, um das Training durchzuführen. Stattdessen können die Trainingseingabedaten in mehrere Abschnitte aufgeteilt werden. Das Computersystem kann den Trainingsprozess aufeinanderfolgend in Paketen ausführen, wobei jedes Paket mit einem Abschnitt der Trainingseingabedaten arbeitet.
-
Ein Trainingsprozess, der auf einem einzelnen Computersystem durchgeführt wird, kann aufgrund der aufeinanderfolgenden Art des Trainingsprozesses sehr zeitaufwändig sein. Insbesondere wird, wie vorstehend beschrieben, in einem Trainingsprozess zuerst eine Vorwärtspropagation auf jeder Schicht des neuronalen Netzwerks durchgeführt, um einen Trainingsausgabedatensatz zu berechnen, und dann wird auf jeder Schicht des neuronalen Netzwerks eine Rückwärtspropagation durchgeführt, um die Gewichtungsgradienten zu berechnen, was dann von dem Aktualisieren der Gewichtungen auf jeder Schicht des neuronalen Netzwerks gefolgt ist. Da die Rückwärtspropagationsvorgänge von den Vorwärtspropagationsvorgängen abhängig sind, können die beiden Sätze von Vorgängen nicht parallel ausgeführt werden. Darüber hinaus müssen, aufgrund der Datenabhängigkeit zwischen den Schichten des neuronalen Netzwerks, die Vorwärtspropagationsvorgänge und die Rückwärtspropagationsvorgänge außerdem für jede Schicht des neuronalen Netzwerks nacheinander durchgeführt werden. Das Fehlen von Parallelität kann die Trainingszeit drastisch verlängern, die weiter erhöht wird, wenn mehrere Pakete des Trainingsprozesses für unterschiedliche Abschnitte des Trainingseingabedatensatzes ausgeführt werden und die Pakete in mehreren Durchläufen wiederholt werden, um zu minimalen Datengradienten zusammenzulaufen.
-
Eine Möglichkeit, um einen Trainingsprozess zu beschleunigen, besteht in der Verwendung eines verteilten Systems, um den Trainingsprozess auf mehrere Rechenvorrichtungen zu verteilten, von denen jede als ein Verarbeitungsknoten konfiguriert sein kann. Das Verteilen des Trainingsprozesses auf mehrere Verarbeitungsknoten kann die Menge der an jedem Verarbeitungsknoten zu verarbeiteten Trainingseingabedaten verringern, was die Zeiten für den Abschluss der Vorwärts- und Rückwärtspropagationsvorgänge verringern und den Trainingsprozess beschleunigen kann. Da zum Beispiel das Volumen der von jedem Verarbeitungsknoten verarbeiteten Trainingsdaten verringert wurde, können die Dauern des Vorwärtspropagationsvorgangs und des Rückwärtspropagationsvorgangs kürzer sein.
-
5 veranschaulicht ein verteiltes System, das gemäß einigen Umsetzungen einen Trainingsprozess für ein neuronales Netzwerk durchführen kann. Wie in 5 gezeigt, kann das verteilte System eine Anzahl von Rechenvorrichtungen 504-1, 504-2, ... bis 504-n usw. beinhalten. Jede Rechenvorrichtung kann eine Kommunikationsschnittstelle beinhalten, um über ein Computernetzwerk 506 miteinander zu kommunizieren. Jede Rechenvorrichtung kann einen Verarbeitungsknoten darstellen und Rechenressourcen beinhalten, um die Vorgänge eines Trainingsprozesses auszuführen, was Vorwärtspropagationsvorgänge, Rückwärtspropagationsvorgänge, Aktualisierungsgewichtungsvorgänge usw. beinhaltet. Die Rechenressourcen können zum Beispiel Folgendes beinhalten: einen Prozessor eines neuronalen Netzwerks, einen Beschleuniger eines neuronalen Netzwerks, eine Grafikverarbeitungseinheit (GPU), ein feldprogrammierbares Gate-Array (FPGA), einen Prozessor oder Co-Prozessor, eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit - ASIC), und/oder andere geeignete Berechnungsschaltungen, welche die am Trainingsprozess beteiligten arithmetischen Vorgänge unterstützen. Jede Rechenvorrichtung kann über das Computernetzwerk 506 mit anderen Rechenvorrichtungen kommunizieren, um Gewichtungsgradienten auszutauschen, um Austauschvorgänge durchzuführen, und Aktualisierungsgewichtungsvorgänge durchführen, nachdem die Austauschvorgänge abgeschlossen sind.
-
Um die Gewichtungswerte nach jedem Durchlauf des Trainingsprozesses zu aktualisieren, werden die von jedem Verarbeitungsknoten berechneten Gewichtungsgradienten derartig mit den anderen Verarbeitungsknoten ausgetauscht, dass ein Satz von gemittelten Gewichtungsgradienten berechnet und verwendet werden kann, um die Gewichtungen des Systems zu aktualisieren. Der Austausch der Gewichtungsgradienten zwischen den Verarbeitungsknoten kann zu einem erheblichen Engpass im Trainingsprozess führen. Zum Beispiel kann in einem Fall, bei dem sich das verteilte System in einer Cloud-Infrastruktur befindet und jeder Verarbeitungsknoten durch das Senden von Netzwerkpaketen Gewichtungsgradienten miteinander austauscht, die Netzwerklatenz in Bezug auf die Zeiten für den Abschluss der Vorwärts-/Rückwärtspropagationsvorgänge erheblich sein. Folglich kann die Dauer von Austauschgewichtungsgradientenvorgängen viel länger sein als die der Vorwärtspropagationsvorgänge und Rückwärtspropagationsvorgänge. Da die Gewichtungsgradientenaustauschvorgänge mit Vorwärtspropagationsvorgängen und Rückwärtspropagationsvorgängen angeordnet werden, können die Gewichtungsgradientenaustauschvorgänge den Trainingsprozess erheblich verzögern und die Trainingszeit verlängern.
-
6 veranschaulicht das Zeitdiagramm eines Beispiels eines Trainingsprozesses, der in einem Trainingssystem eines verteilten neuronalen Netzwerks durchgeführt wird. Das Trainingssystem eines verteilten neuronalen Netzwerks kann zwei oder mehr Verarbeitungsknoten 604-1 bis 604-n beinhalten. Die Verarbeitungsknoten 604-1 bis 604-n können unter Verwendung einer beliebigen Kombination von Prozessoren eines neuronalen Netzwerks, Beschleunigern eines neuronalen Netzwerks, Grafikverarbeitungseinheiten (GPUs), feldprogrammierbaren Gate-Arrays (FPGAs), Prozessoren und/oder Vorrichtungen anwendungsspezifischer integrierter Schaltungen (application specific integrated circuit - ASIC) umgesetzt sein.
-
Um den Trainingsprozess zu beschleunigen, kann jeder der Verarbeitungsknoten 604-1 bis 604-n ein Training für eine Teilmenge der Gesamtheit des Trainingsdatensatzes parallel durchführen. Wenn der Trainingsdatensatz zum Beispiel zehntausend Bilder beinhaltet und zehn Verarbeitungsknoten vorhanden sind, kann jeder Verarbeitungsknoten mit eintausend Bildern trainieren. Obwohl der Trainingsdatensatz gleichmäßig auf die Verarbeitungsknoten aufgeteilt werden kann, können einige Systeme die Arbeitslast unterschiedlich verteilen (z. B. kann einem Verarbeitungsknoten, der schnellere Hardware aufweist, eine größere Arbeitslast zugewiesen werden).
-
Unter Bezugnahme auf 6 kann der Verarbeitungsknoten 604-1 einen ersten Durchlauf des Trainingsprozesses an einem Abschnitt der Trainingsdaten, wie etwa dem Eingabedatensatz für Paket 1-1, durchführen. Der erste Durchlauf des Trainingsprozesses kann das Durchführen einer Vorwärtspropagation 612-1 und einer Rückwärtspropagation 614-1 unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks des Verarbeitungsknotens beinhalten. Während der Vorwärtspropagation 612-1 werden von der niedrigsten Schicht des neuronalen Netzwerks zur höchsten Schicht des neuronalen Netzwerks Berechnungen an dem Eingabedatensatz für Paket 1-1 unter Verwendung eines Satzes von Gewichtungen durchgeführt, um einen Ausgabedatensatz zu erzeugen. Der Ausgabedatensatz kann mit einem Referenzausgabedatensatz verglichen werden, um die Fehlermenge zwischen der Ausgabe des Modells des neuronalen Netzwerks und der erwarteten Ausgabe zu bestimmen, wenn mit dem Eingabedatensatz für Paket 1-1 gearbeitet wird. Während der Rückwärtspropagation 614-1 wird der Fehler des Modells des neuronalen Netzwerks, das mit dem Eingabedatensatz für Paket 1-1 arbeitet, von der höchsten Schicht des neuronalen Netzwerks zurück zur niedrigsten Schicht des neuronalen Netzwerks propagiert, um einen Satz von lokalen Gewichtungsgradienten für den Verarbeitungsknoten 604-1 zu bestimmen, der den Betrag der Anpassung darstellt, der an den Gewichtungswerten jeder Schicht vorgenommen werden muss.
-
Gleichermaßen kann der Verarbeitungsknoten 604-n einen ersten Durchlauf des Trainingsprozesses an einem anderen Abschnitt der Trainingsdaten, wie etwa dem Eingabedatensatz für Paket 1-n, durchführen. Der erste Durchlauf des Trainingsprozesses an dem Verarbeitungsknoten 604-n kann das Durchführen einer Vorwärtspropagation 612-n und einer Rückwärtspropagation 614-n beinhalten. Während der Vorwärtspropagation 612-n werden Berechnungen an dem Eingabedatensatz für Paket 1-n unter Verwendung desselben Satzes von Gewichtungen wie bei dem Verarbeitungsknoten 604-1 durchgeführt, um einen Ausgabedatensatz zu erzeugen. Der Ausgabedatensatz kann mit einem Referenzausgabedatensatz verglichen werden, um die Fehlermenge zwischen der Ausgabe des Modells des neuronalen Netzwerks und der erwarteten Ausgabe zu bestimmen, wenn mit dem Eingabedatensatz für Paket 1-n gearbeitet wird. Während der Rückwärtspropagation 614-n wird der Fehler des Modells des neuronalen Netzwerks, das mit dem Eingabedatensatz für Paket 1-n arbeitet, von der höchsten Schicht des neuronalen Netzwerks zurück zur niedrigsten Schicht des neuronalen Netzwerks propagiert, um einen Satz von lokalen Gewichtungsgradienten für den Verarbeitungsknoten 604-n zu bestimmen, der den Betrag der Anpassung darstellt, der an den Gewichtungswerten jeder Schicht vorgenommen werden muss.
-
Da jeder der Verarbeitungsknoten 604-1 bis 604-n mit einem anderen Abschnitt des Trainingsdatensatzes arbeitet, kann die Fehlermenge während des ersten Durchlaufs des Trainingsprozesses zwischen den unterschiedlichen Verarbeitungsknoten variieren. Um die Genauigkeit des Modells des neuronalen Netzwerks über die unterschiedlichen Trainingsdaten hinweg zu verbessern, können die von jedem Verarbeitungsknoten berechneten lokalen Gewichtungsgradienten akkumuliert und dann gemittelt werden, um einen Satz gemittelter Gewichtungsgradienten abzuleiten. Wenn das Modell des neuronalen Netzwerks zum Beispiel zwanzig Gewichtungswerte nutzt, erzeugt der erste Durchlauf des Trainingsprozesses an jedem Verarbeitungsknoten zwanzig lokale Gewichtungsgradienten. Der erste lokale Gewichtungsgradient von jedem Verarbeitungsknoten kann addiert und durch die Anzahl der Verarbeitungsknoten geteilt werden, um einen gemittelten Gewichtungsgradienten für den ersten Gewichtungswert abzuleiten. Die Berechnung kann für jeden der zwanzig Gewichtungsgradienten durchgeführt werden, um einen Satz von zwanzig gemittelten Gewichtungsgradienten abzuleiten.
-
Die Gewichtungswerte des Modells des neuronalen Netzwerks können dann unter Verwendung des Satzes gemittelter Gewichtungsgradienten aktualisiert werden, um den nächsten Satz von Gewichtungen abzuleiten, der in dem nächsten Durchlauf des Trainingsprozesses verwendet werden soll. Zum Beispiel kann jeder Gewichtungswert durch das Multiplizieren des entsprechenden gemittelten Gewichtungsgradienten mit einem Skalar, der eine Lernrate darstellt, und das Addieren des Ergebnisses zum Gewichtungswert aktualisiert werden. Um den nächsten Satz von Gewichtungen zu erhalten, der in dem nächsten Durchlauf des Trainingsprozesses verwendet werden soll, können die Verarbeitungsknoten 604-1 einen Prozess zum Gradientenaustausch und der globalen Gewichtungsaktualisierung 616-1 durchführen, und die Verarbeitungsknoten 604-n können gleichermaßen einen Prozess zum Gradientenaustausch und der globalen Gewichtungsaktualisierung 616-n durchführen, um den nächsten Satz von Gewichtungen zu erhalten. Wie in 6 gezeigt, kann der zweite Durchlauf des Trainingsprozesses an jedem Verarbeitungsknoten möglicherweise nicht gestartet werden, bis der Verarbeitungsknoten den nächsten Satz von Gewichtungen erhalten hat.
-
Sobald der nächste Satz von Gewichtungswerten verfügbar wird, kann der Verarbeitungsknoten 604-1 einen zweiten Durchlauf des Trainingsprozesses durchführen, was die Vorwärtspropagation 622-1 und die Rückwärtspropagation 624-1 für den Eingabedatensatz für Paket 2-1 beinhaltet. In einigen Umsetzungen kann der Eingabedatensatz für Paket 2-1 derselbe wie der Eingabedatensatz für Paket 1-1 sein, wenn das System die Genauigkeit des aktualisierten Modells im Hinblick auf denselben Eingabedatensatz bewerten soll, der in dem ersten Durchlauf verwendet wurde. In einigen Umsetzungen kann der Eingabedatensatz für Paket 2-1 eine andere Teilmenge des Trainingsdatensatzes als der Eingabedatensatz für Paket 1-1 sein. Der Verarbeitungsknoten 604-n kann gleichermaßen einen zweiten Durchlauf des Trainingsprozesses durchführen, was die Vorwärtspropagation 622-n und die Rückwärtspropagation 624-n auf dem Eingabedatensatz für Paket 2-n beinhaltet, sobald der Verarbeitungsknoten 604-n den nächsten Satz von Gewichtungen aus dem Aktualisierungsprozess für globale Gewichtungen 616-n erhält. Der Trainingsprozess kann für eine beliebige Anzahl von Durchläufen wiederholt werden, bis der Fehler des Modells des neuronalen Netzwerks über den Trainingsdatensatz auf eine bestimmte Fehlerschwelle gesenkt wird oder einen minimalen Fehler erreicht.
-
Der vorstehend beschriebene Prozess zum Gradientenaustausch und globaler Gewichtungsaktualisierung kann unter Verwendung einer anderen Hardware als der Hardware durchgeführt werden, welche die Vorwärts- und Rückwärtspropagationen durchführt. Zum Beispiel kann der Prozess zum Gradientenaustausch und globaler Gewichtungsaktualisierung unter Verwendung eines Hostprozessors und einer Kommunikationsschnittstelle durchgeführt werden, wohingegen die Vorwärts- und Rückwärtspropagation unter Verwendung einer Berechnungsschaltung des neuronalen Netzwerks durchgeführt werden kann. Der Prozess zum Gradientenaustausch und globaler Gewichtungsaktualisierung kann einschließen, dass jeder Verarbeitungsknoten seinen entsprechenden Satz von lokalen Gewichtungsgradienten an einen der Verarbeitungsknoten sendet, der die lokalen Gewichtungsgradienten von den anderen Verarbeitungsknoten des Systems akkumuliert und den Durchschnitt für jeden Gewichtungsgradienten berechnet. Der Verarbeitungsknoten, der die lokalen Gewichtungsgradienten von den anderen Verarbeitungsknoten des Systems empfängt, kann jeden Gewichtungswert des Modells des neuronalen Netzwerks unter Verwendung des entsprechenden gemittelten Gewichtungsgradienten aktualisieren, um den nächsten Satz von Gewichtungen abzuleiten. Der nächste Satz von Gewichtungen kann dann von diesem Verarbeitungsknoten an die anderen Verarbeitungsknoten des Systems übertragen werden. Alternativ können die lokalen Gewichtungsgradienten von jedem Verarbeitungsknoten an die anderen Verarbeitungsknoten übertragen werden, und jeder Verarbeitungsknoten kann seinen eigenen Satz von gemittelten Gewichtungsgradienten berechnen und den Satz von Gewichtungen dementsprechend unter Verwendung der Sätze von lokalen Gewichtungsgradienten aktualisieren, die von den anderen Verarbeitungsknoten empfangen wurden.
-
Abhängig von der Anzahl der Verarbeitungsknoten im System kann das Erhalten des nächsten Satzes von Gewichtungen einen erheblichen Zeitraum in Anspruch nehmen, da das System die lokalen Gewichtungsgradienten von jedem der Verarbeitungsknoten in einem Netzwerk erfassen muss, um den nächsten Satz von Gewichtungswerten zu berechnen. Wie in 6 gezeigt, ist die Berechnungsschaltung eines neuronalen Netzwerks, welche die Vorwärts- und Rückwärtspropagationsvorgänge ausführt, während dieser Zeit inaktiv, während darauf gewartet wird, dass der nächste Satz von Gewichtungen verfügbar wird, da der nächste Durchlauf des Trainingsprozesses möglicherweise nicht gestartet wird, bis der Verarbeitungsknoten den nächsten Satz von Gewichtungen erhält.
-
Eine Möglichkeit, die Latenz des Gewichtungsaktualisierungsprozesses zu verringern, besteht darin, den Gradientenaustausch auszulösen, sobald die lokalen Gewichtungsgradienten für eine Schicht des neuronalen Netzwerks verfügbar werden. Zum Beispiel können während der Rückwärtspropagation 614-1, sobald sich der Fehler durch die höchste Schicht des neuronalen Netzwerks propagiert hat, die lokalen der höchsten Schicht des neuronalen Netzwerks zugeordneten Gewichtungsgradienten berechnet und mit den anderen Verarbeitungsknoten ausgetauscht werden. Somit muss der vom Verarbeitungsknoten 604-1 ausgeführte Prozess zum Gradientenaustausch und globaler Gewichtungsaktualisierung 616-1 nicht warten, bis die gesamte Rückwärtspropagation 614-1 abgeschlossen ist, sondern kann ausgelöst werden, sobald die lokalen Gewichtungsgradienten für die höchste Schicht des neuronalen Netzwerks verfügbar wird. Dementsprechend sind die Prozesse zum Gradientenaustausch und globaler Gewichtungsaktualisierung 616-1 und 616-n in 6 als vor Abschluss der entsprechenden Rückwärtspropagationsprozesse 614-1 und 614-n ausgelöst gezeigt. Obwohl ein frühes Starten des Gradientenaustauschs auf die vorstehend beschriebene Weise die Latenz der Aktualisierung der globalen Gewichtungen verringern kann, kann zwischen den Durchläufen des Trainingsprozesses immer noch eine erhebliche Standzeit liegen (z. B. die Standzeit zwischen der Rückwärtspropagation 614-1 und der Vorwärtspropagation 622-1).
-
7 veranschaulicht das Zeitdiagramm eines weiteren Beispiels eines Trainingsprozesses, der in einem Verarbeitungsknoten eines Trainingssystem des neuronalen Netzwerks durchgeführt wird. Der Verarbeitungsknoten 704-1 kann einer von mehreren Verarbeitungsknoten in einem Trainingssystem des neuronalen Netzwerks sein. Obwohl in 7 nur ein Verarbeitungsknoten 704-1 gezeigt ist, versteht es sich, dass die anderen Verarbeitungsknoten des Systems auf ähnliche Weise arbeiten können.
-
Der Verarbeitungsknoten 704-1 kann das Training durch das Durchführen eines ersten Durchlaufs des Trainingsprozesses an einem Abschnitt der Trainingsdaten starten, wie etwa dem Eingabedatensatz für Paket 1-1. Der erste Durchlauf des Trainingsprozesses kann das Durchführen einer Vorwärtspropagation 712-1 und einer Rückwärtspropagation 714-1 beinhalten. Während der Vorwärtspropagation 712-1 werden von der niedrigsten Schicht des neuronalen Netzwerks zur höchsten Schicht des neuronalen Netzwerks Berechnungen an dem Eingabedatensatz für Paket 1-1 unter Verwendung eines Satzes von Gewichtungen durchgeführt, um einen Ausgabedatensatz zu erzeugen. Der Ausgabedatensatz kann mit einem Referenzausgabedatensatz verglichen werden, um die Fehlermenge zwischen der Ausgabe des Modells des neuronalen Netzwerks und der erwarteten Ausgabe zu bestimmen, wenn mit dem Eingabedatensatz für Paket 1-1 gearbeitet wird. Während der Rückwärtspropagation 714-1 wird der Fehler des Modells des neuronalen Netzwerks, das mit dem Eingabedatensatz für Paket 1-1 arbeitet, von der höchsten Schicht des neuronalen Netzwerks zurück zur niedrigsten Schicht des neuronalen Netzwerks propagiert, um einen Satz von lokalen Gewichtungsgradienten für den Verarbeitungsknoten 704-1 zu bestimmen, der den Betrag der Anpassung darstellt, der an den Gewichtungswerten jeder Schicht vorgenommen werden muss.
-
Sobald die lokalen Gewichtungsgradienten für die höchste Schicht des neuronalen Netzwerks aus der Rückwärtspropagation 714-1 erzeugt werden, kann der Verarbeitungsknoten 704-1 einen lokalen Gewichtungsaktualisierungsprozess 718-1 auslösen. Der lokale Gewichtungsaktualisierungsprozess 718-1 kann einen Satz von spekulativen Gewichtungen durch das Aktualisieren des Satzes von Gewichtungen unter Verwendung des Satzes von lokalen Gewichtungsgradienten vom Verarbeitungsknoten 704-1 erzeugen, ohne die lokalen Gewichtungsgradienten von den anderen Verarbeitungsknoten des Systems zu berücksichtigen. Somit kann der lokale Gewichtungsaktualisierungsprozess 718-1 viel schneller als die globale Gewichtungsaktualisierung durchgeführt werden, da der lokale Gewichtungsaktualisierungsprozess 718-1 keine Gewichtungsgradienten mit den anderen Verarbeitungsknoten des Systems austauschen muss. Sobald der lokale Gewichtungsaktualisierungsprozess 718-1 den Satz von Gewichtungen unter Verwendung der lokalen Gewichtungsgradienten aktualisiert hat, kann der Verarbeitungsknoten 704-1 den zweiten Durchlauf des Trainingsprozesses für den Eingabedatensatz für Paket 2-1 starten (der derselbe oder anderer Datensatz als der Eingabedatensatz für Paket 1-1 sein kann). Der zweite Durchlauf des Trainingsprozesses kann das Durchführen einer Vorwärtspropagation 722-1 unter Verwendung des Satzes von spekulativen Gewichtungen, um einen Ausgabedatensatz zu erzeugen, das Vergleichen des Ausgabedatensatzes mit einem Referenzausgabedatensatz, um einen Fehler zu bestimmen, und das Durchführen einer Rückwärtspropagation 724-1 unter Verwendung des Fehlers beinhalten, um den nächsten Satz von lokalen Gewichtungsgradienten abzuleiten.
-
Parallel zum lokalen Gewichtungsaktualisierungsprozess 718-1 kann der Verarbeitungsknoten 704-1 außerdem einen Gradientenaustausch- und Gewichtungsvergleichsprozess 716-1 auslösen. Der Gradientenaustausch- und Gewichtungsvergleichsprozess 7161 kann einschließen, dass jeder Verarbeitungsknoten 704-1 seinen Satz von lokaler Gewichtungsgradienten an einen der Verarbeitungsknoten sendet, der die lokalen Gewichtungsgradienten von den Verarbeitungsknoten des Systems akkumuliert und den Durchschnitt für jeden Gewichtungsgradienten berechnet. Der Verarbeitungsknoten, der die lokalen Gewichtungsgradienten von den anderen Verarbeitungsknoten des Systems empfängt, kann jeden Gewichtungswert des Modells des neuronalen Netzwerks unter Verwendung des entsprechenden gemittelten Gewichtungsgradienten aktualisieren, um den nächsten Satz von Gewichtungen abzuleiten. Der Verarbeitungsknoten 704-1 kann dann den nächsten Satz von Gewichtungen in einer Kommunikation empfangen, die von dem Verarbeitungsknoten gesendet wird, der den nächsten Satz von Gewichtungen bestimmt hat. Alternativ kann jeder Verarbeitungsknoten 704-1 seinen Satz von lokalen Gewichtungsgradienten an die anderen Verarbeitungsknoten übertragen, und derartig einen Satz von lokalen Gewichtungsgradienten von jedem der anderen Verarbeitungsknoten empfangen, dass der Verarbeitungsknoten 704-1 seinen eigenen Satz von gemittelten Gewichtungsgradienten berechnen und den nächsten Satz von Gewichtungen dementsprechend erzeugen kann.
-
Sobald der Verarbeitungsknoten 704-1 den nächsten Satz von Gewichtungen erhalten hat (z. B. entweder durch das Empfangen des nächsten Satzes von Gewichtungen in einer Kommunikation von einem anderen Verarbeitungsknoten oder durch das Berechnen des nächsten Satzes von Gewichtungen selbst), kann der Verarbeitungsknoten 704-1 den Satz von spekulativen Gewichtungen, die aus den lokalen Gewichtungsgradienten erzeugt wurden, mit dem Satz von Gewichtungen vergleichen, die aus den gemittelten Gewichtungsgradienten erzeugt wurden, um den Unterschied zwischen den beiden Sätzen von Gewichtungen zu bestimmen. In einigen Umsetzungen kann der Unterschied der beiden Sätze von Gewichtungen zum Beispiel als Durchschnitt der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen, als Median der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen, als Maximum der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen oder des quadratischen Mittelwerts der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen usw. bestimmt werden. In anderen Umsetzungen können andere Metriken verwendet werden, um den Unterschied zwischen den beiden Sätzen von Gewichtungen zu messen.
-
Der Gradientenaustausch- und Gewichtungsvergleichsprozess 716-1 kann dann den Unterschied zwischen den beiden Sätzen von Gewichtungen mit einem Schwellenwertunterschied vergleichen, um zu bestimmen, wie nahe der Satz von spekulativen Gewichtungen an den tatsächlichen Gewichtungen liegt, die aus den gemittelten Gewichtungsgradienten berechnet wurden. Wenn der Unterschied zwischen den beiden Sätzen von Gewichtungen bei oder unter dem Schwellenwertunterschied liegt, liegen die spekulativen Gewichtungen nahe genug an den tatsächlichen Gewichtungen, und der Trainingsprozess kann mit dem Verwenden der Ergebnisse fortfahren, die aus der Durchführung des zweiten Durchlaufs des Trainingsprozesses mit dem Satz von spekulativen Gewichtungen erhalten wurden. Mit anderen Worten kann der Verarbeitungsknoten 704-1 das Modell des neuronalen Netzwerks mit den Ergebnissen weiter trainieren, die aus der Verwendung des Satzes von spekulativen Gewichtungen in der Vorwärtspropagation 722-1 und der Rückwärtspropagation 724-1 erhalten wurden, und mit weiteren Durchläufen des Trainingsprozesses fortfahren.
-
Wie in 7 gezeigt, kann der Trainingsprozess durch das Durchführen einer lokalen Gewichtungsaktualisierung 728-1 unter Verwendung des Satzes lokaler Gewichtungsgradienten fortgesetzt werden, die aus der Rückwärtspropagation 724-1 bestimmt wurden, um das Auslösen des dritten Durchlaufs des Trainingsprozesses für den Eingabedatensatz für Paket 3-1 zu ermöglichen, während darauf gewartet wird, dass der nächste Satz von Gewichtungen aus dem Gradientenaustausch- und Gewichtungsvergleichsprozess 726-1 verfügbar wird. Der Trainingsprozess kann für eine beliebige Anzahl von Durchläufen wiederholt werden, bis der Fehler des Modells des neuronalen Netzwerks über den Trainingsdatensatz auf eine bestimmte Fehlerschwelle gesenkt wird oder einen minimalen Fehler erreicht.
-
Wie durch das Vergleichen von 7 mit 6 ersichtlich ist, kann das Ermöglichen, dass der Trainingsprozess mit dem Verwenden der spekulativen Gewichtungen fortfährt, die aus dem eigenen Satz von lokalen Gewichtungsgradienten des Verarbeitungsknotens abgeleitet sind, die Standzeit der Berechnungsschaltung für das neuronale Netzwerk zwischen der Rückwärtspropagation eines vorherigen Durchlaufs und der Vorwärtspropagation des nächsten Durchlaufs verringern. Nachfolgende Trainingsdurchläufe können ausgelöst werden, ohne auf den Abschluss des Prozesses des Gradientenaustauschs und globaler Gewichtungsaktualisierung zu warten. Dies kann den Gesamtdurchsatz des Systems verbessern und das Training über den gesamten Trainingsdatensatz kann schneller abgeschlossen werden.
-
8 veranschaulicht das Zeitdiagramm eines weiteren Beispiels eines Trainingsprozesses, der in einem Verarbeitungsknoten eines Trainingssystem des neuronalen Netzwerks durchgeführt wird. Der Anfangsabschnitt des Trainingsprozesses, der in 8 gezeigt ist, ist ähnlich zu 7, und somit muss eine Beschreibung desselben nicht wiederholt werden. Der in 8 gezeigte Trainingsprozess unterscheidet sich von dem in 7 in den Ergebnissen des Gradientenaustausch- und Gewichtungsvergleichsprozesses 826-1.
-
In dem in 8 gezeigten Trainingsprozess wird bestimmt, dass der Unterschied zwischen: (1) dem Satz von spekulativen Gewichtungen, die aus dem eigenen Satz von lokalen Gewichtungsgradienten des Verarbeitungsknotens 804-1 abgeleitet wurden, der während der Rückwärtspropagation 824-1 erhalten wurde, und (2) dem Satz von Gewichtungen, die aus dem Gradientenaustauschprozess 826-1 (der aus gemittelten Gewichtungsgradienten über die Verarbeitungsknoten des Systems abgeleitet wird) erhalten wurden, einen Schwellenwertunterschied überschreitet. In diesem Szenario sind die spekulativen Gewichtungen möglicherweise zu weit von den tatsächlichen Gewichtungen entfernt, die der nächste Durchlauf des Trainingsprozesses verwenden soll. Demzufolge wird, anstatt den Trainingsprozess mit den Ergebnissen fortzusetzen, die aus Berechnungen erhalten wurden, die für den Eingabedatensatz für Batch 3-1 unter Verwendung des Satzes von spekulativen Gewichtungen durchgeführt wurden, der Durchlauf des Trainingsprozesses für den Eingabedatensatz für Batch 3-1 mit dem Satz von Gewichtungen neu gestartet, die aus dem Gradientenaustauschprozess 826-1 erhalten wurden. Somit kann, wie in 8 gezeigt, der Verarbeitungsknoten 804-1 die Vorwärtspropagation 832-1a unter Verwendung des Satzes von spekulativen Gewichtungen beenden und diesen Trainingsdurchlauf durch das Wiederholen der Berechnungen mit der Vorwärtspropagation 832-1b unter Verwendung des Satzes von Gewichtungen neu startenn, die aus dem Gradientenaustauschprozess 826-1 erhalten wurden.
-
Obwohl das Neustarten eines Durchlaufs des Trainingsprozesses zu einer gewissen Latenz im Trainingsprozess führen kann, wird nicht erwartet, dass die Latenz, die dem Neustart eines Trainingsdurchlaufs zugeschrieben wird, wesentlich höher ist als die Latenz beim Warten auf den nächsten Satz von Gewichtungen, die vom Gradientenaustauschprozess verfügbar werden. Darüber hinaus wird erwartet, dass die Anzahl der Fälle, in denen ein Trainingsdurchlauf neu gestartet werden muss, geringer ist als die Anzahl der Fälle, in denen die spekulativen Gewichtungen akzeptabel sind. Dementsprechend kann die Verwendung spekulativer Gewichtungen, um die Standzeit im System zu verringern, trotz der wenigen potenziellen Gelegenheiten, einen Trainingsdurchlauf wiederholen zu müssen, die Gesamttrainingszeit des neuronalen Netzwerks immer noch verbessern.
-
In einigen Umsetzungen ist es möglich, dass jeder Verarbeitungsknoten mit einem anderen Gewichtungssatz endet, wenn der Trainingsprozess fortfährt, da jeder Verarbeitungsknoten des Systems mit dem Aktualisieren des Satzes von Gewichtungen unter Verwendung seiner eigenen lokalen Gewichtungsgradienten anstelle der gemittelten Gewichtungsgradienten über alle Verarbeitungsknoten fortfahren kann. Obwohl erwartet wird, dass die Unterschiede zwischen den unterschiedlichen Sätzen von Gewichtungen in den Verarbeitungsknoten gering sind (z. B. innerhalb des Schwellenwertunterschieds), kann das System die Wahrscheinlichkeit der Konvergenz durch das Durchführen eines Gewichtungssynchronisationsprozess nach einer vorbestimmten Anzahl von Durchläufen des Trainingsprozesses verbessern, um die Gewichtungswerte über alle Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks zu synchronisieren. Zum Beispiel kann der Gewichtungssynchronisationsprozess nach zehn Durchläufen des Trainingsprozesses durchgeführt werden. Der Gewichtungssynchronisationsprozess kann den Satz von Gewichtungen in jedem Verarbeitungsknoten auf den Satz von Gewichtungen aktualisieren, der auf Grundlage gemittelten Gewichtungsgradienten für den letzten Trainingsdurchlauf abgeleitet wurde. Auf diese Weise kann das System sicherstellen, dass jeder der Verarbeitungsknoten während des Trainingsprozesses zu einem einheitlichen Satz von Gewichtungen zurückkehrt.
-
9 veranschaulicht ein Ablaufdiagramm eines Beispiels eines Trainingsprozesses 900, der in einem Trainingssystem des neuronalen Netzwerks durchgeführt werden kann, das mehrere Verarbeitungsknoten aufweist, gemäß einiger Umsetzungen. Der Prozess 900 kann in einem beliebigen oder mehreren der Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks ausgeführt werden. In einigen Umsetzungen kann jeder Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks eine Berechnungsschaltung des neuronalen Netzwerks unter Verwendung eines Prozessors des neuronalen Netzwerks, eines Beschleunigers des neuronalen Netzwerks, einer Grafikverarbeitungseinheit (GPU), eines feldprogrammierbaren Gate-Arrays (FPGA) und eines Co-Prozessors oder einer anwendungsspezifischen integrierten Schaltung (ASIC) umsetzen, um Berechnungen des neuronalen Netzwerks durchzuführen, wie etwa Matrixmultiplikation oder Punktprodukte. In einigen Umsetzungen kann jeder Verarbeitungsknoten eine Rechenvorrichtung sein, die eine oder mehrere dieser Komponenten einbezieht, um Berechnungen des neuronalen Netzwerks durchzuführen. Die Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks können unter Verwendung von Chip- oder Systemverbindungen, über ein Netzwerk oder eine Kombination davon kommunikativ aneinander gekoppelt sein. Darüber hinaus muss nicht jeder Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks dieselbe Art von Hardware verwenden, um die Berechnungen des neuronalen Netzwerks durchzuführen. Zum Beispiel kann ein Trainingssystem des neuronalen Netzwerks eine GPU beinhalten, um Berechnungen für einen Verarbeitungsknoten und ein FPGA durchzuführen, um Berechnungen für einen anderen Verarbeitungsknoten usw. durchzuführen.
-
Der Prozess 900 kann bei Block 902 damit beginnen, dass ein Verarbeitungsknoten einen ersten Durchlauf eines Trainingsprozesses unter Verwendung eines ersten Satzes von Gewichtungen durchführt, um einen ersten Ausgabedatensatz zu erzeugen. Der Eingabedatensatz, der verwendet wurde, um den ersten Ausgabedatensatz zu erzeugen, kann eine Teilmenge oder ein Abschnitt des vollständigen Trainingsdatensatzes sein. Der erste Durchlauf des Trainingsprozesses kann einen Vorwärtspropagationsprozess beinhalten, bei dem Berechnungen, die an dem Eingabedatensatz durchgeführt werden, von der untersten Schicht des Modells des neuronalen Netzwerks zur höchsten Schicht des Modells des neuronalen Netzwerks propagiert werden, um den ersten Ausgabedatensatz zu erzeugen. Der erste Ausgabedatensatz kann mit einem Referenzausgabedatensatz (z. B. der erwarteten Ausgabe) verglichen werden, um den Fehler des Modells des neuronalen Netzwerks in diesem bestimmten Eingabedatensatz zu bestimmen. Der erste Durchlauf des Trainingsprozesses kann außerdem einen Rückwärtspropagationsprozess beinhalten, bei dem der Fehler von der höchsten Schicht des Modells des neuronalen Netzwerks zurück zur niedrigsten Schicht propagiert wird, um zu bestimmen, wie die Gewichtungswerte in jeder Schicht angepasst werden sollten, um die Genauigkeit des Modells des neuronalen Netzwerks zu verbessern.
-
Bei Block 904 kann ein Satz von lokalen Gewichtungsgradienten durch den Verarbeitungsknoten auf Grundlage eines Vergleichs des ersten Ausgabedatensatzes und eines Referenzausgabedatensatzes während des Rückwärtspropagationsprozesses abgeleitet werden. Der Satz von lokalen Gewichtungsgradienten kann einen Gewichtungsgradienten für jeden der Gewichtungswerte im Modell des neuronalen Netzwerks beinhalten. Jeder Gewichtungsgradient kann als teilweise Ableitung der Kostenfunktion des Modells (z. B. die Summe der quadratischen Fehler, der Mittelwert der quadratischen Fehler usw.) im Hinblick auf die entsprechende Gewichtung dargestellt werden.
-
Bei Block 906 kann der erste Satz von Gewichtungen, der in dem ersten Durchlaufs des Trainingsprozesses verwendet wird, unter Verwendung des Satzes von lokalen Gewichtungsgradienten des in Block 904 erhaltenen Verarbeitungsknotens aktualisiert werden, um einen Satz von spekulativen Gewichtungen für den Verarbeitungsknoten abzuleiten. Zum Beispiel kann jeder spekulative Gewichtungswert durch das Multiplizieren des entsprechenden lokalen Gewichtungsgradienten mit einem Skalar, der die Lernrate darstellt, und das Addieren des Ergebnisses zu dem entsprechenden Gewichtungswert in dem ersten Satz von Gewichtungen abgeleitet werden. Die in Block 906 durchgeführte Gewichtungsaktualisierung kann lokal am Verarbeitungsknoten durchgeführt werden und muss die lokalen Gewichtungsgradienten von den anderen Verarbeitungsknoten des Systems nicht berücksichtigen. Somit kann die Aktualisierung bei Block 906 viel schneller durchgeführt werden als darauf zu warten, dass der Abschluss eines Gradientenaustauschprozesses zwischen den Verarbeitungsknoten abgeschlossen ist.
-
In Block 908 wird ein zweiter Durchlauf des Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks mit dem Satz von spekulativen Gewichtungen durchgeführt, um einen zweiten Ausgabedatensatz zu erzeugen, während darauf gewartet wird, einen zweiten Satz von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses zu erhalten. Ähnlich wie bei dem ersten Durchlauf des Trainingsprozesses kann der zweite Durchlauf einen Vorwärtspropagationsprozess und einen Rückwärtspropagationsprozess beinhalten. Der Eingabedatensatz, mit dem der zweite Durchlauf arbeitet, kann derselbe wie oder ein anderer als der im ersten Durchlauf verwendete Eingabedatensatz sein. Anders als die spekulativen Gewichtungen, die nur die lokalen Gewichtungsgradienten des Verarbeitungsknotens selbst berücksichtigten, berücksichtigt der zweite Satz von Gewichtungen die lokalen Gewichtungsgradienten von allen Verarbeitungsknoten des Systems und wird aus dem Satz der gemittelten Gewichtungsgradienten abgeleitet, die über die Sätze der lokalen Gewichtungsgradienten berechnet wurden, die von den Verarbeitungsknoten des Systems erzeugt wurden. Durch das Auslösen des zweiten Durchlaufs des Trainingsprozesses mit dem Satz von spekulativen Gewichtungen anstelle des zweiten Satzes von Gewichtungen kann die Standzeit zwischen den Trainingsdurchläufen verringert werden, da der Satz von spekulativen Gewichtungen schneller berechnet werden kann als die Zeit, die das System benötigt, um einen Gradientenaustauschprozess durchzuführen, um den zweiten Satz von Gewichtungen zu erhalten.
-
10 veranschaulicht ein Ablaufdiagramm eines weiteren Beispiels eines Trainingsprozesses 1000, der in einem Trainingssystem des neuronalen Netzwerks durchgeführt werden kann, das mehrere Verarbeitungsknoten aufweist, gemäß einiger Umsetzungen. Der Prozess 1000 kann in jedem der Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks ausgeführt werden. In einigen Umsetzungen kann jeder Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks eine Berechnungsschaltung des neuronalen Netzwerks unter Verwendung eines Prozessors des neuronalen Netzwerks, eines Beschleunigers des neuronalen Netzwerks, einer Grafikverarbeitungseinheit (GPU), eines feldprogrammierbaren Gate-Arrays (FPGA) und eines Co-Prozessors oder einer anwendungsspezifischen integrierten Schaltung (ASIC) umsetzen, um Berechnungen des neuronalen Netzwerks durchzuführen, wie etwa Matrixmultiplikation oder Punktprodukte. In einigen Umsetzungen kann jeder Verarbeitungsknoten eine Rechenvorrichtung sein, die eine oder mehrere dieser Komponenten einbezieht, um Berechnungen des neuronalen Netzwerks durchzuführen. Die Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks können unter Verwendung von Chip- oder Systemverbindungen, über ein Netzwerk oder eine Kombination davon kommunikativ aneinander gekoppelt sein. Darüber hinaus muss nicht jeder Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks dieselbe Art von Hardware verwenden, um die Berechnungen des neuronalen Netzwerks durchzuführen. Zum Beispiel kann ein Trainingssystem des neuronalen Netzwerks eine GPU beinhalten, um Berechnungen für einen Verarbeitungsknoten und ein FPGA durchzuführen, um Berechnungen für einen anderen Verarbeitungsknoten usw. durchzuführen.
-
Der Prozess 1000 kann bei Block 1002 mit dem Durchführen eines ersten Durchlaufs eines Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks des Verarbeitungsknotens mit einem ersten Satz von Gewichtungen beginnen, um einen ersten Ausgabedatensatz aus einem dem Verarbeitungsknoten zugeordneten Eingabedatensatz zu erzeugen. Der dem Verarbeitungsknoten zugeordnete Eingabedatensatz kann eine Teilmenge oder ein Abschnitt des vollständigen Trainingsdatensatzes sein. Mit anderen Worten kann der vollständige Trainingsdatensatz derartig in Pakete unterteilt sein, dass jeder Verarbeitungsknoten des Systems mit einer anderen Teilmenge der Trainingsdaten arbeiten kann, um den Trainingsprozess zu beschleunigen. Der erste Durchlauf des Trainingsprozesses kann einen Vorwärtspropagationsprozess beinhalten, bei dem Berechnungen, die an dem Eingabedatensatz durchgeführt werden, von der untersten Schicht des Modells des neuronalen Netzwerks zur höchsten Schicht des Modells des neuronalen Netzwerks propagiert werden, um den ersten Ausgabedatensatz zu erzeugen. Der erste Ausgabedatensatz kann mit einem Referenzausgabedatensatz (z. B. der erwarteten Ausgabe) verglichen werden, um den Fehler des Modells des neuronalen Netzwerks in diesem bestimmten Eingabedatensatz zu bestimmen. Der erste Durchlauf des Trainingsprozesses kann außerdem einen Rückwärtspropagationsprozess beinhalten, bei dem der Fehler von der höchsten Schicht des Modells des neuronalen Netzwerks zurück zur niedrigsten Schicht propagiert wird, um zu bestimmen, wie die Gewichtungswerte in jeder Schicht angepasst werden sollten, um die Genauigkeit des Modells des neuronalen Netzwerks zu verbessern.
-
Bei Block 1004 kann ein Satz von lokalen Gewichtungsgradienten für den Verarbeitungsknoten auf Grundlage eines Vergleichs des ersten Ausgabedatensatzes und des Referenzausgabedatensatzes während des Rückwärtspropagationsprozesses abgeleitet werden. Der Satz von lokalen Gewichtungsgradienten kann einen Gewichtungsgradienten für jeden der Gewichtungswerte im Modell des neuronalen Netzwerks beinhalten. Jeder Gewichtungsgradient kann als teilweise Ableitung der Kostenfunktion des Modells (z. B. die Summe der quadratischen Fehler, der Mittelwert der quadratischen Fehler usw.) im Hinblick auf die entsprechende Gewichtung dargestellt werden.
-
Bei Block 1006 kann der erste Satz von Gewichtungen, der in dem ersten Durchlaufs des Trainingsprozesses verwendet wird, unter Verwendung des Satzes von lokalen Gewichtungsgradienten des in Block 1004 erhaltenen Verarbeitungsknotens aktualisiert werden, um einen Satz von spekulativen Gewichtungen für den Verarbeitungsknoten abzuleiten. Zum Beispiel kann jeder spekulative Gewichtungswert durch das Multiplizieren des entsprechenden lokalen Gewichtungsgradienten mit einem Skalar, der die Lernrate darstellt, und das Addieren des Ergebnisses zu dem entsprechenden Gewichtungswert in dem ersten Satz von Gewichtungen abgeleitet werden. Diese in Block 1006 durchgeführte Gewichtungsaktualisierung kann lokal durchgeführt werden und muss die lokalen Gewichtungsgradienten von den anderen Verarbeitungsknoten des Systems nicht berücksichtigen. Somit kann die Aktualisierung bei Block 1006 viel schneller durchgeführt werden als darauf zu warten, dass der Abschluss eines Gradientenaustauschprozesses zwischen den Verarbeitungsknoten abgeschlossen ist.
-
In Block 1008 wird ein zweiter Durchlauf des Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks mit dem Satz von spekulativen Gewichtungen durchgeführt, um einen zweiten Ausgabedatensatz zu erzeugen. Ähnlich wie bei dem ersten Durchlauf des Trainingsprozesses kann der zweite Durchlauf einen Vorwärtspropagationsprozess und einen Rückwärtspropagationsprozess beinhalten. Der Eingabedatensatz, mit dem der zweite Durchlauf arbeitet, kann derselbe wie oder ein anderer als der im ersten Durchlauf verwendete Eingabedatensatz sein.
-
Bei Block 1010 wird ein zweiter Satz von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses erhalten. Der zweite Satz von Gewichtungen kann durch das Empfangen einer Kommunikation, die den zweiten Satz von Gewichtungen von einem anderen Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks enthält, oder durch das Berechnen des zweiten Satzes von Gewichtungen durch den Verarbeitungsknoten selbst erhalten werden. Dieser zweite Satz von Gewichtungen wird aus dem Satz von gemittelten Gewichtungsgradienten abgeleitet, die über die Sätze von lokalen Gewichtungsgradienten berechnet werden, die von den Verarbeitungsknoten des Systems erzeugt wurden. Somit berücksichtigt dieser zweite Satz von Gewichtungen, anders als die spekulativen Gewichtungen, die nur die lokalen Gewichtungsgradienten des Verarbeitungsknotens selbst berücksichtigten, die lokalen Gewichtungsgradienten von allen Verarbeitungsknoten des Systems. Es ist anzumerken, dass Block 1010 gleichzeitig mit den Blöcken 1006 und 1008 durchgeführt werden kann und dass der zweite Durchlauf des Trainingsprozesses in Block 1008 durchgeführt werden kann, während darauf gewartet wird, dass der zweite Satz von Gewichtungen im Trainingssystem des neuronalen Netzwerks verfügbar wird.
-
In einigen Umsetzungen kann einer der Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks dazu konfiguriert sein, den zweiten Satz von Gewichtungen zu berechnen und den zweiten Satz von Gewichtungen an andere Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks zu übertragen. Zum Beispiel kann ein Gradientenaustauschprozess durchgeführt werden, bei dem jeder Verarbeitungsknoten seine lokalen Gewichtungsgradienten an den angegebenen Verarbeitungsknoten sendet. Der bezeichnete Verarbeitungsknoten kann die Sätze von lokalen Gewichtungsgradienten akkumulieren (wobei jeder Satz von einem entsprechenden Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks abgeleitet ist), die Sätze von lokalen Gewichtungsgradienten mitteln, um einen Satz von gemittelten Gewichtungsgradienten abzuleiten, und den ersten Satz von Gewichtungen unter Verwendung des Satzes von gemittelten Gewichtungsgradienten aktualisieren, um den zweiten Satz von Gewichtungen zu erzeugen. Jeder der gemittelten Gewichtungsgradienten kann durch das Addieren des entsprechenden lokalen Gewichtungsgradienten von jedem Verarbeitungsknoten und das Teilen der Summe durch die Anzahl von Verarbeitungsknoten berechnet werden, um den gemittelten Gewichtungsgradienten für den entsprechenden Gewichtungswert abzuleiten.
-
In einigen Umsetzungen kann jeder der Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks dazu konfiguriert sein, den zweiten Satz von Gewichtungen zu berechnen. Zum Beispiel kann ein Gradientenaustauschprozess durchgeführt werden, bei dem jeder Verarbeitungsknoten seinen Satz von lokalen Gewichtungsgradienten an die anderen Verarbeitungsknoten des Systems überträgt, und jeder Verarbeitungsknoten des Systems kann dann den Satz von gemittelten Gewichtungsgradienten unter Verwendung des lokalen Gewichtungsgradienten berechnen, die von den anderen Verarbeitungsknoten (z. B. wie vorstehend beschrieben) empfangen wurden, und dementsprechend den ersten Satz von Gewichtungen aktualisieren.
-
Bei Block 1012 wird der zweite Satz von Gewichtungen, der aus dem Satz von gemittelten Gewichtungsgradienten abgeleitet ist, mit dem Satz von spekulativen Gewichtungen des Verarbeitungsknotens verglichen, um einen Unterschied zwischen den zwei Sätzen von Gewichtungen zu bestimmen. In einigen Umsetzungen kann der Unterschied zwischen den beiden Sätzen von Gewichtungen zum Beispiel als Durchschnitt der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen, als Median der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen, als Maximum der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen oder des quadratischen Mittelwerts der Unterschiede zwischen entsprechenden Gewichtungswerten aus den beiden Sätzen usw. bestimmt werden. In anderen Umsetzungen können andere Metriken verwendet werden, um den Unterschied zwischen den beiden Sätzen von Gewichtungen zu bestimmen. Dieser Unterschied liefert ein Maß dafür, wie nah oder wie weit der Satz von spekulativen Gewichtungen von den Gewichtungen entfernt ist, die unter Verwendung der gemittelten Gewichtungsgradienten berechnet wurden.
-
Bei Block 1014 wird der Unterschied zwischen dem zweiten Satz von Gewichtungen, der aus dem Satz von gemittelten Gewichtungsgradienten abgeleitet ist, und dem Satz von spekulativen Gewichtungen des Verarbeitungsknotens mit einem Schwellenwertunterschied verglichen. Der Schwellenwertunterschied kann zum Beispiel auf Grundlage der Genauigkeitstoleranz des Systems ausgewählt werden. Zum Beispiel kann der Schwellenwertunterschied in Systemen, die eine höhere Ungenauigkeit tolerieren können, auf einen höheren Wert eingestellt werden, und in Systemen, die möglicherweise eine höhere Genauigkeit erfordern, auf einen niedrigeren Wert eingestellt werden.
-
Bei Block 1016 kann, wenn bestimmt wurde, dass der Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen den Schwellenwertunterschied überschreitet, der Satz von spekulativen Gewichtungen dann zu weit von dem zweiten Satz von Gewichtungen entfernt sein. In einem derartigen Szenario können die Ergebnisse des zweiten Durchlaufs des Trainingsprozesses unter Verwendung des Satzes von spekulativen Gewichtungen verworfen werden, und der zweite Durchlauf des Trainingsprozesses wird neu gestartet und unter Verwendung des zweiten Satzes von Gewichtungen anstelle des Satzes von spekulativen Gewichtungen wiederholt. Wenn in Block 1018 bestimmt wurde, dass der Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen bei oder unter dem Schwellenwertunterschied liegt, ist der Satz von spekulativen Gewichtungen nahe genug an dem zweiten Satz von Gewichtungen, und der Trainingsprozess kann weiterhin den zweiten Ausgabedatensatz verwenden, der aus dem Satz von spekulativen Gewichtungen erzeugt wurde.
-
In einigen Umsetzungen kann ein Gewichtungssynchronisationsprozess nach einer vorbestimmten Anzahl von Durchläufen des Trainingsprozesses durchgeführt werden, um die Gewichtungswerte über alle Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks zu synchronisieren. Zum Beispiel kann der Gewichtungssynchronisationsprozess nach zehn Durchläufen des Trainingsprozesses durchgeführt werden. Der Gewichtungssynchronisationsprozess kann den Satz von Gewichtungen in jedem Verarbeitungsknoten auf die Gewichtungswerte aktualisieren, die von den gemittelten Gewichtungsgradienten im letzten Trainingsdurchlauf berechnet wurden. Auf diese Weise kann das System sicherstellen, dass jeder der Verarbeitungsknoten während des Trainingsprozesses zu einem einheitlichen Satz von Gewichtungen zurückkehrt.
-
11 veranschaulicht ein Beispiel von internen Komponenten der Rechenvorrichtung 1100, die als ein Verarbeitungsknoten eines Trainingssystems des neuronalen Netzwerks verwendet werden können. Wie in 11 gezeigt, kann die Rechenvorrichtung 1100 eine Berechnungsschaltung des neuronalen Netzwerks 1112, einen Prozessor 1114, ein Gewichtungsaktualisierungsmodul 1116 und eine Kommunikationsschnittstelle 1118 beinhalten. In einigen Umsetzungen kann das Gewichtungsaktualisierungsmodul 1116 als Software umsetzt sein, die vom Prozessor 1114 ausgeführt wird. In einigen Umsetzungen kann das Gewichtungsaktualisierungsmodul 1116 unter Verwendung einer anwendungsspezifischen Schaltung umsetzt oder als Teil einer Berechnungsschaltung des neuronalen Netzwerks 1112 integriert sein.
-
Die Berechnungsschaltung des neuronalen Netzwerks 1112 kann unter Verwendung eines Prozessors eines neuronalen Netzwerks, Beschleunigers eines neuronalen Netzwerks, einer Grafikverarbeitungseinheit (GPU), einem feldprogrammierbaren Gate-Array (FPGA), einem Co-Prozessor, oder einer anwendungsspezifischen integrierten Schaltung (ASIC) umgesetzt sein. die Berechnungsschaltung des neuronalen Netzwerks 1112 kann Vorwärtspropagationsvorgänge und Rückwärtspropagationsvorgänge durchführen. Nachdem die Berechnungsschaltung des neuronalen Netzwerks 1112 lokale Gewichtungsgradienten für eine Schicht des neuronalen Netzwerks erzeugt, können die lokalen Gewichtungsgradienten an den Prozessor 1114 gesendet werden, der den Austauschvorgang der Gewichtungsgradienten verwaltet. Als Teil des Austauschvorgangs kann der Prozessor 1114 die lokalen Gewichtungsgradienten zur Übertragung an andere Verarbeitungsknoten über ein Computernetzwerk an die Kommunikationsschnittstelle 1118 weiterleiten.
-
Wenn das Gewichtungsaktualisierungsmodul 1116 die lokalen Gewichtungsgradienten von der Berechnungsschaltung des neuronalen Netzwerks 1112 empfängt, kann das Gewichtungsaktualisierungsmodul 1116 die spekulativen Gewichtungen unter Verwendung der lokalen Gewichtungsgradienten berechnen und die spekulativen Gewichtungen als aktualisierte Gewichtungen derartig an die Berechnungsschaltung des neuronalen Netzwerks 1112 senden, dass das Training auf dem nächsten Paket von Daten gestartet werden kann. Wenn der Prozessor 1114 eine globale Gewichtungsaktualisierung empfängt, kann das Gewichtungsaktualisierungsmodul 1116 den Unterschied zwischen den Gewichtungswerten aus der globalen Gewichtungsaktualisierung mit den spekulativen Gewichtungswerten vergleichen. Wenn der Unterschied bei oder unter einem Schwellenwertunterschied liegt, kann der Trainingsprozess die spekulativen Gewichtungen weiter verwenden. Wenn der Unterschied einen Schwellenwertunterschied überschreitet, kann das Gewichtungsaktualisierungsmodul 1116 die Gewichtungswerte von den globalen Gewichtungsaktualisierungsgewichtungen an die Berechnungsschaltung des neuronalen Netzwerks 1112 senden und den Trainingsdurchlauf unter Verwendung der Gewichtungen aus der globalen Gewichtungsaktualisierung neu starten.
-
In einigen Umsetzungen kann der Prozessor 1114 außerdem Gewichtungsgradienten von anderen Verarbeitungsknoten über die Kommunikationsschnittstelle 1118 empfangen. Das Gewichtungsaktualisierungsmodul 1116 kann die Gewichtungsgradienten von den Verarbeitungsknoten des Systems akkumulieren und mitteln, um gemittelte Gewichtungsgradienten für eine Schicht des neuronalen Netzwerks zu erzeugen, die aktualisierten Gewichtungswerte unter Verwendung der gemittelten Gewichtungsgradienten zu berechnen und zu bestimmen, ob der Trainingsprozess die spekulativen Gewichtungen weiter verwenden kann oder mit den aus den gemittelten Gewichtungsgradienten abgeleiteten Gewichtungswerten aktualisiert werden kann.
-
12 veranschaulicht ein Beispiel eines weiteren Beispiels einer Rechenvorrichtung 1200, die als ein Verarbeitungsknoten eines Trainingssystems des neuronalen Netzwerks verwendet werden können. Verschiedene Komponenten der Computervorrichtung 1200 sind den vorstehend unter Bezugnahme auf 11 erörterten ähnlich und somit muss eine detaillierte Beschreibung derselben nicht wiederholt werden. Die Rechenvorrichtung 1200 unterscheidet sich von der in 11 gezeigten Rechenvorrichtung 1100 dahingehend, dass die Rechenvorrichtung 1200 ferner eine Gewichtungsvergleichsschaltung 1222 beinhaltet. Die Gewichtungsvergleichsschaltung 1222 kann zum Beispiel unter Verwendung einer arithmetischen Logikeinheit (ALU) oder einer anderen geeigneten Schaltung, die zum Vergleichen und/oder Berechnen von Gewichtungswerten vorgesehen ist, umsetzt sein. Die Gewichtungsvergleichsschaltung 1222 kann eine Schaltung beinhalten, die dazu konfiguriert ist, den Unterschied zwischen dem Satz von spekulativen Gewichtungen, die aus einem Satz von lokalen Gradienten des einen Verarbeitungsknotens berechnet wurden, und dem Satz von Gewichtungen, die aus Sätzen von lokalen Gradienten aller Verarbeitungsknoten des Systems abgeleitet wurden, mit einem Unterschiedsschwellenwert zu vergleichen. In einigen Umsetzungen kann die Gewichtungsvergleichsschaltung 1222 außerdem verwendet werden, um den Unterschied zwischen den beiden Sätzen von Gewichtungen zu berechnen. In einigen Umsetzungen kann die Gewichtungsvergleichsschaltung 1222 ferner verwendet werden, um die spekulativen Gewichtungswerte aus den lokalen Gewichtungsgradienten des Verarbeitungsknotens zu berechnen und/oder um die Gewichtungswerte der globalen Gewichtungsaktualisierung aus den lokalen Gewichtungsgradienten aller Verarbeitungsknoten zu berechnen.
-
Durch das Integrieren der Gewichtungsvergleichsschaltung 1222 in die Rechenvorrichtung 1200 können die Berechnungen, die am Vergleichen der Gewichtungswerte beteiligt sind und/oder um die Gewichtungswerte zu berechnen, von den anderen Komponenten der Rechenvorrichtung 1200 (z. B. der Berechnungsschaltung des neuronalen Netzwerks 1212 und/oder der Prozessor 1214) an die Gewichtungsvergleichsschaltung 1222 ausgelagert werden. Die Verwendung der Gewichtungsvergleichsschaltung 1222 kann die Trainingszeit weiter verringern, da die Berechnungsschaltung des neuronalen Netzwerks 1212 die Trainingsberechnungen ohne Unterbrechung fortsetzen kann, während die Gewichtungsvergleichsschaltung 1222 die Gewichtungswerte vergleicht und/oder berechnet. In derartigen Umsetzungen muss das Gewichtungsaktualisierungsmodul 1216 möglicherweise nur die lokalen Gewichtungsgradienten an die anderen Verarbeitungsknoten des Systems übermitteln und die globale Gewichtungsaktualisierung vom Trainingssystem empfangen.
-
13 ist ein Blockdiagramm, das ein Beispiel einer Vorrichtung einer integrierter Schaltung veranschaulicht, die als Berechnungsschaltung für ein neuronales Netzwerk verwendet werden kann. Das Beispiel von 13 veranschaulicht einen Beschleuniger 1302. In verschiedenen Beispielen kann der Beschleuniger 1302 für einen Satz von Eingabedaten (z. B. die Eingabedaten 1350) Berechnungen unter Verwendung eines Verarbeitungsenginearrays 1310, einer Aktivierungsengine1316 und/oder einer Pooling-Engine 1318 ausführen. In einigen Beispielen kann der beispielhafte Beschleuniger 1302 eine Komponente einer integrierten Schaltung eines Prozessors sein, wie etwa ein Prozessor eines neuronalen Netzwerks. Der Prozessor kann andere Komponenten einer integrierten Schaltung aufweisen, die zusätzliche Beschleunigerengines beinhalten.
-
In verschiedenen Umsetzungen kann das Speicherteilsystem 1304 mehrere Speicherbänke 1314 beinhalten. In diesen Umsetzungen kann jede Speicherbank 1314 unabhängig zugänglich sein, was bedeutet, dass das Lesen einer Speicherbank nicht vom Lesen einer anderen Speicherbank abhängig ist. Gleichermaßen wirkt sich das Schreiben in eine Speicherbank nicht auf das Schreiben in eine andere Speicherbank aus oder beschränkt es nicht. In einigen Fällen kann jede Speicherbank gleichzeitig gelesen und beschrieben werden. Es können verschiedene Methoden verwendet werden, um unabhängig zugängliche Speicherbänke 1314 aufzuweisen. Zum Beispiel kann jede Speicherbank eine physisch getrennte Speicherkomponente sein, die einen Adressbereich aufweist, der getrennt und unabhängig von den Adressbereichen jeder anderen Speicherbank ist. In diesem Beispiel kann jede Speicherbank mindestens einen Lesekanal und mindestens einen getrennten Schreibkanal aufweisen, die gleichzeitig verwendet werden können. In diesen Beispielen kann das Speicherteilsystem 1304 den gleichzeitigen Zugriff auf die Lese- oder Schreibkanäle mehrerer Speicherbänke ermöglichen. Als weiteres Beispiel kann das Speicherteilsystem 1304 derartig eine Arbitrierungslogik beinhalten, dass eine Arbitrierung zwischen zum Beispiel den Ausgaben mehrerer Speicherbänke 1314 dazu führen kann, dass mehr als eine Speicherbankausgabe verwendet wird. In diesen und anderen Beispielen kann jede Speicherbank unabhängig von jeder anderen betrieben werden, obwohl sie global durch das Speicherteilsystem 1304 verwaltet wird.
-
Wenn die Speicherbänke 1314 unabhängig zugänglich sind, kann dies den Wirkungsgrad des Beschleunigers 1302 erhöhen. Zum Beispiel können Werte gleichzeitig gelesen und jeder Zeile des Verarbeitungsenginearrays 1310 bereitgestellt werden, so dass das gesamte Verarbeitungsenginearray 1310 in einem Taktzyklus verwendet werden kann. Als weiteres Beispiel können die Speicherbänke 1314 zur gleichen Zeit gelesen werden, zu der die von dem Verarbeitungsenginearray 1310 berechneten Ergebnisse in das Speicherteilsystem 1304 geschrieben werden. Im Gegensatz dazu ist ein einzelner Speicher möglicherweise lediglich in der Lage, jeweils nur einen Lese- oder Schreibvorgang zu bedienen. Mit einem einzelnen Speicher können mehrere Taktzyklen erforderlich sein, um zum Beispiel Eingabedaten für jede Zeile des Verarbeitungsenginearrays 1310 zu lesen, bevor das Verarbeitungsenginearray 1310 gestartet werden kann.
-
In verschiedenen Umsetzungen kann das Speicherteilsystem 1304 dazu konfiguriert sein, mehrere Clients gleichzeitig zu bedienen, was das Verarbeitungsenginearray 1310, die Aktivierungsengine 1316, die Pooling-Engine 1318 und alle externen Clients beinhaltet, die über eine Kommunikationsstruktur 1320 auf das Speicherteilsystem 1304 zugreifen. In einigen Umsetzungen kann die Fähigkeit, mehrere Clients zu bedienen, bedeuten, dass das Speicherteilsystem 1304 mindestens so viele Speicherbänke aufweist, wie es Clients gibt. In einigen Fällen kann jede Zeile des Verarbeitungsenginearrays 1310 als ein getrennter Client zählen. In einigen Fällen kann jede Spalte des Verarbeitungsenginearrays 1310 derartig ein Ergebnis ausgeben, dass jede Spalte als ein getrennter Schreib-Client zählen kann. In einigen Fällen kann die Ausgabe von dem Verarbeitungsenginearray 1310 in die Speicherbänke 1314 geschrieben werden, die anschließend Eingabedaten für das Verarbeitungsenginearray 1310 bereitstellen können. Als weiteres Beispiel können die Aktivierungsengine 1316 und die Pooling-Engine 1318 mehrere Ausführungskanäle beinhalten, von denen jeder getrennte Speicherclients sein kann. Die Speicherbänke 1314 können zum Beispiel unter Verwendung eines statischen Direktzugriffsspeichers (SRAM) umsetzt sein.
-
In verschiedenen Umsetzungen kann das Speicherteilsystem 1304 Steuerlogik beinhalten. Die Steuerlogik kann zum Beispiel die Adressbereiche jeder der Speicherbänke 1314 nachverfolgen, Speicherbänke 1314 identifizieren, aus denen gelesen oder in die geschrieben werden soll, und/oder Daten zwischen den Speicherbänken 1314 verschieben. In einigen Umsetzungen können Speicherbänke 1314 mit bestimmten Clients fest verdrahtet sein. Zum Beispiel kann ein Satz von Speicherbänken 1314 fest verdrahtet sein, um den Zeilen des Verarbeitungsenginearrays 1310 Werte bereitzustellen, wobei eine Speicherbank jede Zeile bedient. Als weiteres Beispiel kann ein Satz von Speicherbänken fest verdrahtet sein, um Werte von Spalten des Verarbeitungsenginearrays 1310 zu empfangen, wobei eine Speicherbank Daten für jede Spalte empfängt.
-
Das Verarbeitungsenginearray 1310 ist die Berechnungsmatrix des beispielhaften Beschleunigers 1302. Das Verarbeitungsenginearray 1310 kann zum Beispiel unter anderem parallele Integration, Faltung, Korrelation und/oder Matrixmultiplikation ausführen. Das Verarbeitungsenginearray 1310 beinhaltet mehrere Verarbeitungsengines 1311, die derartig in Zeilen und Spalten angeordnet sind, dass die von einer Verarbeitungsengine 1311 ausgegebenen Ergebnisse direkt in eine andere Verarbeitungsengine 1311 eingegeben werden können. Verarbeitungsengines 1311, die sich nicht an den Außenkanten des Verarbeitungsenginearrays 1310 befinden, können somit Daten von anderen Verarbeitungsengines 1311 anstatt von dem Speicherteilsystem 1304 empfangen, um diese zu bearbeiten.
-
In verschiedenen Beispielen verwendet das Verarbeitungsenginearray 1310 eine systolische Ausführung, bei der Daten in regelmäßigen Abständen aus verschiedenen Richtungen an jeder Verarbeitungsengine 1311 ankommen. In einigen Beispielen können Eingabedaten von links in das Verarbeitungsenginearray 1310 strömen und Gewichtungswerte können oben geladen werden. In einigen Beispielen können Gewichtungen und Eingabedaten von links und Teilsummen von oben nach unten strömen. In diesen und anderen Beispielen bewegt sich ein Multiplikations- und Akkumulationsvorgang durch das Verarbeitungsenginearray 1310 als eine diagonale Wellenfront, wobei sich Daten über das Array nach rechts und unten bewegen. Steuersignale können gleichzeitig mit Gewichtungen links eingegeben werden und können zusammen mit der Berechnung hin und her strömen.
-
In verschiedenen Umsetzungen bestimmt die Anzahl von Spalten in dem Verarbeitungsenginearray 1310 die Rechenkapazität des 1310, und die Anzahl von Zeilen bestimmt die erforderliche Speicherbandbreite, um eine maximale Auslastung des Verarbeitungsenginearrays 1310 zu erreichen. Das Verarbeitungsenginearray 1310 kann zum Beispiel 64 Spalten und 428 Zeilen oder eine andere Anzahl von Spalten und Zeilen aufweisen.
-
Ein Beispiel einer Verarbeitungsengine 1311 ist in 13 in einem Einschubdiagramm veranschaulicht. Wie durch dieses Beispiel veranschaulicht, kann eine Verarbeitungsengine 1311 eine Multiplikator-Akkumulator-Schaltung beinhalten. Eingaben von links können zum Beispiel Eingabedaten i und einen Gewichtungswert w beinhalten, wobei die Eingabedaten ein Wert sind, der entweder aus einem Satz von Eingabedaten oder einem Satz von Zwischenergebnissen stammt, und der Gewichtungswert aus einem Satz von Gewichtungswerten stammt, die eine Schicht des neuronalen Netzwerks mit der nächsten verbinden. Ein Satz von Eingabedaten kann zum Beispiel unter anderem ein Bild sein, das zur Identifizierung oder Objekterkennung eingereicht wird, ein Audioclip, der zur Spracherkennung bereitgestellt wird, eine Textfolge zur Verarbeitung natürlicher Sprache oder zur maschinellen Übersetzung oder der aktuelle Status eines Spiels, das eine Analyse erfordert, um eine nächsten Schritt zu bestimmen. In einigen Beispielen werden die Eingabedaten und der Gewichtungswert zur Eingabe in die nächste Verarbeitungsengine 1311 rechts ausgegeben.
-
In dem veranschaulichten Beispiel kann eine Eingabe von oben eine Teilsumme, p_in, beinhalten, die entweder von einer anderen Verarbeitungsengine 1311 oder von einer vorherigen Berechnungsrunde durch das Verarbeitungsenginearray 1310 bereitgestellt ist. Wenn eine Berechnung für einen neuen Satz von Eingabedaten gestartet wird, kann die obere Zeile des Verarbeitungsenginearrays 1310 einen feststehenden Wert für p_in, wie etwa Null, empfangen. Wie durch dieses Beispiel veranschaulicht, werden i und w miteinander multipliziert und das Ergebnis mit p_in summiert, um eine neue Teilsumme, p_out, zu erzeugen, die in eine andere Verarbeitungsengine 1311 eingegeben werden kann. Verschiedene andere Umsetzungen der Verarbeitungsengine 1311 sind möglich.
-
Ausgaben von der letzten Zeile in dem Verarbeitungsenginearray 1310 können vorübergehend im Ergebnispuffer 1312 gespeichert werden. Die Ergebnisse können Zwischenergebnisse sein, die in die Speicherbänke 1314 geschrieben werden können, um dem Verarbeitungsenginearray 1310 zur zusätzlichen Berechnung bereitgestellt zu werden. Alternativ können die Ergebnisse Endergebnisse sein, die, sobald sie in die Speicherbänke 1314 geschrieben wurden, vom Speicherteilsystem 1304 über die Kommunikationsstruktur 1320 gelesen werden können, um vom System ausgegeben zu werden.
-
In einigen Umsetzungen enthält der Beschleuniger 1302 eine Aktivierungsengine 1316. In diesen Umsetzungen kann die Aktivierungsengine 1316 die Ergebnisse von der Verarbeitungsenginearray 1310 zu einer oder mehreren Ausgabeaktivierungen kombinieren. Zum Beispiel können für ein neuronales Faltungsnetzwerk Faltungen von mehreren Kanälen summiert werden, um eine Ausgabeaktivierung für einen einzelnen Kanal zu erzeugen. In anderen Beispielen kann das Sammeln von Ergebnissen aus einer oder mehreren Spalten in dem Verarbeitungsenginearray 1310 erforderlich sein, um eine Ausgabeaktivierung für einen einzelnen Knoten in dem neuronalen Netzwerk zu erzeugen. In einigen Beispielen kann die Aktivierungsengine 1316 umgangen werden.
-
In verschiedenen Beispielen kann die Aktivierungsengine 1316 mehrere getrennte Ausführungskanäle beinhalten. In diesen Beispielen können die Ausführungskanäle den Spalten des Verarbeitungsenginearrays 1310 entsprechen und können einen Vorgang an den Ausgaben einer Spalte ausführen, deren Ergebnis in dem Speicherteilsystem 1304 gespeichert werden kann. In diesen Beispielen kann die Aktivierungsengine 1316 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl von Spalten in dem Verarbeitungsenginearray 1310 ist. In einigen Fällen können eine oder mehrere der Berechnungen gleichzeitig durchgeführt werden. Beispiele für Berechnungen, die jeder Ausführungskanal ausführen kann, beinhalten unter anderen Beispielen Exponentiale, Quadrate, Quadratwurzeln, neutrale Elemente, binäre Schritte, bipolare Schritte, Sigmoidale und Rampen.
-
In einigen Umsetzungen kann der Beschleuniger 1302 eine Pooling-Engine 1318 beinhalten. Pooling ist das Kombinieren von Ausgaben der Spalten des Verarbeitungsenginearrays 1310. Das Kombinieren kann zum Beispiel das Berechnen eines Maximalwerts, eines Minimalwerts, eines Durchschnittswerts, eines Medianwerts, einer Summierung, einer Multiplikation oder einer anderen logischen oder mathematischen Kombination beinhalten. In verschiedenen Beispielen kann die Pooling-Engine 1318 mehrere Ausführungskanäle beinhalten, die mit Werten aus entsprechenden Spalten des Verarbeitungsenginearrays 1310 arbeiten können. In diesen Beispielen kann die Pooling-Engine 1318 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl von Spalten in dem Verarbeitungsenginearray 1310 ist. In verschiedenen Beispielen können Ausführungskanäle der Pooling-Engine 1318 parallel und/oder gleichzeitig arbeiten. In einigen Beispielen kann die Pooling-Engine 1318 umgangen werden.
-
In dieser Schrift können die Aktivierungsengine 1316 und die Pooling-Engine 1318 zusammen als Ausführungsengines bezeichnet sein. Das Verarbeitungsenginearray 1310 ist ein weiteres Beispiel einer Ausführungsengine. Ein weiteres Beispiel einer Ausführungsengine ist eine DMA-(Direct Memory Access)Engine, die sich außerhalb des Beschleunigers 1302 befinden kann.
-
Die Eingabedaten 1350 können über die Kommunikationsstruktur 1320 ankommen. Die Kommunikationsstruktur 1320 kann den Beschleuniger 1302 mit anderen Komponenten eines Prozessors verbinden, wie etwa eine DMA-Engine, die Eingabedaten 1350 von einer Eingabe-Ausgabe-(E/A-) Vorrichtung erhalten kann, ein Speicherlaufwerk oder eine Netzwerkschnittstelle. Die Eingabedaten 1350 können zum Beispiel eindimensionale Daten, wie etwa eine Zeichenkette oder eine Zahlenfolge, oder zweidimensionale Daten, wie etwa eine Anordnung von Pixelwerten für ein Bild oder Frequenz- und Amplitudenwerte im Zeitverlauf für ein Audiosignal sein. In einigen Beispielen können die Eingabedaten 1350 dreidimensional sein, wie dies zum Beispiel bei den von einem selbstfahrenden Auto verwendeten Situationsinformationen oder bei Daten der virtuellen Realität der Fall sein kann. In einigen Umsetzungen kann das Speicherteilsystem 1304 einen getrennten Puffer für die Eingabedaten 1350 beinhalten. In einigen Umsetzungen können die Eingabedaten 1350 in den Speicherbänken 1314 gespeichert werden, wenn der Beschleuniger 1302 die Eingabedaten 1350 empfängt.
-
In einigen Beispielen kann der Beschleuniger 1302 eine Verarbeitungsengine des neuronalen Netzwerk umsetzen. In diesen Beispielen kann der Beschleuniger 1302 für einen Satz von Eingabedaten 1350 ein neuronales Netzwerk ausführen, um eine Aufgabe auszuführen, für die das neuronale Netzwerk trainiert wurde. Das Ausführen eines neuronalen Netzwerks mit einem Satz von Eingabedaten kann als Ableitung oder das Durchführen einer Ableitung bezeichnet sein.
-
Die Gewichtungen für das neuronale Netzwerk können in dem Speicherteilsystem 1304 zusammen mit den Eingabedaten 1350 gespeichert werden, mit denen das neuronale Netzwerk arbeiten wird. Das neuronale Netzwerk kann auch Anweisungen beinhalten, die das Verarbeitungsenginearray 1310 programmieren können, um verschiedene Berechnungen an den Gewichtungen und den Eingabedaten durchzuführen. Die Befehle können auch in dem Speicherteilsystem 1304, in den Speicherbänken 1314 oder in einem getrennten Anweisungspuffer gespeichert sein. Das Verarbeitungsenginearray 1310 kann Zwischenergebnisse ausgeben, welche die Ausgaben einzelner Schichten des neuronalen Netzwerks darstellen. In einigen Fällen kann die Aktivierungsengine 1316 und/oder die Pooling-Engine 1318 für Berechnungen aktiviert werden, die von bestimmten Schichten des neuronalen Netzwerks angefordert wurden. Der Beschleuniger 1302 kann die Zwischenergebnisse in dem Speicherteilsystem 1304 zum Eingeben in das Verarbeitungsenginearray 1310 speichern, um Ergebnisse für die nächste Schicht des neuronalen Netzwerks zu berechnen. Das Verarbeitungsenginearray 1310 kann weiterhin Endergebnisse von einer letzten Schicht des neuronalen Netzwerks ausgeben. Die Endergebnisse können in dem Speicherteilsystem 1304 gespeichert und dann in den Hostprozessorspeicher oder an einen anderen Ort kopiert werden.
-
14 beinhaltet ein Blockdiagramm, das ein Beispiel einer Beschleunigungsengine 1400 veranschaulicht. Die Beschleunigungsengine 1400 ist ein Beispiel einer integrierten Schaltung, die einen oder mehrere Beschleuniger 1402a-1402n beinhalten kann, die dem in 11 veranschaulichten Beschleuniger ähnlich sein können.
-
In dem Beispiel von 14 beinhaltet die Beschleunigungsengine 1400 mehrere Beschleuniger 1402a-1402n, von denen jeder einen Satz von Vorgängen ausführen kann. In verschiedenen Beispielen dienen die Beschleuniger 1402a-1402n bestimmten Arten von Vorgängen, so dass die Beschleuniger 1402a-1402n die Vorgänge viel schneller ausführen können, als wenn ähnliche Vorgängen von einem Allzweckprozessor ausgeführt werden. In verschiedenen Beispielen müssen Eingabedaten, an denen die Vorgänge ausgeführt werden sollen, zuerst in die Beschleuniger 1402a-1402n verschoben werden, um einen Satz von Vorgängen auszuführen. Zusätzlich wird in einigen Fällen auch Programmcode in die Beschleuniger 1402a-1402n verschoben, der die Vorgänge programmiert, welche die Beschleuniger 1402a-1402n mit den Daten ausführen. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungsengine 1400 n Beschleuniger 1402a-1402n. Beispiele für Beschleuniger, die in der Beschleunigungsengine 1400 beinhaltet sein können, beinhalten Grafikbeschleuniger, Gleitkommabeschleuniger, Beschleuniger des neuronalen Netzwerks und andere. In verschiedenen Beispielen können die Beschleuniger 1402a-1402n jeweils gleich sein (z. B. ist jeder von ihnen ein Grafikbeschleuniger) oder unterschiedlich sein (z. B. beinhalten die Beschleuniger 1402a-1402n einen Grafikbeschleuniger, einen Gleitkommabeschleuniger und einen Beschleuniger des neuronalen Netzwerks).
-
Die beispielhafte Beschleunigungsengine 1400 beinhaltet ferner DRAM-Steuerungen 1442a-1442k zum Kommunizieren mit einem externen Speicher. Der externe Speicher wird in diesem Beispiel unter Verwendung des DRAM 1430 umgesetzt. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungsengine 1400 k DRAM-Steuerungen 1442a-1442k, von denen jede in der Lage sein kann, mit einem unabhängigen Satz von Bänken des DRAM zu kommunizieren. In anderen Beispielen können andere Arten von RAM-Technologie für den externen Speicher verwendet werden. Die DRAM-Steuerungen 1442a-1442k können auch als Speichersteuerungen bezeichnet sein.
-
In verschiedenen Beispielen können Eingabedaten und/oder der Programmcode für die Beschleuniger 1402a-1402n im DRAM 1430 gespeichert sein. Unterschiedliche Programme können veranlassen, dass die Beschleuniger 1402a-1402n unterschiedliche Vorgänge ausführen. Wenn zum Beispiel einer der Beschleuniger ein Beschleuniger des neuronalen Netzwerks ist, kann ein Programm den Beschleuniger des neuronalen Netzwerks dazu konfigurieren, eine Spracherkennung auszuführen, während ein anderes Programm den Beschleuniger des neuronalen Netzwerks dazu konfigurieren kann, eine Bilderkennung auszuführen. In verschiedenen Beispielen können unterschiedliche Beschleuniger 1402a-1402n mit unterschiedlichen Programmen programmiert sein, so dass jeder einen anderen Satz von Vorgängen ausführt. In verschiedenen Beispielen können die Prozessoren 1448a-1448s das Verschieben von Programmcode vom DRAM 1430 zu den Beschleunigern 1402a-1402n verwalten.
-
Die beispielhafte Beschleunigungsengine 1400 beinhaltet ferner E/A-Steuerungen 1444a-1444p für die Kommunikation mit den E/A-Vorrichtungen 1432 im System. Die Beschleunigungsengine 1400 kann mit E/A-Vorrichtungen über zum Beispiel einen Prozessorbus kommunizieren. In einigen Beispielen kann der Prozessorbus unter Verwendung periphere Komponentenverbindung (Peripheral Component Interconnect - PCI) und/oder eine Variante des PCI-Bus-Protokolls umgesetzt sein. Der Prozessorbus kann die Beschleunigungsengine 1400 mit E/A-Vorrichtungen verbinden, wie etwa zum Beispiel unter anderem Eingabe- und Ausgabevorrichtungen, Speichersteuerungen, Speichervorrichtungen und/oder Netzwerkkarten. In einigen Beispielen können die E/A-Steuerungen 1444-1444p der Beschleunigungsengine 1400 ermöglichen, als E/A-Vorrichtung für einen Hostprozessor zu fungieren. Zum Beispiel kann die Beschleunigungsengine 1400 der Empfänger von Eingabedaten vom Hostprozessor und eines Befehls sein, der einen Vorgang angibt, der mit den Eingabedaten ausgeführt werden soll (z. B. eine bestimmte Berechnung oder Analyse). In dem dargestellten Beispiel beinhaltet die Beschleunigungsengine 1400 p E/A-Steuerungen 1444a-1444p, von denen jede einen getrennten Wurzelkomplex beinhalten kann und mit einem getrennten Satz von E/A-Vorrichtungen 1432 kommunizieren kann. In anderen Beispielen können andere standardisierte Busprotokolle wie etwa Ultra Path Interconnect (UPI) für den Hostbus verwendet werden. In anderen Beispielen kann ein proprietäres Busprotokoll verwendet werden.
-
Die Bewegung von Daten in der Beschleunigungsengine 1400 kann von einem oder mehreren Prozessoren 1448a-1448 verwaltet werden, die auch als Datenverwaltungsprozessoren bezeichnet sein können. In dem Beispiel von 14 beinhaltet die Beschleunigungsengine 1400 s Prozessoren 1448a-1448s, die in die Vorrichtung integriert sind (z. B. auf demselben Siliziumchip). In anderen Beispielen können sich die Prozessoren 1448a-1448 außerhalb der Beschleunigungsengine 1400 befinden (z. B. auf einem anderen Chip und/oder in einem anderen Paket). In einigen Beispielen können die Prozessoren 1448a-1448s das Bewegen von Daten von den E/A-Vorrichtungen 1432 zu den Beschleunigern 1402a-1402n oder dem DRAM 1430 verwalten. Zum Beispiel können sich Eingabedaten an einer E/A-Vorrichtung 1432 oder im Prozessorspeicher befinden, und die Prozessoren 1448a-1448s können die Eingabe von der E/A-Vorrichtung 1432 oder dem Prozessorspeicher in einen Beschleuniger oder in DRAM 1430 bewegen. Als weiteres Beispiel kann sich der Programmcode für die Beschleuniger 1402a-1402n auf einer E/A-Vorrichtung 1432 oder in Prozessorspeicher befinden.
-
Die beispielhafte Beschleunigungsengine 1400 beinhaltet ferner DMA-Engines 1446a-1446d, die Daten zwischen den Beschleunigern 1402a-1402n, den DRAM-Steuerungen 1442a-1442k und den E/A-Steuerungen 1444a-1444p bewegen können. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungsengine 1400 d DMA-Engines 1446a-1446d. In einigen Umsetzungen können die DMA-Engines 1446a-1446d bestimmten Aufgaben zugewiesen werden, wie etwa dem Bewegen von Daten von den DRAM-Steuerungen 1442a-1442d zu den Beschleunigern 1402a-1402n oder dem Bewegen von Daten zwischen den E/A-Steuerungen 1444a-1444p und den Beschleunigern 1402a-1402n. Diese Aufgaben können zum Beispiel durch das Einreihen von Deskriptoren in die DMA-Engines 1446a-1446d zugewiesen werden, wobei ein Deskriptor eine Adresse für einen Datenblock und einen auszuführenden Vorgang (z. B. Lesen oder Schreiben) identifiziert. Ein Deskriptor kann zum Beispiel eine DMA-Engine anweisen, eine DMA-Steuerung anzuweisen, einen Datenblock aus dem DRAM 1430 zu lesen. Ein Deskriptor kann als ein weiteres Beispiel die DMA-Engine anweisen, von der DMA-Steuerung gelesene Daten in einen Beschleuniger zu schreiben. Weitere Deskriptoren können verwendet werden, um Daten von einem Beschleuniger zum DRAM 1430 zu bewegen.
-
In verschiedenen Beispielen kann jeder der Prozessoren 1448a-1448 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. Gleichermaßen kann in verschiedenen Beispielen jeder der Prozessoren 1448a-1448s einer oder mehreren DMA-Engines 1446a-1446d zugeordnet sein. In diesen und anderen Beispielen werden Zuordnungen zwischen Prozessoren 1448a-1448s, Beschleunigern 1402a-1402n und DMA-Engines 1446a-1446d durch Programmcode bestimmt, der von jedem entsprechenden Prozessor ausgeführt wird.
-
In der beispielhaften Beschleunigungsengine 1400 können die verschiedenen Komponenten über eine Chipverbindung 1420 kommunizieren. Die Chipverbindung 1420 beinhaltet hauptsächlich eine Verdrahtung zum Weiterleiten von Daten zwischen den Komponenten der Beschleunigungsengine 1400. In einigen Fällen kann die Chipverbindung 1420 eine minimale Menge an Logik beinhalten, wie etwa Multiplexer zum Steuern der Datenrichtung, Flip-Flops zum Behandeln von Taktdomänenkreuzungen, und Zeitsteuerungslogik.
-
15 beinhaltet ein Blockdiagramm eines Beispiels eines Hostsystems 1500, in dem eine Beschleunigungsengine 1560 verwendet werden kann. Die Beschleunigungsengine 1560 von 15 ist ein Beispiel einer Vorrichtung, die einen oder mehrere Beschleuniger beinhalten kann, wie etwa in 12 veranschaulicht ist. Das beispielhafte Hostsystem 1500 von 15 beinhaltet die Beschleunigungsengine 1560, einen Hostprozessor 1572, einen DRAM 1530 oder einen Prozessorspeicher, E/A-Vorrichtungen 1532 und Unterstützungssysteme 1574. In verschiedenen Umsetzungen kann das Hostsystem 1500 andere Hardware beinhalten, die hier nicht veranschaulicht ist.
-
Der Hostprozessor 1572 ist eine integrierte Allzweckschaltung, die in der Lage ist, Programmanweisungen auszuführen. In einigen Beispielen kann der Hostprozessor 1572 mehrere Verarbeitungskerne beinhalten. Ein Mehrkernprozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors beinhalten. In einigen Beispielen kann das Hostsystem 1500 mehr als einen Hostprozessor 1572 beinhalten. In einigen Beispielen können der Hostprozessor 1572 und die Beschleunigungsengine 1560 ein Chip sein, wie etwa eine oder mehrere integrierte Schaltungen innerhalb desselben Pakets.
-
In verschiedenen Beispielen kann der Hostprozessor 1572 über einen oder mehrere Kommunikationskanäle mit anderen Komponenten im Hostsystem 1500 kommunizieren. Zum Beispiel kann das Hostsystem 1500 einen Hostprozessorbus beinhalten, den der Hostprozessor 1572 verwenden kann, um zum Beispiel mit dem DRAM 1530 zu kommunizieren. Als weiteres Beispiel kann das Hostsystem 1500 einen E/A-Bus beinhalten, wie etwa einen PCI-basierten Bus, über den der Hostprozessor 1572 zum Beispiel mit der Beschleunigungsengine 1560 und/oder den E/A-Vorrichtungen 1532 kommunizieren kann. In verschiedenen Beispielen kann das Hostsystem 1500 alternativ oder zusätzlich andere Kommunikationskanäle oder Busse beinhalten, wie zum Beispiel serielle Busse, Energieverwaltungsbusse, Speichervorrichtungsbusse und so weiter.
-
In einigen Beispielen können Softwareprogramme, die auf dem Hostprozessor 1572 ausgeführt werden, Eingaben zum Verarbeiten durch die Beschleunigungsengine 1560 empfangen oder erzeugen. In einigen Beispielen können die Programme ein geeignetes neuronales Netzwerk auswählen, das für eine bestimmte Eingabe ausgeführt werden soll. Zum Beispiel kann ein Programm der Sprachübersetzung dienen und kann ein oder mehrere neuronale Netzwerke auswählen, die zur Spracherkennung und/oder Maschinenübersetzung fähig sind. In diesen und anderen Beispielen können die Programme die Beschleunigungsengine 1560 mit dem auszuführenden neuronalen Netzwerk konfigurieren und/oder eine Verarbeitungsengine des neuronalen Netzwerks auf der Beschleunigungsengine 1560 auswählen, die zuvor dazu konfiguriert wurde, das gewünschte neuronale Netzwerk auszuführen. In einigen Beispielen kann, sobald die Beschleunigungsengine 1560 eine Ableitung für Eingabedaten gestartet hat, der Hostprozessor 1572 die Bewegung von Daten (wie etwa Gewichtungen, Anweisungen, Zwischenergebnisse, Ergebnisse von bedingten Schichten und/oder Endergebnisse) in die oder aus der Beschleunigungsengine 1560 verwalten.
-
In einigen Beispielen kann ein Softwareprogramm, das die Beschleunigungsengine 1560 verwendet, um eine Ableitung durchzuführen, das Ergebnis aus einer bedingten Schicht von der Beschleunigungsengine 1560 und/oder von einem Speicherort, wie etwa in DRAM 1530, lesen. In diesen Beispielen kann das Programm bestimmen, welche Maßnahme das neuronale Netzwerk als Nächstes ausführen soll. Zum Beispiel kann das Programm bestimmen, die Ableitung zu beenden. Als weiteres Beispiel kann das Programm bestimmen, die Richtung der Ableitung zu ändern, was durch Code niedrigerer Ebene und/oder den Prozessor des neuronalen Netzwerks zu einer nächsten Schicht verschoben werden kann, um ausgeführt zu werden. In diesen und anderen Beispielen kann der Ausführungsstrom des neuronalen Netzwerks durch Software koordiniert werden.
-
Der DRAM 1530 ist ein Speicher, der vom Hostprozessor 1572 zum Speichern von Programmcode, den der Hostprozessor 1572 gerade ausführt, sowie von Werten, die bearbeitet werden, verwendet wird. In einigen Beispielen können die Daten für ein neuronales Netzwerk (z. B. Gewichtungswerte, Anweisungen und andere Daten) ganz oder teilweise im DRAM 1530 gespeichert sein. DRAM ist ein gebräuchlicher Begriff für Prozessorspeicher, und obwohl DRAM ein flüchtiger Speicher ist, kann der Prozessorspeicher flüchtig und/oder nichtflüchtig sein. Obwohl hier nicht veranschaulicht, kann das Hostsystem 1500 andere flüchtige und nichtflüchtige Speicher für andere Zwecke beinhalten. Zum Beispiel kann das Hostsystem 1500 einen Nur-LeseSpeicher (Read-Only Memory - ROM) beinhalten, der den Bootcode zum Booten des Hostsystems 1500 beim Einschalten und/oder BIOS(Basic Input/Output System)-Code speichert.
-
Obwohl hier nicht veranschaulicht, kann der DRAM 1530 Anweisungen für verschiedene Programme speichern, die in den Hostprozessor 1572 geladen und von diesem ausgeführt werden können. Zum Beispiel kann der DRAM 1530 Anweisungen für ein Betriebssystem, einen oder mehrere Datenspeicher, ein oder mehrere Anwendungsprogramme, einen oder mehrere Treiber und/oder Dienste zum Umsetzen der in dieser Schrift offenbarten Merkmale speichern.
-
Das Betriebssystem kann den Gesamtbetrieb des Hostsystems 1500 verwalten und koordinieren, wie etwa neben anderen Vorgängen das Planen von Aufgaben, das Ausführen von Anwendungen, und/oder Steuerungsperipherievorrichtungen. In einigen Beispielen kann ein Hostsystem 1500 eine oder mehrere virtuelle Maschinen hosten. In diesen Beispielen 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 kann alternativ oder zusätzlich ein proprietäres Betriebssystem sein.
-
Die Datenspeicher können dauerhafte oder flüchtige Daten beinhalten, die von dem Betriebssystem, Anwendungsprogrammen oder Treibern verwendet und/oder betrieben werden. Beispiele für derartige Daten beinhalten Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten usw. Die Informationen in den Datenspeichern können in einigen Beispielen Benutzervorrichtungen über das Netzwerk/die Netzwerke bereitgestellt werden. In einigen Fällen können die Datenspeicher zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber beinhalten. Alternativ oder zusätzlich können die Datenspeicher standardmäßige und/oder proprietäre Softwarebibliotheken, und/oder standardmäßige und/oder proprietäre API(Application User Interface - Anwendungsbenutzerschnittstellen)-Bibliotheken speichern. In den Datenspeichern gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
-
Die Treiber können Programme beinhalten, welche die Kommunikation zwischen Komponenten im Hostsystem 1500 bereitstellen. Zum Beispiel können einige Treiber die Kommunikation zwischen dem Betriebssystem und Peripherievorrichtungen oder E/A-Vorrichtungen 1532 bereitstellen. Alternativ oder zusätzlich können einige Treiber die Kommunikation zwischen Anwendungsprogrammen und dem Betriebssystem und/oder Anwendungsprogrammen und Peripherievorrichtungen bereitstellen, auf die das Hostsystem 1500 zugreifen kann. In vielen Fällen können die Treiber Treiber beinhalten, die wohlverstandene Funktionen bereitstellen (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Festkörpervorrichtungstreiber usw.). In anderen Fällen können die Treiber proprietäre oder spezielle Funktionen bereitstellen.
-
Die E/A-Vorrichtungen 1532 können Hardware zum Verbinden mit Benutzereingabe- und -ausgabevorrichtungen, wie etwa neben anderen Vorrichtungen Tastaturen, Mäusen, Stiften, Tablets, Spracheingabevorrichtungen, Berührungseingabevorrichtungen, Bildschirmen oder Monitoren, Lautsprechern und Druckern beinhalten. Die E/A-Vorrichtungen 1532 können auch Speicherlaufwerke und/oder Netzwerkschnittstellen zum Verbinden mit einem Netzwerk 1580 beinhalten. Zum Beispiel kann das Hostsystem 1500 eine Netzwerkschnittstelle verwenden, um unter verschiedenen Beispielen mit Speichervorrichtungen, Benutzerterminals, anderen Rechenvorrichtungen oder Servern und/oder anderen Netzwerke zu kommunizieren.
-
In verschiedenen Beispielen können eine oder mehrere der E/A-Vorrichtungen 1532 Speichervorrichtungen sein. In diesen Beispielen beinhalten die Speichervorrichtungen einen nichtflüchtigen Speicher und können Programmanweisungen und/oder Daten speichern. Beispiele für Speichervorrichtungen beinhalten unter anderem Magnetspeicher, optische Datenträger, Festkörperdatenträger, Flash-Speicher und/oder Bandspeicher. Die Speichervorrichtung kann in denselbem Gehäuse wie das Hostsystem 1500 oder in einem externen Gehäuse untergebracht sein. Eine Speichervorrichtung kann feststehend (z. B. durch Schrauben angebracht) oder entfernbar (z. B. einen physischen Freigabemechanismus und möglicherweise einen Hot-Plug-Mechanismus aufweisend) sein.
-
Speichervorrichtungen, der DRAM 1530 und jede andere Speicherkomponente im Hostsystem 1500 sind Beispiele für computerlesbare Speichermedien. Computerlesbare Speichermedien sind physische Medien, die in der Lage sind, Daten in einem Format zu speichern, das von einer Vorrichtung, wie etwa dem Hostprozessor 1572, gelesen werden kann. Das computerlesbare Speichermedium kann nichtflüchtig sein. Nichtflüchtige computerlesbare Medien können die darauf gespeicherten Daten behalten, wenn die Medien nicht mit Strom versorgt werden. Beispiele für nichtflüchtige computerlesbare Medien beinhalten unter anderem ROM-Vorrichtungen, Magnetplatten, Magnetbänder, optische Platten, Flash-Vorrichtungen und Festkörperlaufwerke. Wie in dieser Schrift verwendet, beinhalten computerlesbare Speichermedien keine computerlesbaren Kommunikationsmedien.
-
In verschiedenen Beispielen können die auf computerlesbaren Speichermedien gespeicherten Daten Programmanweisungen, Datenstrukturen, Programmmodule, Bibliotheken, andere Softwareprogrammkomponenten und/oder andere Daten beinhalten, die innerhalb eines Datensignals übermittelt werden können, wie etwa eine Trägerwelle oder eine andere Übermittlung. Die computerlesbaren Speichermedien können zusätzlich oder alternativ Dokumente, Bilder, Video, Audio und andere Daten beinhalten, die über die Verwendung eines Softwareprogramms bearbeitet oder verändert werden können.
-
In verschiedenen Beispielen können eine oder mehrere der E/A-Vorrichtungen 1532 PCI-basierte Vorrichtungen sein. In diesen Beispielen beinhaltet eine PCI-basierte E/A-Vorrichtung eine PCI-Schnittstelle zur Kommunikation mit dem Hostsystem 1500. Der Begriff „PCI“ oder „PCI-basiert“ kann verwendet werden, um jedes Protokoll in der PCI-Familie von Busprotokollen zu beschreiben, was den ursprünglichen PCI-Standard, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express (PCIe) oder jede andere Verbesserung oder abgeleiteten Protokolle beinhaltet, die auf den in dieser Schrift erörterten PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle zum Verbinden von Vorrichtungen, wie etwa einer lokalen Peripherievorrichtung, mit einer Hostvorrichtung. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation von verschiedenen Herstellern definiert und übernommen wurde. Hersteller stellen sicher, dass regelkonforme Vorrichtungen mit Computersystemen kompatibel sind, die das Busprotokoll umsetzen, und umgekehrt. Wie in dieser Schrift verwendet, beinhalten PCI-basierte Vorrichtungen außerdem Vorrichtungen, die unter Verwendung von NVMe (Non-Volatile Memory Express) kommunizieren. NVMe ist eine Vorrichtungeschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die über PCIe an ein Computersystem angeschlossen sind.
-
Eine PCI-basierte Vorrichtung kann eine oder mehrere Funktionen beinhalten. Eine „Funktion“ beschreibt die Hardware und/oder Software eines Vorgangs, der von der PCI-basierten Vorrichtung bereitgestellt werden kann. Beispiele für Funktionen beinhalten unter anderem Massenspeichersteuerungen, Netzwerksteuerungen, Bildschirmsteuerungen, Speichersteuerungen, Steuerungen serielle Busse, drahtlose Steuerungen sowie Verschlüsselungs- und Entschlüsselungssteuerungen. In einigen Fällen kann eine PCI-basierte Vorrichtung mehr als eine Funktion beinhalten. Zum Beispiel kann eine PCI-basierte Vorrichtung eine Massenspeichersteuerung und einen Netzwerkadapter bereitstellen. Als weiteres Beispiel kann eine PCI-basierte Vorrichtung zwei Speichersteuerungen bereitstellen, um zwei verschiedene Speicherressourcen zu steuern. In einigen Umsetzungen kann eine PCI-basierte Vorrichtung bis zu acht Funktionen aufweisen.
-
In einigen Beispielen kann die PCI-basierte Vorrichtung Single-Root-E/A-Virtualisierung (single-root I/O virtualization - SR-IOV) beinhalten. SR-IOV ist eine erweiterte Funktion, die in eine PCI-basierten Vorrichtung beinhaltet sein kann. Mit SR-IOV kann eine physische Ressource (z. B. eine einzelne Netzwerkschnittstellensteuerung) als mehrere virtuelle Ressourcen (z. B. vierundsechzig Netzwerkschnittstellensteuerungen) angezeigt werden. Somit kann eine PCI-basierte Vorrichtung, die eine bestimmte Funktion bereitstellt (z. B. eine Netzwerkschnittstellensteuerung), einer Vorrichtung, welche die PCI-basierte Vorrichtung verwendet, als mehrere Vorrichtungen erscheinen, welche dieselbe Funktion bereitstellen. Die Funktionen einer SR-IOV-fähigen Speicheradaptervorrichtung können als physische Funktionen (PFs) oder virtuelle Funktionen (VFs) klassifiziert sein. Physische Funktionen sind Funktionen der Vorrichtung mit vollem Funktionsumfang, die erkannt, verwaltet und verändert werden können. Physische Funktionen verfügen über Konfigurationsressourcen, die verwendet werden können, um die Speicheradaptervorrichtung zu konfigurieren oder zu steuern. Physische Funktionen beinhalten denselben Konfigurationsadressbereich und Speicheradressbereich wie eine nichtvirtualisiertes Vorrichtung. Einer physischen Funktion können mehrere virtuelle Funktionen zugeordnet sein. Virtuelle Funktionen ähneln physischen Funktionen, sind jedoch leichte Funktionen, denen im Allgemeinen Konfigurationsressourcen fehlen und die im Allgemeinen durch die Konfiguration ihrer zugrunde liegenden physischen Funktionen gesteuert werden. Alle physischen Funktionen und/oder virtuellen Funktionen können einem entsprechenden Ausführungsthread (wie etwa zum Beispiel einer virtuellen Maschine) zugewiesen sein, der auf einer Hostvorrichtung ausgeführt wird.
-
In verschiedenen Umsetzungen können die Unterstützungssysteme 1574 Hardware zum Koordinieren der Vorgänge der Beschleunigungsengine 1560 beinhalten. Zum Beispiel können die Unterstützungssysteme 1574 einen Mikroprozessor beinhalten, der die Tätigkeiten der Beschleunigungsengine 1560 koordiniert, was das Bewegen von Daten auf der Beschleunigungsengine 1560 beinhaltet. In diesem Beispiel kann der Mikroprozessor eine integrierte Schaltung sein, die Mikrocode ausführen kann. Mikrocode ist ein Programmcode, der es einer integrierten Schaltung ermöglichen kann, eine gewisse Flexibilität bei den Vorgängen zu haben, welche die integrierte Schaltung ausführen kann. Da der Programmcode jedoch einen begrenzten Anweisungssatz verwendet, weißt der Mikroprozessor möglicherweise eine begrenztere Fähigkeit als der Hostprozessor 1572 auf. In einigen Beispielen ist das vom Mikroprozessor ausgeführte Programm auf der Hardware des Mikroprozessors oder auf einem nichtflüchtigen Speicherchip im Hostsystem 1500 gespeichert. In einigen Beispielen können der Mikroprozessor und die Beschleunigungsengine 1560 ein Chip sein, wie etwa eine integrierte Schaltung auf demselben Chip und in demselben Paket.
-
In einigen Beispielen können die Unterstützungssysteme 1574 dafür verantwortlich sein, Anweisungen vom Hostprozessor 1572 entgegenzunehmen, wenn Programme, die auf dem Hostprozessor 1572 ausgeführt werden, die Ausführung eines neuronalen Netzwerks anfordern. Zum Beispiel kann der Hostprozessor 1572 den Unterstützungssystemen 1574 einen Satz von Eingabedaten und eine Aufgabe bereitstellen, die an dem Satz von Eingabedaten ausgeführt werden soll. In diesem Beispiel können die Unterstützungssysteme 1574 ein neuronales Netzwerk identifizieren, das die Aufgabe ausführen kann, und können die Beschleunigungsengine 1560 programmieren, um das neuronale Netzwerk auf dem Satz von Eingabedaten auszuführen. In einigen Beispielen müssen die Unterstützungssysteme 1574 lediglich eine geeignete Verarbeitungsengine des neuronalen Netzwerks des Prozessors des neuronalen Netzwerks auswählen. In einigen Beispielen müssen die Unterstützungssysteme 1574 möglicherweise die Daten für das neuronale Netzwerk auf die Beschleunigungsengine 1560 laden, bevor die Beschleunigungsengine 1560 mit dem Ausführen des neuronalen Netzwerks beginnen kann. In diesen und anderen Beispielen können die Unterstützungssysteme 1574 ferner die Ausgabe des Ausführens des neuronalen Netzwerks empfangen und die Ausgabe an den Hostprozessor 1572 zurückgeben.
-
In einigen Beispielen können die Vorgänge der Unterstützungssysteme 1574 durch den Hostprozessor 1572 abgewickelt werden. In diesen Beispielen werden die Unterstützungssysteme 1574 möglicherweise nicht benötigt und können aus dem Hostsystem 1500 weggelassen werden.
-
In verschiedenen Beispielen kann das Hostsystem 1500 eine Kombination von Hostsystemen, Prozessorknoten, Speicherteilsystemen und E/A-Gehäuse beinhalten, die Benutzervorrichtungen, Computer von Dienstanbietern oder Computer von Drittanbietern darstellen.
-
Benutzervorrichtungen können Computervorrichtungen für den Zugriff auf eine Anwendung beinhalten (z. B. einen Webbrowser oder eine Anwendung für mobile Vorrichtungen). In einigen Beispielen kann die Anwendung gehostet, verwaltet und/oder von einem Computerressourcendienst oder Dienstanbieter bereitgestellt werden. Die Anwendung kann es einem Benutzer ermöglichen, mit dem Computer von Dienstanbietern zu interagieren, um zum Beispiel auf Webinhalte (z. B. Webseiten, Musik, Videos usw.) zuzugreifen. Die Benutzervorrichtung kann eine Computervorrichtung sein, wie zum Beispiel ein Mobiltelefon, ein Smartphone, ein persönlicher digitaler Assistent (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, eine Thin-Client-Vorrichtung, ein Tablet-Computer, ein E-Book-Reader (E-Book), eine Spielekonsole usw. In einigen Beispielen kann die Benutzervorrichtung über ein oder mehrere Netzwerke mit dem Computer von Dienstanbietern in Verbindung stehen. Zusätzlich kann die Benutzervorrichtung Teil des verteilten Systems sein, das von dem Computer des Dienstanbietesr verwaltet, gesteuert oder auf andere Weise Teil davon ist (z. B. eine Konsolenvorrichtung, die in den Computer von Dienstanbietern integriert ist).
-
Das Hostsystem 1500 kann auch einen oder mehrere Computer von Dienstanbietern darstellen. Ein Computer von Dienstanbietern kann eine systemeigene Anwendung bereitstellen, die dazu konfiguriert ist, auf Benutzervorrichtungen ausgeführt zu werden, mit denen Benutzer interagieren können. Der Computer von Dienstanbietern kann in einigen Beispielen Rechenressourcen bereitstellen, wie etwa, ohne darauf beschränkt zu sein, Client-Entitäten, Datenspeicherung mit geringer Latenz, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen und Leistungsmanagement für elektronische Inhalte, und so weiter. Der Computer von Dienstanbietern kann auch betrieben werden, um Webhosting, Datenbankanbindung und Entwicklung von und/oder Umsetzungsplattformen für Computeranwendungen, Kombinationen des Vorstehenden oder dergleichen bereitzustellen. In einigen Beispielen kann der Computer von Dienstanbietern als eine oder mehrere virtuelle Maschinen bereitgestellt sein, die in einer gehosteten Rechenumgebung umsetzt sind. Die gehostete Rechenumgebung kann eine oder mehrere schnell bereitgestellte und freigegebene Rechenressourcen beinhalten. Diese Rechenressourcen können Computer und Netzwerke und/oder Speichervorrichtungen beinhalten. Eine gehostete Computerumgebung kann auch als Cloud-Rechenumgebung bezeichnet sein. Der Computer von Dienstanbietern kann einen oder mehrere Server beinhalten, die möglicherweise in einem Cluster, als eine Serverfarm oder als einzelne Server angeordnet sind, die einander nicht zugeordnet sind, und kann die Anwendung und/oder Cloud-basierte Softwaredienste hosten. Diese Server können als Teil einer integrierten, verteilten Rechenumgebung konfiguriert sein. In einigen Beispielen kann der Computer von Dienstanbietern zusätzlich oder alternativ Rechenvorrichtungen beinhalten, wie etwa zum Beispiel ein Mobiltelefon, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, einen Servercomputer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielekonsole usw. In einigen Fällen kann der Computer von Dienstanbietern mit einem oder mehreren Computern von Drittanbietern in Verbindung stehen.
-
16 beinhaltet ein Diagramm eines beispielhaften Netzwerks 1600, das ein oder mehrere Hostsysteme beinhalten kann, wie etwa das in 15 veranschaulichte Hostsystem. Zum Beispiel beinhaltet das beispielhafte Netzwerk 1600 von 16 mehrere Knoten 1602a-1602h, von denen einer oder mehrere ein Hostsystem sein können, wie es etwa in 15 veranschaulicht ist. Andere der Knoten 1602a-1602h 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 1600 beinhaltet.
-
In verschiedenen Beispielen kann das Netzwerk 1600 verwendet werden, um Daten zu verarbeiten. Zum Beispiel können Eingabedaten an einem der Knoten 1602a-1602h oder von anderen Netzwerken 1608 empfangen werden, mit denen das Netzwerk 1600 kommunizieren kann. In diesem Beispiel können die Eingabedaten an einen Knoten im Netzwerk 1600 gerichtet sein, der eine Beschleunigungsengine beinhaltet, damit die Beschleunigungsengine arbeiten und ein Ergebnis erzeugen kann. Das Ergebnis kann dann an den Knoten oder ein anderes Netzwerk übertragen werden, von dem die Eingabedaten empfangen wurden. In verschiedenen Beispielen können Eingabedaten aus verschiedenen Quellen akkumuliert werden, was einen oder mehrere der Knoten 1602a-1602h und/oder Rechenvorrichtungen beinhaltet, die sich in den anderen Netzwerken 1608 befinden, und die akkumulierten Eingabedaten können zu einem oder mehreren Hostsystemen in dem Netzwerk 1600 geleitet werden. Die Ergebnisse der Hostsysteme können dann an die Quellen zurückverteilt werden, von denen die Eingabedaten erfasst wurden.
-
In verschiedenen Beispielen können einer oder mehrere der Knoten 1602a-1602h für Vorgänge verantwortlich sein, wie etwa das Sammeln von Eingabedaten für Hostsysteme, um mit diesen zu arbeiten, um zu verfolgen, welche Hostsysteme ausgelastet sind und welche mehr Arbeit annehmen können, um zu bestimmen, ob die Hostsysteme ordnungsgemäß und/oder am effizientesten arbeiten, um die Netzwerksicherheit und/oder andere Verwaltungsvorgänge zu überwachen.
-
In dem Beispiel von 16 sind die Knoten 1602a-1602h unter Verwendung einer Switched-Architektur mit Punkt-zu-Punkt-Verbindungen miteinander verbunden. Die Schwitched-Architektur beinhaltet mehrere Switches 1604a-1604d, die in einem mehrschichtigen Netzwerk, wie etwa einem Clos-Netzwerk, angeordnet sein können. Eine Netzwerkvorrichtung, die Pakete zwischen LAN(Local Area Network)-Segmenten filtert und weiterleitet, kann als Switch bezeichnet sein. Switches arbeiten im Allgemeinen auf der Datenverbindungsschicht (Schicht 2) und manchmal auf der Netzwerkschicht (Schicht 3) des OSI(Open System Interconnect)-Referenzmodells und unterstützen möglicherweise mehrere Paketprotokolle. Die Switches 1604a-1604d von 16 können mit den Knoten 1602a-1602h verbunden sein und mehrere Pfade zwischen zwei beliebigen Knoten bereitstellen.
-
Das Netzwerk 1600 kann außerdem ein oder mehrere Netzwerkvorrichtungen zur Verbindung mit anderen Netzwerken 1608, wie etwa einem Router 1606, beinhalten. Router verwenden Kopfzeilen und Weiterleitungstabellen, um den besten Pfad für das Weiterleiten der Pakete zu bestimmen, und verwenden Protokolle, wie etwa das Internet Control Message-Protokoll (ICMP), um miteinander zu kommunizieren und die beste Route zwischen zwei beliebigen Vorrichtungen zu konfigurieren. Der Router 1606 von 16 kann verwendet werden, um sich mit anderen Netzwerken 1608 zu verbinden, wie etwa Subnetzen, LANs, WANs (Wide Area Networks - Weitbereichsnetzwerke) und/oder dem Internet.
-
In einigen Beispielen können die Netzwerke 1600 ein beliebiges oder eine Kombination vieler verschiedener Arten von Netzwerken beinhalten, wie etwa Kabelnetzwerke, das Internet, drahtlose Netzwerke und andere private und/oder öffentliche Netzwerke. Die miteinander verbundenen Switches 1604a-1604d und der Router 1606, sofern vorhanden, können als eine Vermittlungsstruktur 1610, eine Struktur, Netzwerkstruktur oder einfach als ein Netzwerk bezeichnet sein. Im Zusammenhang mit einem Computernetzwerk können die Begriffe „Struktur“ und „Netzwerk“ in dieser Schrift austauschbar verwendet werden.
-
Die Knoten 1602a-1602h können eine beliebige Kombination aus Hostsystemen, Prozessorknoten, Speicherteilsystemen und E/A-Gehäusen sein, die Benutzervorrichtungen, Computer von Dienstanbietern oder Computer von Drittanbietern darstellen.
-
Benutzervorrichtungen können Computervorrichtungen für den Zugriff auf eine Anwendung 1632 beinhalten (z. B. einen Webbrowser oder eine Anwendung für mobile Vorrichtungen). In einigen Aspekten kann die Anwendung 1632 gehostet, verwaltet und/oder von einem Computerressourcendienst oder Dienstanbieter bereitgestellt werden. Die Anwendung 1632 kann es dem/den Benutzer(n) ermöglichen, mit dem/den Computer(n) von Dienstanbietern zu interagieren, um zum Beispiel auf Webinhalte (z. B. Webseiten, Musik, Videos usw.) zuzugreifen. Die Benutzervorrichtung(en) kann/können eine Computervorrichtung sein, wie zum Beispiel ein Mobiltelefon, ein Smartphone, ein persönlicher digitaler Assistent (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, eine Thin-Client-Vorrichtung, ein Tablet-Computer, ein E-Book-Reader (E-Book), eine Spielekonsole usw. In einigen Beispielen kann/können die Benutzervorrichtung(en) über ein Netzwerk oder mehrere Netzwerke 1608 mit dem/den Computer(n) von Dienstanbietern in Verbindung stehen. Zusätzlich kann/können die Benutzervorrichtung(en) Teil des verteilten Systems sein, das von dem/den Computer(n) des Dienstanbietesr verwaltet, gesteuert oder auf andere Weise Teil davon ist (z. B. eine Konsolenvorrichtung, die in den Computer von Dienstanbietern integriert ist).
-
Der/die Knoten von 16 kann/können außerdem einen oder mehrere Computer von Dienstanbietern darstellen. Ein oder mehrere Computer von Dienstanbietern können eine systemeigene Anwendung bereitstellen, die dazu konfiguriert ist, auf den Benutzervorrichtungen ausgeführt zu werden, mit denen der/die Benutzer interagieren können. Der/die Computer von Dienstanbietern kann/können in einigen Beispielen Rechenressourcen bereitstellen, wie etwa, ohne darauf beschränkt zu sein, Client-Entitäten, Datenspeicherung mit geringer Latenz, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen und Leistungsmanagement für elektronische Inhalte, und so weiter. Der/die Computer von Dienstanbietern kann/können auch betrieben werden, um Webhosting, Datenbankanbindung und Entwicklung von und/oder Umsetzungsplattformen für Computeranwendungen, Kombinationen des Vorstehenden oder dergleichen dem/den Benutzer(n) bereitzustellen. In einigen Beispielen kann/können der/die Computer von Dienstanbietern als eine oder mehrere virtuelle Maschinen bereitgestellt sein, die in einer gehosteten Rechenumgebung umsetzt sind. Die gehostete Rechenumgebung beinhaltet möglicherweise eine oder mehrere schnell bereitgestellte und freigegebene Rechenressourcen. Diese Rechenressourcen können möglicherweise Computer und Netzwerke und/oder Speichervorrichtungen beinhalten. Eine gehostete Computerumgebung kann auch als Cloud-Rechenumgebung bezeichnet sein. Der/die Computer von Dienstanbietern kann/können einen oder mehrere Server beinhalten, die möglicherweise in einem Cluster, als eine Serverfarm oder als einzelne Server angeordnet sind, die einander nicht zugeordnet sind, und kann die Anwendung 1632 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 Computer von Dienstanbietern zusätzlich oder alternativ Rechenvorrichtungen beinhalten, wie etwa zum Beispiel ein Mobiltelefon, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, einen Servercomputer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielekonsole usw. In einigen Fällen kann/können der/die Computer von Dienstanbietern mit einem oder mehreren Computern von Drittanbietern in Verbindung stehen.
-
In einer beispielhaften Konfiguration können die Knoten 1602a-1602h mindestens einen Speicher 1618 und eine oder mehrere Verarbeitungseinheiten (oder (einen) Prozessor(en) 1620) beinhalten. Der/die Prozessor(en) 1620 kann/können in Hardware, computerausführbaren Anweisungen, Firmware oder Kombinationen davon umgesetzt sein. Computerausführbare Anweisungen oder Firmwareumsetzungen des Prozessors/der Prozessoren 1620 können computerausführbare oder maschinenausführbare Anweisungen beinhalten, die in einer beliebigen geeigneten Programmiersprache geschrieben sind, um verschiedene beschriebene Funktionen auszuführen.
-
In einigen Fällen können der/die Hardwareprozessor(en) 1620 ein Einzelkernprozessor oder ein Mehrkernprozessor sein. Ein Mehrkernprozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors beinhalten. In einigen Beispielen können 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 außerdem mehrere ausführende logische Prozessoren (oder ausführende Threads) beinhalten. In einem derartigen Kern (z. B. derartige mit mehreren logischen Prozessoren) können auch mehrere Stufen der Ausführungspipeline und auch Caches niedrigerer Ebene geteilt werden.
-
Der Speicher 1618 kann Programmanweisungen, die von dem/den Prozessor(en) 1620 geladen und ausgeführt werden können, sowie Daten speichern, die während der Ausführung dieser Programme erzeugt werden kann. Abhängig von der Konfiguration und der Art der Knoten 1602a-1602h kann der Speicher 1618 flüchtig (wie etwa RAM) und/oder nichtflüchtig sein (wie etwa ROM, Flash-Speicher usw.). Der Speicher 1618 kann ein Betriebssystem 1628, einen oder mehrere Datenspeicher 1630, ein oder mehrere Anwendungsprogramme 1632, einen oder mehrere Treiber 1634 und/oder Dienste zum Umsetzen der in dieser Schrift offenbarten Merkmale beinhalten.
-
Das Betriebssystem 1628 kann die Grundfunktionen der Knoten 1602a-1602h unterstützen, wie etwa das Planen von Aufgaben, das Ausführen von Anwendungen und/oder Steuerungsperipherievorrichtungen. In einigen Umsetzungen kann ein Computer von Dienstanbietern eine oder mehrere virtuelle Maschinen hosten. In diesen Umsetzungen 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 1628 kann ein proprietäres Betriebssystem sein.
-
Die Datenspeicher 1630 können dauerhafte oder flüchtige Daten beinhalten, die von dem Betriebssystem 1628, Anwendungsprogrammen 1632 oder Treibern 1634 verwendet und/oder betrieben werden. Beispiele für derartige Daten beinhalten Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten usw. Die Informationen in den Datenspeichern 1630 können in einigen Umsetzungen Benutzervorrichtungen über das Netzwerk/die Netzwerke 1608 bereitgestellt werden. In einigen Fällen können die Datenspeicher 1630 zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber beinhalten. Alternativ oder zusätzlich können die Datenspeicher 1630 standardmäßige und/oder proprietäre Softwarebibliotheken, und/oder standardmäßige und/oder proprietäre API(Application User Interface - Anwendungsbenutzerschnittstellen)-Bibliotheken speichern. In den Datenspeichern 1630 gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
-
Die Treiber 1634 können Programme beinhalten, welche die Kommunikation zwischen Komponenten in einem Knoten bereitstellen. Zum Beispiel können einige Treiber 1634 eine Kommunikation zwischen dem Betriebssystem 1628 und dem zusätzlichen Speicher 1622, der Netzwerkvorrichtung 1624 und/oder der E/A-Vorrichtung 1626 bereitstellen. Alternativ oder zusätzlich können einige Treiber 1634 die Kommunikation zwischen Anwendungsprogrammen 1632 und dem Betriebssystem 1628 und/oder Anwendungsprogrammen 1632 und Peripherievorrichtungen bereitstellen, auf die der Computer von Dienstanbietern zugreifen kann. In vielen Fällen können die Treiber 1634 Treiber beinhalten, die wohlverstandene Funktionen bereitstellen (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Festkörpervorrichtungstreiber). In anderen Fällen können die Treiber 1634 proprietäre oder spezielle Funktionen bereitstellen.
-
Der/die Computer oder Server von Dienstanbietern können außerdem zusätzlichen Speicher 1622 beinhalten, der entfernbare Speicher und/oder nichtentfernbaren Speicher beinhalten kann. Der zusätzliche Speicher 1622 kann Magnetspeicher, optische Datenträger, Festkörperdatenträger, Flash-Speicher und/oder Bandspeicher beinhalten. Der zusätzliche Speicher 1622 kann in demselben Gehäuse wie der/die Knoten 1602a-1602h untergebracht sein oder kann sich in einem externen Gehäuse befinden. Der Speicher 1618 und/oder der zusätzliche Speicher 1622 und die zugeordneten computerlesbaren Medien können eine nichtflüchtige Speicherung von computerlesbaren Anweisungen, Datenstrukturen, Programmmodulen und anderen Daten für die Rechenvorrichtungen bereitstellen. In einigen Umsetzungen kann der Speicher 1618 mehrere unterschiedliche Speicherarten beinhalten, wie etwa SRAM, DRAM oder ROM.
-
Der Speicher 1618 und der zusätzliche Speicher 1622, sowohl entfernbar als auch nichtentfernbar, sind Beispiele für computerlesbare Speichermedien. Zum Beispiel können computerlesbare Speichermedien flüchtige oder nichtflüchtige, entfernbare oder nichtentfernbare Medien beinhalten, die in einem Verfahren oder einer Technik zum Speichern von Informationen umgesetzt sind, wobei die Informationen zum Beispiel computerlesbare Anweisungen, Datenstrukturen, Programmmodule oder anderen Daten beinhalten. Der Speicher 1618 und der zusätzliche Speicher 1622 sind Beispiele für Computerspeichermedien. Zusätzliche Arten von Computerspeichermedien, die in dem/den Knoten 1602a-1602h vorhanden sein können, können, ohne darauf beschränkt zu sein, PRAM, SRAM, DRAM, RAM, ROM, EEPROM, Flash-Speicher oder eine andere Speichertechnik, CD-ROM, DVD oder einen anderen optischen Speicher, Magnetkassetten, Magnetband, Magnetplattenspeicher oder andere Magnetspeichervorrichtungen, Festkörperlaufwerke oder ein anderes Medium beinhalten, das zum Speichern der gewünschten Informationen verwendet werden kann und auf das der/die Knoten 1602a-1602h zugreifen können. Computerlesbare Medien beinhalten auch Kombinationen einer beliebigen der vorstehend genannten Medienarten, was mehrerer Einheiten einer Medienart beinhaltet.
-
Alternativ oder zusätzlich können computerlesbare Kommunikationsmedien computerlesbare Anweisungen, Programmmodule oder andere Daten beinhalten, die innerhalb eines Datensignals übermittelt werden, wie zum Beispiel eine Trägerwelle oder eine andere Übermittlung. Wie in dieser Schrift verwendet, beinhalten computerlesbare Speichermedien jedoch keine computerlesbaren Kommunikationsmedien.
-
Die Knoten 1602a-1602h können auch (eine) E/A-Vorrichtung(en) 1626, wie etwa eine Tastatur, eine Maus, einen Stift, eine Spracheingabevorrichtung, eine Berührungseingabevorrichtung, einen Bildschirm, Lautsprecher, einen Drucker und dergleichen, beinhalten. Der/die Knoten 1602a-1602h können auch einen oder mehrere Kommunikationskanäle 1636 beinhalten. Ein Kommunikationskanal 1636 kann ein Medium bereitstellen, über das die verschiedenen Komponenten des/der Knoten(s) 1602a-1602h kommunizieren können. Der Kommunikationskanal oder die Kommunikationskanäle 1636 kann/können die Form eines Busses, eines Rings, einer Vermittlungsstruktur oder eines Netzwerks annehmen.
-
Der/die Knoten 1602a-1602h kann/können auch (eine) Netzwerkvorrichtung(en) 1624 beinhalten, die es dem/den Knoten 1602a-1602h ermöglicht/ermöglichen, mit einer gespeicherten Datenbank, einer anderen Rechenvorrichtung oder einem anderen Server, Benutzerendgeräten und/oder anderen Vorrichtungen in dem/den Netzwerk(en) 1600 zu kommunizieren.
-
In einigen Umsetzungen ist die Netzwerkvorrichtung 1624 eine Peripherievorrichtung, wie etwa eine PCI-basierte Vorrichtung. In diesen Umsetzungen beinhaltet die Netzwerkvorrichtung 1624 eine PCI-Schnittstelle zur Kommunikation mit einer Hostvorrichtung. Der Begriff „PCI“ oder „PCI-basiert“ kann verwendet werden, um jedes Protokoll in der PCI-Familie von Busprotokollen zu beschreiben, was den ursprünglichen PCI-Standard, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express (PCIe) oder jede andere Verbesserung oder abgeleiteten Protokolle beinhaltet, die auf den in dieser Schrift erörterten PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle zum Verbinden von Vorrichtungen, wie etwa einer lokalen Peripherievorrichtung, mit einer Hostvorrichtung. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation von verschiedenen Herstellern definiert und übernommen wurde. Hersteller stellen sicher, dass regelkonforme Vorrichtungen mit Computersystemen kompatibel sind, die das Busprotokoll umsetzen, und umgekehrt. Wie in dieser Schrift verwendet, beinhalten PCI-basierte Vorrichtungen außerdem Vorrichtungen, die unter Verwendung von NVMe (Non-Volatile Memory Express) kommunizieren. NVMe ist eine Vorrichtungeschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die über PCIe an ein Computersystem angeschlossen sind. Zum Beispiel kann das Busschnittstellenmodul NVMe umsetzen, und die Netzwerkvorrichtung 1624 kann unter Verwendung einer PCIe-Schnittstelle mit einem Computersystem verbunden sein.
-
Eine PCI-basierte Vorrichtung beinhaltet möglicherweise eine oder mehrere Funktionen. Eine „Funktion“ beschreibt Vorgänge, die von der Netzwerkvorrichtung 1624 bereitgestellt werden können. Beispiele für Funktionen beinhalten unter anderem Massenspeichersteuerungen, Netzwerksteuerungen, Bildschirmsteuerungen, Speichersteuerungen, Steuerungen serielle Busse, drahtlose Steuerungen sowie Verschlüsselungs- und Entschlüsselungssteuerungen. In einigen Fällen kann eine PCI-basierte Vorrichtung mehr als eine Funktion beinhalten. Zum Beispiel kann eine PCI-basierte Vorrichtung eine Massenspeichersteuerung und einen Netzwerkadapter bereitstellen. Als weiteres Beispiel kann eine PCI-basierte Vorrichtung zwei Speichersteuerungen bereitstellen, um zwei verschiedene Speicherressourcen zu steuern. In einigen Umsetzungen kann eine PCI-basierte Vorrichtung bis zu acht Funktionen aufweisen.
-
In einigen Umsetzungen kann die Netzwerkvorrichtung 1624 Single-Root-E/A-Virtualisierung (SR-IOV) beinhalten. SR-IOV ist eine erweiterte Funktion, die in eine PCI-basierten Vorrichtung beinhaltet sein kann. Mit SR-IOV kann eine physische Ressource (z. B. eine einzelne Netzwerkschnittstellensteuerung) als mehrere Ressourcen (z. B. vierundsechzig Netzwerkschnittstellensteuerungen) angezeigt werden. Somit kann eine PCI-basierte Vorrichtung, die eine bestimmte Funktion bereitstellt (z. B. eine Netzwerkschnittstellensteuerung), einer Vorrichtung, welche die PCI-basierte Vorrichtung verwendet, als mehrere Vorrichtungen erscheinen, welche dieselbe Funktion bereitstellen. Die Funktionen einer SR-IOV-fähigen Speicheradaptervorrichtung können als physische Funktionen (PFs) oder virtuelle Funktionen (VFs) klassifiziert sein. Physische Funktionen sind Funktionen der Vorrichtung mit vollem Funktionsumfang, die erkannt, verwaltet und verändert werden können. Physische Funktionen verfügen über Konfigurationsressourcen, die verwendet werden können, um die Speicheradaptervorrichtung zu konfigurieren oder zu steuern. Physische Funktionen beinhalten denselben Konfigurationsadressbereich und Speicheradressbereich wie eine nichtvirtualisiertes Vorrichtung. Einer physischen Funktion können mehrere virtuelle Funktionen zugeordnet sein. Virtuelle Funktionen ähneln physischen Funktionen, sind jedoch leichte Funktionen, denen im Allgemeinen Konfigurationsressourcen fehlen und die im Allgemeinen durch die Konfiguration ihrer zugrunde liegenden physischen Funktionen gesteuert werden. Alle physischen Funktionen und/oder virtuellen Funktionen können einem entsprechenden Ausführungsthread (wie etwa zum Beispiel einer virtuellen Maschine) zugewiesen sein, der auf einer Hostvorrichtung ausgeführt wird.
-
Umsetzungsbeispiele können in den folgenden nummerierten Abschnitten beschrieben werden:
-
Abschnitt 1. Ein Trainingssystem eines verteilten neuronalen Netzwerks, umfassend:
- eine Vielzahl von Verarbeitungsknoten, jeder der Verarbeitungsknoten umfassend:
- eine Kommunikationsschnittstelle; und
- eine Berechnungsschaltung für neuronale Netzwerke, wobei jeder der Verarbeitungsknoten zu Folgendem konfiguriert ist:
- ein Durchführen eines ersten Durchlaufs eines Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks mit einem ersten Satz von Gewichtungen beginnen, um einen ersten Ausgabedatensatz aus einem dem Verarbeitungsknoten zugeordneten Eingabedatensatz zu erzeugen; ein Ableiten eines Satzs von lokalen Gewichtungsgradienten für den Verarbeitungsknoten auf Grundlage eines Vergleichs des ersten Ausgabedatensatzes und eines Referenzausgabedatensatzes;
- ein Aktualisieren des ersten Satzes von Gewichtungen unter Verwendung des Satzes von lokalen Gewichtungsgradienten des Verarbeitungsknotens, um einen Satz von spekulativen Gewichtungen für den Verarbeitungsknoten abzuleiten;
- das Durchführen eines zweiten Durchlaufs des Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks mit dem Satz von spekulativen Gewichtungen, um einen zweiten Ausgabedatensatz zu erzeugen;
- ein Erhalten eines zweiten Satzes von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses, wobei der zweite Satz von Gewichtungen aus einem Satz von gemittelten Gewichtungsgradienten berechnet wird, die über mehrere Sätze von lokalen Gewichtungsgradienten berechnet werden, wobei jeder Satz von lokalen Gewichtungsgradienten durch einen entsprechenden Verarbeitungsknoten der Vielzahl von Verarbeitungsknoten abgeleitet wird;
- ein Vergleichen des zweiten Satzes von Gewichtungen mit dem Satz von spekulativen Gewichtungen des Verarbeitungsknotens;
- ein Bestimmen, dass ein Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen bei oder unter einem Schwellenwertunterschied liegt; und
- ein Fortführen des Trainingsprozesses unter Verwendung des zweiten Ausgabedatensatzes, der aus dem Satz von spekulativen Gewichtungen erzeugt wurde.
-
Abschnitt 2. Das Trainingssystem des verteilten neuronalen Netzwerks von Abschnitt 1, wobei jeder der Verarbeitungsknoten ferner dazu konfiguriert ist, nach einer vorbestimmten Anzahl von Durchläufen des Trainingsprozesses einen Gewichtungssynchronisationsvorgang unter Verwendung der Kommunikationsschnittstelle durchzuführen, um Gewichtungswerte über die Vielzahl von Verarbeitungsknoten des Trainingssystems des verteilten neuronalen Netzwerks zu synchronisieren.
-
Abschnitt 3. Das Trainingssystem des verteilten neuronalen Netzwerks nach einem der Abschnitte 1-2, wobei einer der Verarbeitungsknoten des Trainingssystems des verteilten neuronalen Netzwerks dazu konfiguriert ist, den zweiten Satz von Gewichtungen zu berechnen und den zweiten Satz von Gewichtungen an andere Verarbeitungsknoten des Trainingssystems des verteilten neuronalen Netzwerks zu übertragen.
-
Abschnitt 4. Das Trainingssystem des verteilten neuronalen Netzwerks nach einem der Abschnitte 1-2, wobei jeder der Verarbeitungsknoten des Trainingssystems des verteilten neuronalen Netzwerks dazu konfiguriert ist, den zweiten Satz von Gewichtungen zu berechnen.
-
Abschnitt 5. Ein Verfahren, umfassend:
- das Durchführen, durch einen Verarbeitungsknoten einer Vielzahl von Verarbeitungsknoten in einem Trainingssystem eines neuronalen Netzwerks, eines ersten Durchlaufs eines Trainingsprozesses unter Verwendung eines ersten Satzes von Gewichtungen, um einen ersten Ausgabedatensatz zu erzeugen;
- das Ableiten, durch den Verarbeitungsknoten, eines Satzes von lokalen Gewichtungsgradienten auf Grundlage eines Vergleichs des ersten Ausgabedatensatzes und eines Referenzausgabedatensatzes;
- das Aktualisieren, durch den Verarbeitungsknoten, des ersten Satzes von Gewichtungen unter Verwendung des Satzes von lokalen Gewichtungsgradienten, um einen Satz von spekulativen Gewichtungen abzuleiten; und
- das Durchführen, durch den Verarbeitungsknoten, eines zweiten Durchlaufs des Trainingsprozesses unter Verwendung des Satzes von spekulativen Gewichtungen, um einen zweiten Ausgabedatensatz zu erzeugen, während darauf gewartet wird, dass ein zweiter Satz von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses erhalten wird.
-
Abschnitt 6. Das Verfahren nach Abschnitt 5, ferner umfassend:
- das Erhalten eines zweiten Satzes von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses; und
- das Bestimmen eines Unterschieds zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen.
-
Abschnitt 7. Das Verfahren nach Abschnitt 6, ferner umfassend:
- das Bestimmen, dass der Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen bei oder unter einem Schwellenwertunterschied liegt; und
- das Fortführen des Trainingsprozesses unter Verwendung des zweiten Ausgabedatensatzes, der aus dem Satz von spekulativen Gewichtungen erzeugt wurde.
-
Abschnitt 8. Das Verfahren nach Abschnitt 6, ferner umfassend:
- das Bestimmen, dass der Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen einen Schwellenwertunterschied übersteigt; und
- ein Wiederholen des zweiten Durchlaufs des Trainingsprozesses unter Verwendung des zweiten Satzes von Gewichtungen anstelle des Satzes von spekulativen Gewichtungen.
-
Abschnitt 9. Das Verfahren nach einem der Abschnitte 5-8, wobei der zweite Satz von Gewichtungen von einem anderen Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks erhalten wird.
-
Abschnitt 10. Das Verfahren nach einem der Abschnitte 5-8, wobei der zweite Satz von Gewichtungen durch Folgendes erhalten wird:
- ein Akkumulieren einer Vielzahl von Sätzen von lokalen Gewichtungsgradienten, wobei jeder Satz von lokalen Gewichtungsgradienten von einem entsprechenden Verarbeitungsknoten der Vielzahl von Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks abgeleitet wird;
- ein Mitteln der Sätze von lokalen Gewichtungsgradienten, um einen Satz von gemittelten Gewichtungsgradienten abzuleiten; und
das Aktualisieren des ersten Satzes von Gewichtungen unter Verwendung des Satzes von gemittelten Gewichtungsgradienten, um den zweiten Satz von Gewichtungen zu erzeugen.
-
Abschnitt 11. Das Verfahren nach einem der Abschnitte 5-8, ferner umfassend:
- das Durchführen eines Gewichtungssynchronisationsprozesses nach einer vorbestimmten Anzahl von Durchläufen des Trainingsprozesses, um die Gewichtungswerte über die Vielzahl von Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks zu synchronisieren.
-
Abschnitt 12. Das Verfahren nach einem der Abschnitte 5-8, wobei die Vielzahl von Verarbeitungsknoten über ein Netzwerk kommunikativ miteinander gekoppelt sind.
-
Abschnitt 13. Eine Rechenvorrichtung, umfassend:
- eine Berechnungsschaltung des neuronalen Netzwerks;
- einen Prozessor; und
- ein codespeichernden Speicher, der, wenn er von dem Prozessor ausgeführt wird, die Rechenvorrichtung veranlasst, Vorgänge umzusetzen, was Folgendes beinhaltet:
- das Durchführen eines ersten Durchlaufs eines Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks mit einem ersten Satz von Gewichtungen, um einen ersten Ausgabedatensatz zu erzeugen;
- das Ableiten eines Satzes von lokalen Gewichtungsgradienten auf Grundlage eines Vergleichs des ersten Ausgabedatensatzes und auf Grundlage eines erwarteten Ausgabedatensatzes;
- das Aktualisieren des ersten Satzes von Gewichtungen unter Verwendung des Satzes von lokalen Gewichtungsgradienten, um einen Satz von spekulativen Gewichtungen abzuleiten;
- das Durchführen eines zweiten Durchlaufs des Trainingsprozesses unter Verwendung der Berechnungsschaltung des neuronalen Netzwerks mit dem Satz von spekulativen Gewichtungen, um einen zweiten Ausgabedatensatz zu erzeugen, während darauf gewartet wird, einen zweiten Satz von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses verfügbar wird; und
- das Erhalten des zweiten Satzes von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses, wobei der zweite Satz von Gewichtungen durch das Mitteln einer Vielzahl von Sätzen von lokalen Gewichtungsgradienten erzeugt wird, wobei jeder Satz von lokalen Gewichtungsgradienten durch einen entsprechenden Verarbeitungsknoten eines Trainingssystems des neuronalen Netzwerks abgeleitet wird.
-
Abschnitt 14. Die Rechenvorrichtung nach Abschnitt 13, wobei die Vorgänge ferner Folgendes beinhalten:
- das Bestimmen, dass ein Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen bei oder unter einem Schwellenwertunterschied liegt; und
- ein Ermöglichen, dass der Trainingsprozess fortfährt, unter Verwendung des zweiten Ausgabedatensatzes, der aus dem Satz von spekulativen Gewichtungen erzeugt wurde.
-
Abschnitt 15. Die Rechenvorrichtung nach Abschnitt 13, wobei die Vorgänge ferner Folgendes beinhalten:
- das Bestimmen, dass ein Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen einen Unterschiedsschwellenwert übersteigt; und
- das Wiederholen des zweiten Durchlaufs des Trainingsprozesses unter Verwendung des zweiten Satzes von Gewichtungen anstelle des Satzes von spekulativen Gewichtungen.
-
Abschnitt 16. Die Rechenvorrichtung nach einem der Abschnitte 13-15, wobei der zweite Satz von Gewichtungen von einem der Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks erhalten wird.
-
Abschnitt 17. Die Rechenvorrichtung nach einem der Abschnitte 13-15, wobei der zweite Satz von Gewichtungen durch Folgendes erhalten wird: das Akkumulieren der Vielzahl von Sätzen von lokalen Gewichtungsgradienten, das Mitteln der Sätze von lokalen Gewichtungsgradienten, um einen Satz von gemittelten Gewichtungsgradienten abzuleiten, und das Aktualisieren des ersten Satzes von Gewichtungen unter Verwendung des Satzes von Gewichtungen unter Verwendung des Satzes von gemittelten Gewichtungsgradienten, um den zweiten Satz von Gewichtungen zu erzeugen.
-
Abschnitt 18. Rechenvorrichtung nach einem der Abschnitte 13-15, wobei die Berechnungsschaltung des neuronalen Netzwerks ein Prozessor des neuronalen Netzwerks, ein Beschleuniger des neuronalen Netzwerks, eine Grafikverarbeitungseinheit (GPU), ein feldprogrammierbares Gate-Array (FPGA), ein Co-Prozessor, oder eine anwendungsspezifische integrierte Schaltung (ASIC) ist.
-
Abschnitt 19. Die Rechenvorrichtung nach einem der Abschnitte 13-15, wobei die Vorgänge ferner Folgendes beinhalten: das Durchführen eines Gewichtungssynchronisationsprozesses nach einer vorbestimmten Anzahl von Durchläufen des Trainingsprozesses, um die Gewichtungswerte über die Vielzahl von Verarbeitungsknoten des Trainingssystems des neuronalen Netzwerks zu synchronisieren.
-
Abschnitt 20. Die Rechenvorrichtung nach einem der Abschnitte 13-15, ferner umfassend eine Gewichtungsvergleichsschaltung, die dazu konfiguriert ist, einen Unterschied zwischen dem zweiten Satz von Gewichtungen und dem Satz von spekulativen Gewichtungen mit einem Schwellenwertunterschied zu vergleichen.
-
Abschnitt 21. Ein nichtflüchtiges computerlesbares Medium, das darin gespeicherte Anweisungen aufweist, die, wenn sie von einer Rechenvorrichtung in einem Trainingssystem des neuronalen Netzwerks ausgeführt werden, die Rechenvorrichtung veranlassen, Vorgänge umzusetzen, die Folgendes beinhalten:
- das Durchführen eines ersten Durchlaufs eines Trainingsprozesses unter Verwendung eines ersten Satzes von Gewichtungen, um einen ersten Ausgabedatensatz zu erzeugen;
- das Ableiten eines Satzes von lokalen Gewichtungsgradienten auf Grundlage eines Vergleichs des ersten Ausgabedatensatzes und eines erwarteten Ausgabedatensatzes;
- das Aktualisieren des ersten Satzes von Gewichtungen unter Verwendung des Satzes von lokalen Gewichtungsgradienten, um einen Satz von spekulativen Gewichtungen abzuleiten; und
- das Durchführen eines zweiten Durchlaufs des Trainingsprozesses unter Verwendung des Satzes von spekulativen Gewichtungen, um einen zweiten Ausgabedatensatz zu erzeugen, während darauf gewartet wird, dass ein zweiter Satz von Gewichtungen für den zweiten Durchlauf des Trainingsprozesses erhalten wird.
-
Die in dieser Schrift beschriebenen Module können Softwaremodule, Hardwaremodule oder eine geeignete Kombination davon sein. Wenn die Module Softwaremodule sind, können die Module auf einem nichtflüchtigen computerlesbaren Medium ausgeführt und von einem Prozessor in einem der in dieser Schrift beschriebenen Computersysteme verarbeitet werden. Es ist anzumerken, dass die beschriebenen Prozesse und Architekturen vor jeder Benutzerinteraktion entweder in Echtzeit oder in einem asynchronen Modus ausgeführt werden können. Die Module können auf die in den vorhergehenden Figuren vorgeschlagene Weise konfiguriert sein und/oder in dieser Schrift beschriebene Funktionen können von einem oder mehreren Modulen bereitgestellt sein, die als getrennte Module bestehen könnenund/oder in dieser Schrift beschriebene Modulfunktionen können auf mehrere Module verteilt sein.
-
Die Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nichteinschränkenden Sinne zu verstehen. Es ist jedoch ersichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom weiteren Geist und Schutzumfang der Offenbarung, wie in den Patentansprüchen dargelegt, abzuweichen.
-
Andere Varianten liegen im Geist der vorliegenden Offenbarung. Somit sind, obwohl die offenbarten Methoden für verschiedene Modifikationen und alternative Bauweisen anfällig sind, bestimmte veranschaulichte Beispiele davon in den Zeichnungen gezeigt und wurden vorstehend ausführlich beschrieben. Es versteht sich jedoch, dass nicht die Absicht verfolgt wird, die Offenbarung auf die konkrete(n) offenbarte(n) Form oder Formen einzuschränken, sondern im Gegenteil die Absicht darin besteht, sämtliche Modifikationen, alternativen Bauweisen und Äquivalente abzudecken, die, wie in den angefügten Patentansprüchen definiert, in den Geist und Schutzumfang der Offenbarung fallen.
-
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 abdecken, sofern in dieser Schrift nicht anderweitig angegeben oder im eindeutigen Widerspruch zum Kontext. Die Begriffe „umfassend“, „aufweisend“, „beinhaltend“ und „enthaltend“ sind als offene Begriffe auszulegen (d. h. in der Bedeutung „beinhaltend, ohne darauf beschränkt zu sein“), es sei denn, es ist etwas anderes angegeben. Der Begriff „verbunden“ ist als teilweise oder vollständig ineinander enthalten, aneinander angebracht oder zusammengefügt auszulegen, selbst, wenn etwas dazwischenliegt. Die Nennung von Wertebereichen in dieser Schrift soll lediglich als ein schnelles Verfahren des einzelnen Bezugnehmens auf jeden getrennten Wert dienen, der in den Bereich fällt, es sei denn, in dieser Schrift ist etwas anderes angegeben, und jeder getrennte Wert ist in die Beschreibung eingeschlossen, als ob er einzeln in dieser Schrift wiedergegeben wäre. Alle in dieser Schrift beschriebenen Verfahren können in einer beliebigen geeigneten Reihenfolge durchgeführt werden, sofern es in dieser Schrift anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht. Die Verwendung sämtlicher Beispiele oder beispielhafter Formulierung (z. B. „wie etwa“), die in dieser Schrift bereitgestellt sind, soll lediglich die Beispiele der Offenbarung besser veranschaulichen und stellt keine Einschränkung des Schutzumfang der Offenbarung dar, es sei denn, es ist etwas anderes beansprucht. Keinerlei Formulierung in der Beschreibung sollte so ausgelegt werden, dass sie ein beliebiges nichtbeanspruchtes Element als für die Umsetzung der Offenbarung wesentlich angibt.
-
Eine disjunktive Formulierung, wie etwa der Ausdruck „mindestens eines von X, Y oder Z“ soll, sofern nicht ausdrücklich anders angegeben, im Kontext verstanden werden, wie er im Allgemeinen verwendet wird, um darzustellen, dass ein Gegenstand, ein Begriff usw. entweder X, Y oder Z oder eine beliebige Kombination davon (z. B. X, Y, und/oder Z) sein kann. Somit soll eine derartige disjunktive Sprache im Allgemeinen nicht ausdrücken, dass bestimmte Ausführungen erfordern, dass mindestens eines von X, mindestens eines von Y oder mindestens eines von Z jeweils vorhanden ist.
-
In dieser Schrift sind verschiedene Beispiele dieser Offenbarung beschrieben, was die besten den Erfindern bekannte Art und Weise zum Ausführen der Offenbarung beinhaltet. Der Fachmann kann bei der Lektüre der vorstehenden Beschreibung Varianten dieser Beispiele erkennen. Die Erfinder gehen davon aus, dass der erfahrene Handwerker derlei Varianten im geeigneten Fall anwendet, und die Erfinder sehen vor, dass die Offenbarung, anders als in dieser Schrift konkret beschrieben, umsetzt werden kann. Dementsprechend beinhaltet die 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 Varianten davon durch die Offenbarung abgedeckt, sofern es in dieser Schrift nicht anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-