DE112020003105T5 - Schicht für schicht-debugging von neuronalen netzwerken - Google Patents

Schicht für schicht-debugging von neuronalen netzwerken Download PDF

Info

Publication number
DE112020003105T5
DE112020003105T5 DE112020003105.5T DE112020003105T DE112020003105T5 DE 112020003105 T5 DE112020003105 T5 DE 112020003105T5 DE 112020003105 T DE112020003105 T DE 112020003105T DE 112020003105 T5 DE112020003105 T5 DE 112020003105T5
Authority
DE
Germany
Prior art keywords
neural network
tensor
tensors
machine instructions
examples
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112020003105.5T
Other languages
English (en)
Inventor
Jindrich Zejda
Jeffrey T. Huynh
Drazen Borkovic
Se Jong Oh
Ron Diamant
Randy Renfu Huang
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of DE112020003105T5 publication Critical patent/DE112020003105T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • G06N3/105Shells for specifying net layout
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Es werden Techniken zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor offenbart. Ein Referenzprozessor kann mehrere erste Referenztensoren für das neuronale Netzwerk erzeugen. Das neuronale Netzwerk kann wiederholt reduziert werden, um mehrere Längen zu erzeugen. Für jede der Längen wandelt ein Compiler das neuronale Netzwerk in erste Maschinenanweisungen um, der Zielprozessor führt die ersten Maschinenanweisungen aus, um einen ersten Gerätetensor zu erzeugen, und das Debugger-Programm bestimmt, ob der erste Gerätetensor mit einem ersten Referenztensor übereinstimmt. Es wird eine kürzeste Länge bestimmt, bei der der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt. Die Tensorausgabe wird für eine untergeordnete Zwischendarstellung des kürzesten neuronalen Netzwerks aktiviert, und das neuronale Netzwerk wird in zweite Maschinenanweisungen umgewandelt, die vom Zielprozessor ausgeführt werden, um einen zweiten Gerätetensor zu erzeugen.

Description

  • HINTERGRUND
  • Das Debugging ist ein wichtiger Schritt zur Verbesserung der Funktionalität von Computervorrichtungen auf Hardware- oder Softwareebene. Da sowohl die Computervorrichtungen als auch die darauf laufende Software immer komplexer geworden sind, wurden auch die Debugging-Techniken um weitere Verfahren zur Erkennung von sogenannten Fehlern, Bugs oder Defekten erweitert. Zu den Debugging-Techniken gehört das Setzen eines Haltepunkts an einer Stelle innerhalb der kompilierten Anweisungen, um eine Anwendung an Ort und Stelle anzuhalten oder zu pausieren, während verschiedene mit der Anwendung verbundene Variablen und Datenstrukturen untersucht werden können. Andere Techniken können bewirken, dass ansonsten unzugängliche Daten in den Speicher geschrieben werden, während die Anwendung ausgeführt wird, so dass eine Prüfung der Daten nach Beendigung der Anwendung möglich ist. Während solche Techniken bei einfachen Systemen nützlich sind, bieten sie bei komplexeren Hardware- und Softwarekonfigurationen weniger Nutzen.
  • Künstliche neuronale Netzwerke (im Folgenden als neuronale Netzwerke bezeichnet) sind Rechnersysteme, deren Architektur auf biologischen neuronalen Netzwerken basiert. Neuronale Netzwerke können anhand von Trainingsdaten trainiert werden, um zu lernen, wie eine bestimmte Aufgabe auszuführen ist, z. B. die Identifizierung oder Klassifizierung von physischen Objekten, Aktivitäten, Personen usw. aus Bildern oder Videos. Ein neuronales Netzwerk, wie z. B. ein tiefes neuronales Netzwerk, kann mehrere Schichten von Verarbeitungsknoten enthalten. Jeder Verarbeitungsknoten in einer Schicht kann Berechnungen mit Eingabedaten durchführen, die von Verarbeitungsknoten in der vorhergehenden Schicht erzeugt wurden, um Ausgabedaten zu erzeugen. Ein Verarbeitungsknoten kann z. B. eine Reihe von arithmetischen Operationen wie Multiplikationen und Additionen durchführen, um eine Zwischenausgabe zu erzeugen, oder Nachbearbeitungsoperationen an der Zwischenausgabe durchführen, um eine Endausgabe zu erzeugen. Ein künstliches neuronales Netzwerk, wie z. B. ein tiefes neuronales Netzwerk, kann Tausende oder mehr Verarbeitungsknoten und Millionen oder mehr Parameter umfassen.
  • Neuronale Netzwerke können mit Hilfe von Computerprozessoren wie einer zentralen Verarbeitungseinheit (CPU) implementiert werden, um die Berechnungen durchzuführen. Neuronale Netzwerke können auch mit speziellen Prozessoren implementiert werden, die mehrere Verarbeitungseinheiten, z. B. systolische Arrays, enthalten können, die für parallele, verkettete Berechnungen optimiert sind. Solche Spezialprozessoren können in bestimmten Situationen bei gleichen Eingabedaten bessere Leistungen erbringen als Allzweckprozessoren.
  • Figurenliste
  • Verschiedene Ausführungsformen der vorliegenden Offenbarung werden in Bezug auf die Zeichnungen beschrieben, in denen:
    • 1 ein Beispiel für ein Berechnungsablaufmodell für ein neuronales Netzwerk veranschaulicht.
    • 2 einen Beispielsatz von Referenztensoren und Gerätetensoren veranschaulicht, die für ein neuronales Netzwerk erzeugt wurden.
    • 3A-3D beispielhafte Schritte zur Reduzierung der Länge eines neuronalen Netzwerks veranschaulichen.
    • 4 beispielhafte Schritte zur Fehlersuche bei der Ausführung eines verkürzten neuronalen Netzwerks veranschaulicht.
    • 5 beispielhafte Schritte zur Fehlersuche bei der Ausführung eines verkürzten neuronalen Netzwerks veranschaulicht.
    • 6A und 6B ein Beispiel für ein Verfahren zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor veranschaulichen.
    • 7 ein Blockdiagramm enthält, das ein Beispiel für ein Host-System zeigt.
    • 8 ein Blockdiagramm enthält, das ein Beispiel für eine Beschleunigungsmaschine zeigt.
    • 9 ein Blockdiagramm enthält, das ein Beispiel für eine integrierte Schaltung zeigt.
    • 10 ein Diagramm eines Beispielnetzwerks enthält.
  • DETAILLIERTE BESCHREIBUNG
  • Während der Systementwicklung kann die Fehlersuche im funktionalen Verhalten zweier Systeme eine große Hürde darstellen, insbesondere wenn sich die beiden Systeme grundlegend unterscheiden, z. B. Software und Hardware. In vielen Fällen können sich die Operationen und Berechnungen, die von einem High-Level-Softwaremodell vorgegeben werden, erheblich von der Hardware-Implementierung unterscheiden.
  • Die Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Spezialprozessor, z. B. einem Prozessor mit einem oder mehreren systolischen Arrays, ist aus mehreren Gründen schwierig. Ein Grund dafür ist, dass viele Zwischenergebnisse für ein Debugger-Programm nicht direkt zugänglich sind. Da systolische Arrays aus Hunderten von einzelnen Datenverarbeitungseinheiten (DPUs) bestehen können, kann es schwierig sein, festzustellen, welche DPU defekt ist, wenn mehrere DPUs an der Berechnung eines einzigen Ausgabewerts beteiligt sind. Darüber hinaus kann es schwierig sein, einen präzisionsbasierten Summierungsfehler zu erkennen, wenn nicht jede DPU-Ausgabe direkt untersucht werden kann, insbesondere bei der Ausführung eines neuronalen Netzwerks, das im Allgemeinen viele parallele und sequenzielle Summierungen umfasst. Bei der Addition einer Folge von Gleitkommazahlen mit endlicher Genauigkeit können Fehler bei der Summierung auftreten. Während diese Fehler in einem Modell oder einer Referenzberechnung reduziert werden können, indem die Zahlen von der kleinsten zur größten Zahl umgeordnet werden, kann die Reihenfolge, in der die Summierungen während der Ausführung eines neuronalen Netzwerks durchgeführt werden, unveränderlich sein und daher von der Referenzberechnung abweichen.
  • Neben dem Gesamtergebnis des neuronalen Netzwerks können auch Zwischenergebnisse des neuronalen Netzwerks zur Fehlersuche verwendet werden. Um auf die Zwischenergebnisse zugreifen zu können, wird der Programmcode in der Regel geändert und für das Ausführen neu kompiliert. Die Neukompilierung kann zeit- und ressourcenintensiv sein, insbesondere bei größeren neuronalen Netzwerken. Außerdem kann eine Änderung des Programmcodes die Leistung des ursprünglichen Programmcodes beeinträchtigen und in einigen Fällen das Verhalten des neuronalen Netzwerks so verändern, dass es zu fehlerhaften Ergebnissen führt.
  • Eine weitere Herausforderung bei der Fehlersuche in der Ausführung neuronaler Netzwerke auf Spezialprozessoren ist die große Menge an Berechnungen, die es zu sortieren gilt. Bei einem einzigen fehlerhaften Ausgabewert kann es beispielsweise Millionen von Berechnungen geben, die über Hunderte von Schichten und/oder Knoten des neuronalen Netzwerks durchgeführt wurden und zu diesem Wert beigetragen haben. Die Größe der Merkmalskarten und die Anzahl der Kanäle, die verwendet werden können, erhöhen die Komplexität des Sortierens durch Zwischenergebnisse. Neuronale Netzwerke können viele Faltungsoperationen enthalten, d. h. komplexe Operationen, bei denen die Abhängigkeiten der Ausgabewerte mit einer großen Menge von Eingabewerten und Zwischenwerten verwoben werden.
  • Die hier beschriebenen Beispiele befassen sich mit diesen und anderen Problemen, indem sie Techniken zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Spezialprozessor (hier als Zielprozessor bezeichnet) bereitstellen, wobei ein schichtweiser Ansatz verwendet wird, bei dem das neuronale Netzwerk zunächst über die Länge gekürzt wird, um die Rechenlast zu verringern, und dann anschließend in mehrere Zwischendarstellungen „erweitert“ wird. Der Ansatz ist vorteilhaft, da er es ermöglicht, dass Tensor-Ausgaben auf niedrigeren Zwischen-Darstellungen des neuronalen Netzwerks dem Debugger-Programm zur Verfügung stehen, während solche Tensoren normalerweise entweder aufgelöst, aufgeteilt und/oder mit anderen Tensoren zusammengeführt würden. Der Ansatz minimiert auch alle negativen Auswirkungen, die durch das Hinzufügen zusätzlicher Anweisungen zum kompilierten Code entstehen, indem er sich auf den spezifischen Satz von Schichten des neuronalen Netzwerks konzentriert, bei dem der Fehler festgestellt wurde.
  • In einigen Beispielen empfängt ein Debugger-Programm eine Anfrage zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor. Das Debugger-Programm kann eine Ausführung des neuronalen Netzwerks simulieren, um Referenztensoren zu erzeugen. Die Referenztensoren können auf einer Probeeingabe, z. B. einer Merkmalskarte, beruhen. Die Beispieleingabe kann vom Debugger-Programm automatisch generiert oder vom Benutzer bereitgestellt werden. In einigen Beispielen können die Referenztensoren während der Kompilierung durch den Compiler erzeugt werden.
  • Nach der Kompilierung des neuronalen Netzwerks werden die erzeugten Maschinenanweisungen auf dem Zielprozessor ausgeführt, um einen Ausgabetensor zu erzeugen. Der Ausgabetensor wird mit einem Referenzausgabetensor verglichen, und es kann eine Abweichung zwischen den beiden festgestellt werden. Anschließend wird das neuronale Netzwerk wiederholt gekürzt, indem die Anzahl der Schichten des neuronalen Netzwerks verringert wird (z. B. von 100 auf 99 Schichten, von 99 auf 98 Schichten usw.). Jedes gekürzte neuronale Netzwerk wird neu kompiliert und die erzeugten Maschinenanweisungen werden vom Zielprozessor erneut ausgeführt, um neue Tensoren („Gerätetensoren“) zu erzeugen. Jeder der Gerätetensoren wird mit einem entsprechenden Referenztensor verglichen, um seine Genauigkeit zu bestimmen und um festzustellen, ob die Ausgabe des verkürzten neuronalen Netzwerks versagt. Der iterative Prozess wird so lange fortgesetzt, bis das kürzeste neuronale Netzwerk ermittelt ist, dessen Ausgabe fehlschlägt.
  • Das ermittelte kürzeste (oder in einigen Beispielen „verkürzte“) neuronale Netzwerk wird dann „erweitert“, indem die Tensorausgabe für Zwischendarstellungen des neuronalen Netzwerks auf niedrigerer Ebene aktiviert wird. Dies kann während der Kompilierung geschehen, indem der Compiler den Maschinenanweisungenn zusätzliche Anweisungen hinzufügt, die den Zielprozessor veranlassen, Gerätetensoren für eine oder mehrere Zwischendarstellungen des verkürzten neuronalen Netzwerks auf niedrigerer Ebene auszugeben. Diese Gerätetensoren können mit entsprechenden Referenztensoren verglichen werden, um den letzten übereinstimmenden Gerätetensor und den ersten nicht übereinstimmenden Gerätetensor zu bestimmen. Das Debugger-Programm kann dann die Ursache der Nichtübereinstimmung oder des Berechnungsfehlers auf der Grundlage der Positionen der letzten Übereinstimmung und der ersten Nichtübereinstimmung, der Architektur des Zielprozessors und/oder der speziellen Zwischendarstellung, in der die Nichtübereinstimmung gefunden wurde, identifizieren.
  • In der folgenden Beschreibung werden verschiedene Beispiele beschrieben. Zu Erklärungszwecken werden spezifische Konfigurationen und Details angegeben, um ein gründliches Verständnis der Beispiele zu ermöglichen. Für den Fachmann ist es jedoch auch offensichtlich, dass das Beispiel ohne die spezifischen Details ausgeführt werden kann. Weiterhin können bekannte Merkmale weggelassen oder vereinfacht werden, um die beschriebenen Ausführungsformen nicht zu verdecken.
  • 1 zeigt ein Beispiel für ein Berechnungsablaufmodell 100 für ein neuronales Netzwerk. Neuronale Netzwerke sind von der Funktionsweise des menschlichen Gehirns inspiriert. Nach verschiedenen Modellen des Gehirns ist das Hauptberechnungselement des Gehirns das Neuron. Neuronen sind mit einer Reihe von Elementen miteinander verbunden, wobei Elemente, die in ein Neuron eintreten, als Dendriten und ein Element, das ein Neuron verlässt, als Axon bezeichnet werden. Ein Neuron nimmt Signale über Dendriten auf, führt eine Berechnung mit den Signalen durch und gibt ein Signal an einem Axon aus. Die Eingabe- und Ausgabesignale werden als Aktivierungen bezeichnet. Das Axon eines Neurons kann sich verzweigen und mit den Dendriten mehrerer Neuronen verbunden sein. Die Verbindung zwischen einem Zweig eines Axons und einem Dendriten wird als Synapse bezeichnet.
  • Eine Synapse kann das Signal, das die Synapse überquert, skalieren. Der Skalierungsfaktor wird als Gewicht bezeichnet und kann als die Art und Weise betrachtet werden, wie ein Gehirn lernen kann: unterschiedliche Gewichte resultieren aus unterschiedlichen Reaktionen auf Eingaben. Lernen kann die Gewichte ändern, aber die Organisation der Neuronen und Synapsen muss sich nicht ändern, um das Lernen zu erreichen. Die statische Struktur des Gehirns kann also als Modell für ein Programm verwendet werden, und die Gewichte können die Aufgaben widerspiegeln, die das Programm auszuführen gelernt hat.
  • Neuronale Netzwerke beruhen auf der Vorstellung, dass die Berechnung eines Neurons eine gewichtete Summe von Eingabewerten beinhaltet. Diese gewichteten Summen entsprechen der von den Synapsen durchgeführten Werteskalierung und der Zusammenführung dieser Werte im Neuron. Im Neuron wird eine funktionale Operation auf den kombinierten Eingaben ausgeführt. Im Gehirnmodell scheint die Operation eine nichtlineare Funktion zu sein, die das Neuron dazu veranlasst, nur dann eine Ausgabe zu erzeugen, wenn die Eingaben einen Schwellenwert überschreiten. In Analogie dazu können die Knoten eines neuronalen Netzwerks eine nichtlineare Funktion auf die gewichtete Summe der in die Knoten eingegebenen Werte anwenden.
  • Im dargestellten Beispiel umfasst das Modell 100 eine Eingabeschicht 104, eine mittlere Schicht, die oft als versteckte Schicht 106 bezeichnet wird, und eine Ausgabeschicht 108. Jede Schicht umfasst eine gewisse Anzahl von Knoten 102. In diesem Beispiel sind die Knoten 102 der Eingabeschicht 104 mit jedem Knoten 102 der versteckten Schicht 106 verbunden. Die Verbindungen, die im Gehirnmodell als Synapsen bezeichnet würden, werden als Gewichte 110 bezeichnet. Auch in diesem Beispiel hat jeder Knoten 102 der versteckten Schicht 106 eine Verbindung oder ein Gewicht 110 mit jedem Knoten 102 der Ausgabeschicht. Die Eingabeschicht 104 kann Eingaben empfangen und die Eingaben an die versteckte Schicht 106 weiterleiten. Die Implementierung eines neuronalen Netzwerks kann mehrere verborgene Schichten umfassen. Die von der verborgenen Schicht 106 (oder mehreren verborgenen Schichten) berechneten gewichteten Summen werden an die Ausgabeschicht 108 weitergeleitet, die einem Benutzer die endgültigen Ausgaben präsentieren kann. Die Ausgaben der Knoten 102 können in Anlehnung an das Gehirnmodell als Aktivierungen bezeichnet werden.
  • Ein Beispiel für eine Berechnung, die in jeder Schicht im Beispiel-Modell 100 stattfinden kann, ist wie folgt: y j = ƒ ( i = 1 3 W i j × x i + b )
    Figure DE112020003105T5_0001
  • In der obigen Gleichung ist Wij ein Gewicht, xi ist eine Eingabeaktivierung, yj ist eine Ausgabeaktivierung, f() ist eine nicht-lineare Funktion und b ist ein Bias-Term. Es können verschiedene nichtlineare Funktionen verwendet werden, um unterschiedliche Zwecke zu erreichen.
  • Das Modell 100 kann als gerichteter, gewichteter Graph bezeichnet werden. In einem gerichteten Graphen gibt jede Verbindung zu oder von einem Knoten eine Richtung an (z. B. in den Knoten hinein oder von dem Knoten weg). In einem gewichteten Graphen kann jede Verbindung ein Gewicht haben. Werkzeuge zur Entwicklung neuronaler Netzwerke können das neuronale Netzwerk als gerichteten, gewichteten Graphen visualisieren, um das Verständnis und die Fehlersuche zu erleichtern. In einigen Fällen können diese Tools auch zum Trainieren des neuronalen Netzwerks und zur Ausgabe trainierter Gewichtswerte verwendet werden. Die Ausführung des neuronalen Netzwerks besteht dann darin, die Gewichte zu verwenden, um Berechnungen mit den Eingabedaten durchzuführen.
  • Neuronale Netzwerke mit vielen Schichten können in der Lage sein, High-Level-Merkmale zu lernen, die eine höhere Komplexität und Abstraktion aufweisen als flachere Netzwerke. Beispielsweise kann einem neuronalen Netzwerk beigebracht werden, Bilder zu erkennen. In diesem Beispiel können Pixel eines Bildes in die Eingabeschicht des neuronalen Netzwerks eingespeist werden, und die Ausgaben der ersten Schicht können das Vorhandensein von Low-Level-Merkmalen im Bild anzeigen, z. B. Linien und Kanten. Auf nachfolgenden Ebenen können diese Merkmale kombiniert werden, um das wahrscheinliche Vorhandensein von Merkmalen auf höherer Ebene zu messen: Die Linien können zu Formen kombiniert werden, die wiederum zu Formensätzen kombiniert werden können. Angesichts all dieser Informationen kann das neuronale Netzwerk eine Wahrscheinlichkeit ausgeben, dass die High-Level-Merkmale ein bestimmtes Objekt oder eine bestimmte Szene darstellen. Das neuronale Netzwerk kann z. B. ausgeben, ob ein Bild eine Katze enthält oder nicht enthält.
  • Die Lernphase eines neuronalen Netzwerks wird als Training des neuronalen Netzwerks bezeichnet. Während des Trainings wird dem neuronalen Netzwerk beigebracht, eine Aufgabe auszuführen. Beim Lernen der Aufgabe werden Werte für die Gewichte (und eventuell auch die Verzerrungen) ermittelt. Das zugrunde liegende Programm für das neuronale Netzwerk (z. B. die Organisation der Knoten in Schichten, die Verbindungen zwischen den Knoten jeder Schicht und die von jedem Knoten ausgeführten Berechnungen) muss sich während des Trainings nicht ändern. Nach dem Training kann das neuronale Netzwerk die Aufgabe erfüllen, indem es ein Ergebnis unter Verwendung der beim Training ermittelten Werte für das Gewicht berechnet. Das neuronale Netzwerk kann z. B. die Wahrscheinlichkeit ausgeben, dass ein Bild ein bestimmtes Objekt enthält, die Wahrscheinlichkeit ausgeben, dass eine Audiosequenz ein bestimmtes Wort enthält, einen Begrenzungsrahmen um ein Objekt in einem Bild erstellen oder eine Aktion vorschlagen, die durchgeführt werden sollte, usw. Das Ausführen des Programms für das neuronale Netzwerk wird als Inferenz bezeichnet.
  • Es gibt mehrere Möglichkeiten, Gewichte zu trainieren. Ein Verfahren ist das so genannte überwachte Lernen. Beim überwachten Lernen sind alle Trainingsmuster gekennzeichnet, so dass die Eingabe jedes Trainingsmusters in ein neuronales Netzwerk zu einem bekannten Ergebnis führt. Ein anderes Verfahren ist das so genannte unüberwachte Lernen, bei dem die Trainingsmuster nicht gekennzeichnet sind und das Training darauf abzielt, eine Struktur in den Daten oder Cluster in den Daten zu finden. Halbüberwachtes Lernen liegt zwischen überwachtem und unüberwachtem Lernen. Beim halbüberwachten Lernen wird eine Teilmenge der Trainingsdaten mit einem Label versehen. Die nicht beschrifteten Daten können zur Festlegung von Clustergrenzen und die beschrifteten Daten zur Beschriftung der Cluster verwendet werden.
  • Neuronale Netzwerke werden für eine Vielzahl von Anwendungen eingesetzt, z. B. in den Bereichen Bild und Video, Sprache, Medizin, Spiele und Robotik. Im Bild- und Videobereich werden neuronale Netzwerke zur Bildklassifizierung, Objektlokalisierung und - erkennung, Bildsegmentierung und Handlungserkennung eingesetzt. Im Bereich Sprache und Sprechen wurden neuronale Netzwerke für die Spracherkennung, die maschinelle Übersetzung, die Verarbeitung natürlicher Sprache und die Audiogenerierung eingesetzt. Im medizinischen Bereich wurden neuronale Netzwerke in der Genomik und der medizinischen Bildgebung eingesetzt. Bei Spielen wurden neuronale Netzwerke zum Spielen von Video- und Brettspielen eingesetzt, darunter Spiele mit einer immensen Anzahl möglicher Züge wie Go. In der Robotik wurden neuronale Netzwerke für die Bewegungsplanung eines Roboters, die visuelle Navigation, die Stabilisierung der Steuerung und für Fahrstrategien für autonome Fahrzeuge eingesetzt.
  • 2 veranschaulicht einen Satz von Referenztensoren 210 und Gerätetensoren 220, die für ein neuronales Netzwerk 200 gemäß einigen Beispielen der vorliegenden Erfindung erzeugt wurden. Das neuronale Netzwerk 200 umfasst mehrere Schichten 202, die nur zur Veranschaulichung mit vereinfachten Strukturen und Knoten dargestellt sind. Jede der Schichten 202 kann einen oder mehrere Knoten enthalten, die Operationen an den Eingabedaten durchführen, um die Ausgabedaten für die Schicht zu erzeugen. Eine Probeeingabe 204 wird als Eingabe für das neuronale Netzwerk 200 bereitgestellt. Die Probeeingabe 204 kann ein Bild, eine Merkmalskarte und/oder ein oder mehrere Tensoren sein. Jede der Schichten 202 kann einen oder mehrere Tensoren 206 ausgeben, die in die nachfolgende Schicht als Eingabetensor eingespeist werden.
  • In einigen Beispielen werden die Referenztensoren 210 von einem Referenzprozessor auf der Grundlage der Probeeingabe 204 erzeugt. Die mit den einzelnen Schichten 202 verbundenen Operationen können auf dem Referenzprozessor mit einer höheren oder ähnlichen Präzision ausgeführt werden als auf dem Zielprozessor. Außerdem können alle Änderungen an den Operationen, die der Compiler während der Kompilierung des neuronalen Netzwerks 200 vornimmt, bei der Erzeugung der Referenztensoren 210 weggelassen werden. Dementsprechend stellen die Referenztensoren 210 eine Referenz dar, mit der die Gerätetensoren 220 verglichen werden können.
  • In einigen Beispielen werden die Gerätetensoren 220 durch Kompilieren des neuronalen Netzwerks 200 in Maschinenanweisungen und Ausführen der Maschinenanweisungen auf dem Zielprozessor erzeugt. In einigen Fällen ist der Gerätetensor 220, der der Gesamtausgabe des neuronalen Netzwerks 200 entspricht, verfügbar, während Zwischentensoren, die während der Ausführung der Maschinenanweisungen überschrieben werden, nicht verfügbar sind. Nach der Ausführung kann das Debugger-Programm den Tensor des Ausgabegeräts mit dem entsprechenden Referenztensor 212-11 vergleichen, wie durch Vergleich 230 angezeigt. Auf der Grundlage des Vergleichs 230 kann das Debugger-Programm feststellen, dass der Tensor des Ausgabegeräts nicht mit dem Referenztensor 212-11 (d. h.TD ≠ TR) übereinstimmt, weil beispielsweise die Differenz zwischen dem Tensor des Ausgabegeräts und dem entsprechenden Referenztensor eine Genauigkeitsschwelle überschreitet (z. B. 1 %, 2 %, 5 %, 10 % usw.). Dementsprechend kann das Debugger-Programm feststellen, dass die Ausgabe des neuronalen Netzwerks 200 fehlschlägt.
  • 3A-3D veranschaulichen beispielhafte Schritte zur Reduzierung der Länge des neuronalen Netzwerks 200. 3A zeigt die Gerätetensoren 320A, die für ein verkürztes neuronales Netzwerk 300A gemäß einigen Beispielen der vorliegenden Erfindung erzeugt werden. 3A zeigt zusätzlich die Referenztensoren 210. Das verkürzte neuronale Netzwerk 300A wird durch Entfernen der letzten beiden Schichten des neuronalen Netzwerks 200 erzeugt. Die Eingabe für das verkürzte neuronale Netzwerk 300A ist dieselbe Probeeingabe, die auch für das neuronale Netzwerk 200 verwendet wird. Das verkürzte neuronale Netzwerk 300A wird vom Compiler in Maschinenanweisungen neu kompiliert, und die Maschinenanweisungen werden vom Zielprozessor unter Verwendung der Probeeingabe als Eingabe ausgeführt, um die Gerätetensoren 320A zu erzeugen, die nur einen Ausgabegerätetensor enthalten können. Das Debugger-Programm vergleicht den Tensor des Ausgabegeräts mit dem entsprechenden Referenztensor 212-9, wie durch Vergleich 330A angezeigt. Auf der Grundlage des Vergleichs 330A kann das Debugger-Programm feststellen, dass der Tensor des Ausgabegeräts nicht mit dem Referenztensor 212-9 (d. h. TD ≠ TR) übereinstimmt, da die Differenz zwischen dem Tensor des Ausgabegeräts und dem Referenztensor 212-9 eine Genauigkeitsschwelle überschreitet. Dementsprechend kann das Debugger-Programm feststellen, dass die Ausgabe des neuronalen Netzwerks 300A fehlschlägt und dass das neuronale Netzwerk 300A weiter gekürzt werden muss.
  • 3B zeigt die Gerätetensoren 320B, die für ein verkürztes neuronales Netzwerk 300B gemäß einigen Beispielen der vorliegenden Erfindung erzeugt werden. 3B zeigt zusätzlich die Referenztensoren 210. Das verkürzte neuronale Netzwerk 300B wird durch Entfernen der ersten drei Schichten des verkürzten neuronalen Netzwerks 300A erzeugt. Die Eingabe für das verkürzte neuronale Netzwerk 300B ist der Referenztensor 212-3. Das verkürzte neuronale Netzwerk 300B wird vom Compiler in Maschinenanweisungen neu kompiliert, und die Maschinenanweisungen werden vom Zielprozessor unter Verwendung des Referenztensors 212-3 als Eingabe ausgeführt, um die Gerätetensoren 320B zu erzeugen, die nur einen Ausgabegerätetensor enthalten können. Das Debugger-Programm vergleicht den Tensor des Ausgabegeräts mit dem entsprechenden Referenztensor 212-9, wie durch Vergleich 330B angezeigt. Auf der Grundlage des Vergleichs 330B kann das Debugger-Programm feststellen, dass der Tensor des Ausgabegeräts nicht mit dem Referenztensor 212-9 (d. h. TD ≠ TR) übereinstimmt, da die Differenz zwischen dem Tensor des Ausgabegeräts und dem Referenztensor 212-9 eine Genauigkeitsschwelle überschreitet. Dementsprechend kann das Debugger-Programm feststellen, dass die Ausgabe des neuronalen Netzwerks 300B fehlschlägt und dass das neuronale Netzwerk 300B weiter gekürzt werden muss.
  • 3C zeigt die Gerätetensoren 320C, die für ein verkürztes neuronales Netzwerk 300C gemäß einigen Beispielen der vorliegenden Erfindung erzeugt werden. 3C zeigt zusätzlich die Referenztensoren 210. Das verkürzte neuronale Netzwerk 300C wird durch Entfernen der ersten drei Schichten des verkürzten neuronalen Netzwerks 300B erzeugt. Die Eingabe für das verkürzte neuronale Netzwerk 300C ist der Referenztensor 212-3. Das verkürzte neuronale Netzwerk 300C wird vom Compiler in Maschinenanweisungen neu kompiliert, und die Maschinenanweisungen werden vom Zielprozessor unter Verwendung des Referenztensors 212-3 als Eingabe ausgeführt, um die Gerätetensoren 320C zu erzeugen, die nur einen Ausgabegerätetensor enthalten können. Das Debugger-Programm vergleicht den Tensor des Ausgabegeräts mit dem entsprechenden Referenztensor 212-6, wie durch Vergleich 330C angezeigt. Auf der Grundlage des Vergleichs 330C kann das Debugger-Programm feststellen, dass der Tensor des Ausgabegeräts mit dem Referenztensor 212-6 (d. h. TD = TR) übereinstimmt, da die Differenz zwischen dem Tensor des Ausgabegeräts und dem Referenztensor 212-6 keine Genauigkeitsschwelle überschreitet. Dementsprechend kann das Debugger-Programm feststellen, dass die Ausgabe des neuronalen Netzwerks 300C nicht fehlschlägt und dass die Länge des neuronalen Netzwerks 300C erhöht werden soll.
  • 3D zeigt die Gerätetensoren 320D, die für ein verkürztes neuronales Netzwerk 300D gemäß einigen Beispielen der vorliegenden Erfindung erzeugt werden. 3D zeigt zusätzlich die Referenztensoren 210. Das verkürzte neuronale Netzwerk 300D wird durch Entfernen der letzten Schicht des verkürzten neuronalen Netzwerks 300B (oder durch Hinzufügen der letzten beiden Schichten zum verkürzten neuronalen Netzwerk 300C) erzeugt. Die Eingabe für das verkürzte neuronale Netzwerk 300D ist der Referenztensor 212-3. Das verkürzte neuronale Netzwerk 300D wird vom Compiler in Maschinenanweisungen neu kompiliert, und die Maschinenanweisungen werden vom Zielprozessor unter Verwendung des Referenztensors 212-3 als Eingabe ausgeführt, um die Gerätetensoren 320D zu erzeugen, die nur einen Ausgabegerätetensor enthalten können. Das Debugger-Programm vergleicht den Tensor des Ausgabegeräts mit dem entsprechenden Referenztensor 212-8, wie durch Vergleich 330D angezeigt. Auf der Grundlage des Vergleichs 330D kann das Debugger-Programm feststellen, dass der Tensor des Ausgabegeräts nicht mit dem Referenztensor 212-8 (d. h. TD ≠ TR) übereinstimmt, da die Differenz zwischen dem Tensor des Ausgabegeräts und dem Referenztensor 212-8 eine Genauigkeitsschwelle überschreitet. Dementsprechend kann das Debugger-Programm feststellen, dass die Ausgabe des neuronalen Netzwerks 300D fehlschlägt.
  • Wie in Bezug auf 3A-3D gezeigt, werden die Schichten des neuronalen Netzwerks wiederholt reduziert, bis das neuronale Netzwerk mit der kürzesten Länge gefunden ist, dessen Ausgabetensor mit dem entsprechenden Referenztensor übereinstimmt. Das neuronale Netzwerk kann um unterschiedliche Beträge gekürzt oder verlängert werden, um die kürzeste Länge effizient zu erreichen. Zum Beispiel kann eine binäre Suche verwendet werden, bei der die Länge bei jeder Iteration halbiert wird. In einigen Beispielen wird die Länge bei jeder Iteration um 1 dekrementiert, bis die kürzeste Länge ermittelt ist. In einigen Beispielen wird die Länge um einen Betrag verringert, der auf dem Ausmaß der Abweichung vom Referenztensor basiert. Zum Beispiel kann die Länge um größere Beträge verringert werden, wenn größere Abweichungen gefunden werden, und um kleinere Beträge, wenn kleinere Abweichungen gefunden werden.
  • 4 veranschaulicht beispielhafte Schritte zur Fehlersuche bei der Ausführung des verkürzten neuronalen Netzwerks 300D gemäß einigen Beispielen der vorliegenden Erfindung. In einigen Beispielen werden die Referenztensoren 410, 412, 414 von einem Referenzprozessor auf der Grundlage der Probeeingabe 404 erzeugt. Die Probeeingabe 404 kann dieselbe sein wie die Probeeingabe 204 oder der Referenztensor 212-3 oder, in einigen Beispielen, kann die Probeeingabe 404 ein neu generierter Tensor sein. Die mit jeder der Schichten des verkürzten neuronalen Netzwerks 300D verbundenen Operationen können auf dem Referenzprozessor ausgeführt werden, um Referenztensoren 410 zu erzeugen. Alternativ oder zusätzlich können die Referenztensoren 412, 414 für verschiedene Zwischendarstellungen 440 des verkürzten neuronalen Netzwerks 300D erzeugt werden. Die Zwischendarstellungen 440 können die Zwischendarstellung auf hoher Ebene, auf der die Referenztensoren 410 erzeugt werden, sowie eine erste Zwischendarstellung auf niedrigerer Ebene, auf der die Referenztensoren 412 erzeugt werden, und eine zweite Zwischendarstellung auf niedrigerer Ebene, auf der die Referenztensoren 414 erzeugt werden, umfassen.
  • Die Zwischendarstellungen 440 können die verschiedenen Darstellungen repräsentieren, die das neuronale Netzwerk durchläuft, während der Compiler den Programmcode, der im Allgemeinen in einer höheren Programmiersprache geschrieben wurde, in Maschinenanweisungen umwandelt, die vom Zielprozessor ausgeführt werden können. Zwischendarstellungen auf niedrigerer Ebene können die spezifische Konfiguration des Zielprozessors berücksichtigen und daher im Vergleich zu Zwischendarstellungen auf höherer Ebene zusätzliche Details und zusätzliche Operationen enthalten. In einem Beispiel kann die Umwandlung von einer hochrangigen Zwischendarstellung in eine niedrigere Zwischendarstellung die Umwandlung von linearem Text, der das neuronale Netzwerk darstellt, in eine Zwischengraphenstruktur umfassen, die eine Flussanalyse und eine Umordnung der Operationen ermöglicht. Zu den zusätzlichen Zwischendarstellungen können unter anderem gehören: eine geparste Zwischendarstellung, eine Zwischendarstellung für die Rechenoperationen, eine Zwischendarstellung für die Ressourcenzuweisung, eine Zwischendarstellung für den Scheduler, eine Zwischendarstellung für den Codegenerator, eine Zwischendarstellung für die Synchronisierung, Maschinencode für eine oder mehrere Ausführungsmaschinen, Laufzeitaktualisierungen für den Maschinencode und Ähnliches.
  • In einigen Beispielen werden die Gerätetensoren 420, 422, 424 erzeugt, indem die Tensorausgabe für die Zwischendarstellungen 440 aktiviert wird, wenn das verkürzte neuronale Netzwerk 300D in Maschinenanweisungen umgewandelt wird. In einigen Beispielen wird dies erreicht, indem der Compiler zusätzliche Anweisungen in die Maschinenanweisungen einfügt, die den Zielprozessor veranlassen, die Tensoren während der Ausführung auszugeben. Die zusätzlichen Anweisungen können Speicheroperationen umfassen. Die Speicheroperationen können beispielsweise durch Einfügen von Knoten in einen Datenflussgraphen eingeführt werden, wobei der Datenflussgraph auf der Grundlage des ursprünglichen Programmcodes erstellt wird. Nach dem Einfügen dieser zusätzlichen Knoten kann der Datenflussgraph in Maschinenanweisungen umgewandelt werden, und zwar auf die gleiche Weise, wie dies geschehen würde, wenn der Datenflussgraph nicht um zusätzliche Knoten erweitert worden wäre.
  • Nachdem das verkürzte neuronale Netzwerk 300D in Maschinenanweisungen kompiliert wurde, werden die Maschinenanweisungen auf dem Zielprozessor ausgeführt, wodurch Gerätetensoren 420, 422, 424 erzeugt werden. Bei jeder Zwischendarstellung kann das Debugger-Programm Gerätetensoren mit ihren entsprechenden Referenztensoren vergleichen, um den letzten übereinstimmenden Tensor und den ersten nicht übereinstimmenden Tensor („Übereinstimmungs-Nichtübereinstimmungs-Paar“) bei jeder Zwischendarstellung zu finden. So kann das Debugger-Programm beispielsweise Gerätetensoren 423 für die erste untergeordnete Zwischendarstellung und Gerätetensoren 425 für die zweite untergeordnete Zwischendarstellung identifizieren. Das Debugger-Programm kann den Benutzer über die gefundenen Übereinstimmungspaare und die entsprechenden Berechnungen bei jeder der Zwischendarstellungen informieren.
  • 5 veranschaulicht beispielhafte Schritte zur Fehlersuche bei der Ausführung des verkürzten neuronalen Netzwerks 300D gemäß einigen Beispielen der vorliegenden Erfindung. Im gezeigten Beispiel wird die Tensorausgabe nacheinander für jede der Zwischendarstellungen 540 auf der Grundlage des identifizierten Übereinstimmungs-Nichtübereinstimmungs-Paares (angezeigt durch ein abgedunkeltes rechteckiges Kästchen oder Behältnis) für die vorherige (übergeordnete) Zwischendarstellung aktiviert. Das verkürzte neuronale Netzwerk 300D kann neu kompiliert werden, nachdem das Übereinstimmungs-Nichtübereinstimmungs -Paar für eine bestimmte Zwischendarstellung identifiziert wurde, so dass die Tensorausgabe über einen lokalisierten Satz von Operationen aktiviert werden kann, die direkt mit dem Übereinstimmungs-Nichtübereinstimmungs-Paar für die vorherige Zwischendarstellung zusammenhängen. Alternativ können, wie der Übergang von den Gerätetensoren 522 zu den Gerätetensoren 524 zeigt, alle Tensoren für eine niedrigere Zwischendarstellung berechnet werden, unabhängig von einem identifizierten Übereinstimmungs-Nichtübereinstimmungs-Paar. Entsprechende Referenztensoren werden für die Gerätetensoren in jeder der Zwischendarstellungen 540 erzeugt, wahlweise auch auf der Grundlage der identifizierten Übereinstimmungs-Nichtübereinstimmungs-Paare.
  • Im dargestellten Beispiel wird die Tensorausgabe während der Kompilierung für alle Operationen aktiviert, so dass die Gerätetensoren 520 während der Ausführung der kompilierten Maschinenanweisungen erzeugt werden. Bei der nächstniedrigeren Zwischendarstellung wird die Tensorausgabe während der Neukompilierung für alle Operationen aktiviert, so dass die Gerätetensoren 522 während der erneuten Ausführung der kompilierten Maschinenanweisungen erzeugt werden. Für die nächst niedrigere Zwischendarstellung werden die Gerätetensoren 524 vom Referenzprozessor simuliert, da die Tensorausgabe nicht verfügbar ist. Die Gerätetensoren 524 können sich direkt auf das in den Gerätetensoren 522 identifizierte Übereinstimmungs-Nichtübereinstimmungs-Paar beziehen. Wie der Übergang von den Gerätetensoren 522 zu den Gerätetensoren 524 zeigt, können Tensoren in untergeordnete Zwischendarstellungen in kleinere Teiltensoren (auch Kacheln genannt) zerlegt werden. Eine untergeordnete Zwischendarstellung kann auch Tensoren zusammenführen oder, in einigen seltenen Fällen, Tensoren etwas größer machen. Für die nächst niedrigere Zwischendarstellung wird die Tensorausgabe während der Neukompilierung nur für Operationen aktiviert, die sich direkt auf das in den Gerätetensoren 524 identifizierte Übereinstimmungs-Nichtübereinstimmungs-Paar beziehen, so dass die Gerätetensoren 526 während der erneuten Ausführung der kompilierten Maschinenanweisungen erzeugt werden.
  • Für die nächst niedrigere Zwischendarstellung wird die Tensorausgabe während der Neukompilierung nur für Operationen aktiviert, die sich direkt auf das in den Gerätetensoren 526 identifizierte Übereinstimmungs-Nichtübereinstimmungs-Paar beziehen, so dass die Gerätetensoren 528 während der erneuten Ausführung der kompilierten Maschinenanweisungen erzeugt werden. Für die nächst niedrigere Zwischendarstellung werden die Gerätetensoren 530 vom Referenzprozessor simuliert, da die Tensorausgabe nicht verfügbar ist. Die Gerätetensoren 530 können sich direkt auf das in den Gerätetensoren 528 identifizierte Übereinstimmungs-Nichtübereinstimmungs-Paar beziehen. Für die nächst niedrigere Zwischendarstellung wird die Tensorausgabe während der Neukompilierung nur für Operationen aktiviert, die sich direkt auf das in den Gerätetensoren 530 identifizierte Übereinstimmungs-Nichtübereinstimmungs-Paar beziehen, so dass die Gerätetensoren 532 während der erneuten Ausführung der kompilierten Maschinenanweisungen erzeugt werden. Für die nächst niedrigere Zwischendarstellung wird die Tensorausgabe während der Neukompilierung nur für Operationen aktiviert, die sich direkt auf das in den Gerätetensoren 532 identifizierte Übereinstimmungs-Nichtübereinstimmungs-Paar beziehen, so dass die Gerätetensoren 534 während der erneuten Ausführung der kompilierten Maschinenanweisungen erzeugt werden.
  • 6A und 6B veranschaulichen ein Beispiel für ein Verfahren 600 zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor. Ein oder mehrere Schritte des Verfahrens 600 können in einer anderen Reihenfolge als im dargestellten Beispiel durchgeführt werden, und ein oder mehrere Schritte des Verfahrens 600 können während der Durchführung des Verfahrens 600 ausgelassen werden.
  • In Schritt 602 wird eine Anforderung zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf dem Zielprozessor empfangen. In einigen Beispielen wird die Anforderung von einem Debugger-Programm empfangen, das auf einem Host-System läuft. In einigen Beispielen gibt die Anfrage ein neuronales Netzwerk und/oder den Zielprozessor an. Die Anfrage kann zum Beispiel angeben, wo der Programmcode für das neuronale Netzwerk gespeichert ist. In einigen Beispielen umfasst das neuronale Netzwerk mehrere Schichten. Jede der mehreren Schichten kann eine oder mehrere Operationen umfassen.
  • In Schritt 604 werden mehrere ersten Referenztensoren für das neuronale Netzwerk auf der Grundlage einer ersten Probeeingabe erzeugt. In einigen Beispielen werden die mehreren ersten Referenztensoren mit einem Referenzprozessor erzeugt, der sich von dem Zielprozessor unterscheidet. In einigen Beispielen werden die mehreren ersten Referenztensoren vom Debugger-Programm erzeugt und/oder empfangen. Das Debugger-Programm kann beispielsweise eine Ausführung des neuronalen Netzwerks simulieren, um erste Referenztensoren zu erzeugen. In einigen Beispielen werden die ersten Referenztensoren vom Compiler während der Kompilierung erzeugt.
  • In Schritt 606 werden die mehreren Schichten des neuronalen Netzwerks wiederholt reduziert, um mehrere Längen des neuronalen Netzwerks zu erzeugen. Für jede bestimmte Länge der mehreren Längen werden die Schritte 608 bis 612 durchgeführt. Das neuronale Netzwerk kann um unterschiedliche Beträge gekürzt werden, um auf effiziente Weise das kürzeste neuronale Netzwerk zu erhalten, dessen Ausgabe fehlschlägt. In einigen Beispielen wird das neuronale Netzwerk bei jeder Iteration um eine einzige Schicht verkürzt. In einigen Beispielen wird das neuronale Netzwerk bei jeder Iteration um zwei oder mehr Schichten verkürzt. Um das kürzeste neuronale Netzwerk zu finden, dessen Ausgabe fehlschlägt, kann eine binäre Suche durchgeführt werden, bei der die Länge bei jeder Iteration halbiert wird. Wenn ein verkürztes neuronales Netzwerk erreicht wird, dessen Ausgabe nicht fehlschlägt, kann das neuronale Netzwerk verlängert werden, indem zuvor entfernte Schichten wieder hinzugefügt werden, wie unter Bezugnahme auf 3A-3D beschrieben.
  • In Schritt 608 wird das neuronale Netzwerk mit der bestimmten Länge in erste Maschinenanweisungen umgewandelt (oder kompiliert). In einigen Beispielen wird das neuronale Netzwerk mit der bestimmten Länge durch den Compiler umgewandelt. In einigen Beispielen wird der Compiler auf dem Host-System betrieben.
  • In Schritt 610 werden die ersten Maschinenanweisungen unter Verwendung des Zielprozessors ausgeführt, um einen ersten Gerätetensor zu erzeugen. In einigen Beispielen werden die ersten Maschinenanweisungen auf der Grundlage der ersten Probeeingabe oder auf einem der mehreren ersten Referenztensoren ausgeführt.
  • In Schritt 612 wird festgestellt, ob der erste Gerätetensor mit einem ersten Referenztensor der mehreren ersten Referenztensoren übereinstimmt. Der erste Referenztensor kann derjenige Referenztensor der mehreren ersten Referenztensoren sein, der dem ersten Gerätetensor entspricht. In einigen Beispielen bestimmt das Debugger-Programm, ob der erste Gerätetensor mit dem ersten Referenztensor übereinstimmt. In einigen Beispielen stimmen die beiden Tensoren überein, wenn der Unterschied zwischen ihnen eine Genauigkeitsschwelle nicht überschreitet.
  • In Schritt 614 wird eine verkürzte Länge der mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt, identifiziert. In einigen Beispielen wird eine kürzeste Länge der mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt, identifiziert. In einigen Beispielen wird der Schritt 614 vom Debugger-Programm ausgeführt.
  • In Schritt 616 werden mehrere zweite Referenztensoren für eine untergeordnete Darstellung des neuronalen Netzwerks auf der Grundlage einer zweiten Probeeingabe erzeugt. Die zweite Probeeingabe kann eine andere oder dieselbe sein wie die erste Probeeingabe. In einigen Beispielen werden die mehreren zweiten Referenztensoren mit Hilfe des Referenzprozessors erzeugt. In einigen Beispielen ist die Darstellung des neuronalen Netzwerks auf unterer Ebene eine Zwischendarstellung des neuronalen Netzwerks, die niedriger ist als die Zwischendarstellung auf höchster Ebene (z. B. Programmcode) und höher als die Zwischendarstellung auf niedrigster Ebene (z. B. Maschinenanweisungen). In einigen Beispielen werden die mehreren zweiten Referenztensoren vom Debugger-Programm erzeugt. Das Debugger-Programm kann beispielsweise eine Ausführung des neuronalen Netzwerks simulieren, um zweite Referenztensoren zu erzeugen. In einigen Beispielen werden die zweiten Referenztensoren vom Compiler während der Kompilierung erzeugt.
  • In Schritt 618 wird das neuronale Netzwerk mit der verkürzten Länge in zweite Maschinenanweisungen umgewandelt (oder kompiliert). In einigen Beispielen wird das neuronale Netzwerk mit der verkürzten Länge durch den Compiler umgewandelt.
  • In Schritt 620 wird die Tensorausgabe für die untergeordnete Darstellung aktiviert, wenn die zweiten Maschinenanweisungen durch den Zielprozessor ausgeführt werden. In einigen Beispielen fügt der Compiler während der Kompilierung zusätzliche Anweisungen in die zweiten Maschinenanweisungen ein, die eine Tensor-Ausgabe für die Darstellung auf unterer Ebene bewirken. Eine oder mehrere der zusätzlichen Anweisungen können zum Beispiel einer Speicheroperation entsprechen. In einigen Beispielen können die zusätzlichen Anweisungen außerdem die Tensorausgabe für mehrere Darstellungen auf niedrigerer Ebene ermöglichen.
  • In Schritt 622 werden die zweiten Maschinenanweisungen unter Verwendung des Zielprozessors ausgeführt, um einen zweiten Gerätetensor für die Darstellung auf unterer Ebene zu erzeugen. In einigen Beispielen werden die zweiten Maschinenanweisungen auf der Grundlage der zweiten Probeeingabe oder auf der Grundlage eines der mehreren zweiten Referenztensoren ausgeführt. Bei Beispielen, in denen die zusätzlichen Anweisungen die Tensorausgabe für mehrere untergeordnete Darstellungen ermöglichen, kann das Ausführen der zweiten Maschinenanweisungen die Erzeugung eines dritten Gerätetensors für eine zweite untergeordnete Darstellung des neuronalen Netzwerks bewirken. In solchen Beispielen kann die Darstellung auf unterer Ebene eine erste Darstellung auf unterer Ebene sein.
  • In Schritt 624 wird festgestellt, ob der zweite Gerätetensor mit einem zweiten Referenztensor der mehreren zweiten Referenztensoren übereinstimmt. Der zweite Referenztensor kann derjenige Referenztensor der mehreren zweiten Referenztensoren sein, der dem zweiten Gerätetensor entspricht. In einigen Beispielen bestimmt das Debugger-Programm, ob der zweite Gerätetensor mit dem zweiten Referenztensor übereinstimmt. In einigen Beispielen stimmen die beiden Tensoren überein, wenn der Unterschied zwischen ihnen eine Genauigkeitsschwelle nicht überschreitet. Bei Beispielen, in denen die zusätzlichen Anweisungen die Tensorausgabe für eine zweite untergeordnete Darstellung des neuronalen Netzwerks ermöglichen, die die Erzeugung eines dritten Gerätetensors bewirkt, kann auch bestimmt werden, ob der dritte Gerätetensor mit einem dritten Referenztensor der mehreren zweiten Referenztensoren übereinstimmt.
  • 7 umfasst ein Blockdiagramm, das ein Beispiel für ein Host-System 700 zeigt, auf dem ein Compiler 730 und ein Debugger 746, wie im Vorliegenden beschrieben, laufen können. Das abgebildete Host-System 700 ist ein Beispiel für eine Computervorrichtung und umfasst einen Prozessor 702, einen Prozessorspeicher 704, mindestens eine Speichervorrichtung 706, verschiedene Eingabe/Ausgabevorrichtungen 708 und mindestens eine Netzwerkschnittstelle 710. Im Beispiel von 7 umfasst das Host-System 700 auch eine Beschleunigungsmaschine 712, bei der es sich um eine integrierte Schaltung handelt, die bestimmte vom Host-System 700 ausgeführte Operationen oder Berechnungen beschleunigen kann. In verschiedenen Beispielen kann das Host-System 700 unter anderem als Server in einem Rechenzentrum, als Desktop-Computer, Laptop, Tablet-Computer oder Smartphone implementiert sein. In einigen Beispielen können Operationen oder Komponenten, die im Folgenden als im Host-System 700 ausgeführt oder enthalten beschrieben werden, auch in anderen Computervorrichtungen ausgeführt oder enthalten sein. So kann beispielsweise der Compiler 730 auf dem Host-System 700 ausgeführt werden, während sich die Beschleunigungsmaschine 712 auf einem anderen Host-System befindet.
  • Der Prozessor 702 ist eine integrierte Schaltung, die Programmcode in Form von Anweisungen ausführen kann. Der Programmcode kann für verschiedene Softwareanwendungen oder -tools verwendet werden, z. B. für das Betriebssystem 746, den Debugger 746 oder den Compiler 730. Während der Prozessor 702 ein Programm ausführt, können die Anweisungen für das Programm im Prozessorspeicher 704 gespeichert werden. Die Anweisungen können auch an anderer Stelle gespeichert werden, z. B. auf der Speichervorrichtung 706, und bei Bedarf vom Prozessor 702 in den Prozessorspeicher 704 geladen werden. Der Prozessor 702 kann den Prozessorspeicher 704 auch zur vorübergehenden Speicherung anderer Daten nutzen, mit denen der Prozessor 702 arbeitet. In verschiedenen Beispielen handelt es sich bei dem Prozessorspeicher 704 um einen flüchtigen Speicher, z. B. einen Direktzugriffsspeicher, obwohl alternativ oder zusätzlich auch nichtflüchtige Speichertypen für den Prozessorspeicher 704 verwendet werden können.
  • Die Speichervorrichtung 706 ist ein Beispiel für eine Vorrichtung, die einen nichtflüchtigen Speicher enthalten kann. Die Speichervorrichtung 706 kann zum Beispiel ein Magnetplattenlaufwerk, ein Festkörperlaufwerk oder ein optisches Laufwerk sein, um nur einige Beispiele zu nennen. Die Speichervorrichtung 706 kann außerdem nichtflüchtig sein, so dass Programmcode und andere auf der Speichervorrichtung 706 gespeicherte Daten vorhanden bleiben, wenn die Speichervorrichtung 706 nicht eingeschaltet ist.
  • Die Speichervorrichtung 706 ist ein Beispiel für eine Peripherievorrichtung, d. h. für Komponenten, die mit dem Host-System 700 verbunden werden können, um dem Host-System 700 zusätzliche Funktionalität zu verleihen. Weitere Beispiele für Peripherievorrichtungen sind die Eingabe-/Ausgabevorrichtungen 708 und die Netzwerkschnittstelle 710. Die Eingabe-/Ausgabevorrichtungen 708 können Benutzer-Eingabe- und Ausgabevorrichtungen wie Tastaturen, Mäuse, Touchscreens, Mikrofone, Bildschirme, Lautsprecher, Drucker und Scanner und andere Beispiele umfassen. Die Netzwerkschnittstelle 710, die mit einer Netzwerkkarte implementiert werden kann, kann den Zugang zu einem oder mehreren Netzwerken ermöglichen. Die Netzwerkschnittstelle 710 kann beispielsweise einen physischen Port zum Anschluss eines Netzwerkkabels und/oder drahtlose Antennen für die Kommunikation mit WiFi und/oder Mobilfunknetzen umfassen. Die Netzwerkschnittstelle 710 kann auch als E/A-Vorrichtung bezeichnet werden.
  • Die Beschleunigungsmaschine 712 ist ebenfalls eine andere Art von Peripherievorrichtung oder E/A-Vorrichtung. Die Beschleunigungsmaschine 712 ist eine Vorrichtung, die speziell für das Ausführen bestimmter Operationen entwickelt wurde, die vom Prozessor 702 ausgeführt werden können, aber durch die Beschleunigungsmaschine 712 schneller ausgeführt werden können. Die Beschleunigungsmaschine 712 kann beispielsweise ein Beschleuniger für neuronale Netzwerke sein und als solcher in der Lage sein, die groß angelegten, parallelen Berechnungen eines neuronalen Netzwerks effizienter durchzuführen, als wenn die Berechnungen vom Prozessor 702 ausgeführt werden. Ein weiteres Beispiel: Die Beschleunigungsmaschine 712 kann eine Grafikverarbeitungseinheit (GPU) sein, die für das Ausführen der für die Grafikwiedergabe erforderlichen Berechnungen optimiert ist. Weitere Beispiele für Vorrichtungen, die von der Beschleunigungsmaschine 712 implementiert werden können, sind kryptografische Beschleuniger, Kompressions- und Dekompressionsbeschleuniger, 3D-Beschleuniger, Beschleuniger für reguläre Ausdrücke, Sicherheitsbeschleuniger und andere.
  • In verschiedenen Beispielen kann die Beschleunigungsmaschine 712 Programmcode ausführen, um bestimmte Operationen durchzuführen. Wenn es sich bei der Beschleunigungsmaschine 712 beispielsweise um einen Beschleuniger für neuronale Netzwerke handelt, kann die Beschleunigungsmaschine 712 so programmiert werden, dass sie ein bestimmtes neuronales Netzwerk ausführt, z. B. eines, das Bilderkennung oder maschinelle Übersetzung ausführt. Um das Ausführen eines neuronalen Netzwerks zu unterstützen, kann die Beschleunigungsmaschine 712 beispielsweise so programmiert werden, dass sie Operationen wie das Kopieren von Daten für das neuronale Netzwerk aus dem Prozessorspeicher 704 (zum Beispiel) in die Beschleunigungsmaschine 712, das Kopieren von Eingabedaten für das neuronale Netzwerk aus dem Prozessorspeicher 704 in die Beschleunigungsmaschine 712 und/oder das Kopieren von Ergebnissen von der Beschleunigungsmaschine 712 in den Prozessorspeicher 704 ausführt, neben anderen Beispielen.
  • Um Programmcode für die Beschleunigungsmaschine 712 zu erzeugen, kann das Host-System 700 in verschiedenen Beispielen den Compiler 730 ausführen. Bei Compilern handelt es sich im Allgemeinen um Softwareprogramme, die den in einer für Menschen lesbaren Sprache geschriebenen Programmcode in ein Format (z. B. Maschinenanweisungen) übersetzen, das von einem integrierten Schaltkreis gelesen und verarbeitet werden kann. Im Beispiel von 7 ist die Beschleunigungsmaschine 712 ein Beschleuniger für neuronale Netzwerke und der Compiler 730 dient zum Kompilieren einer Beschreibung eines neuronalen Netzwerks in Anweisungen, die durch die Beschleunigungsmaschine 712 ausgeführt werden sollen. Wenn die Beschleunigungsmaschine 712 einen anderen Typ von Beschleuniger implementiert, kann ein anderer Compiler verwendet werden.
  • Der Compiler 730 kann z. B. aktiviert werden, wenn das Betriebssystem 720 Tastatur-, Maus-, Touchscreen-, Sprachbefehle oder andere Eingaben von den Eingabe-/Ausgabevorrichtungen 708 erhält. Die Eingaben können auch Parameter für den Compiler 730 enthalten, wie den zu kompilierenden Eingabecode 742 und Konfigurationsoptionen für den Kompilierungsprozess. Sobald der Compiler 730 aktiviert ist, kann der Prozessor 702 die Anweisungen für den Compiler 730 in den Prozessorspeicher 704 laden und die Anweisungen ausführen.
  • Im Beispiel von 7 umfasst der Compiler 730 eine erste Stufe 732, eine zweite Stufe 736 und eine dritte Stufe 740, die jeweils unterschiedliche Operationen ausführen, um den kompilierten Code 744 zu erzeugen. In anderen Beispielen kann der Compiler 730 die Operationen der ersten Stufe 732, der zweiten Stufe 736 und/oder der dritten Stufe 740 in weniger Stufen kombinieren oder die Operationen einer der Stufen in mehrere Stufen aufteilen.
  • Die erste Stufe 732 kann den Eingabecode 742 empfangen und verarbeiten. Der Eingabecode 742 kann ein Programm in einer höheren Programmiersprache beschreiben, wie Java, C++ oder Tensorflow, neben vielen anderen Beispielen. Der Eingabecode 742 kann z. B. Schritte zur Ausführung von Bilderkennung, Spracherkennung, maschineller Übersetzung oder anderen Operationen beschreiben. Der Eingabecode 742 kann z. B. von der Speichervorrichtung 706 bezogen werden. Alternativ, aber hier nicht dargestellt, kann sich der Eingabecode 742 im Prozessorspeicher 704 befinden oder über die Netzwerkschnittstelle 710 von einem Netzwerkstandort abgerufen werden. Die Verarbeitung des Eingabecodes 742 kann die Sortierung der im Eingabecode 742 beschriebenen Operationen in Schichten umfassen, wobei die Ausgaben einer Schicht die Eingaben für eine nächste Schicht liefern. Die Verarbeitung kann auch das Identifizieren von Schritten umfassen, die vom Prozessor 702 und nicht von der Beschleunigungsmaschine 712 ausgeführt werden. So muss der Prozessor 702 durch das Ausführen eines Treibers 722 unter Umständen Schritte wie die Konfiguration von Direct Memory Access(DMA)-Deskriptoren für die Übertragung von Daten in die oder aus der Beschleunigungsmaschine 712 ausführen, neben anderen Beispielen.
  • Die Ausgabe 734 der ersten Stufe 732 kann z. B. in den Schichten, Knoten und Verbindungen zwischen den Knoten eines neuronalen Netzwerks organisiert werden. Die zweite Stufe 736 kann eine Zwischenverarbeitung dieser Ausgabe 734 vornehmen. So können beispielsweise die in einer Ebene oder an einem Knoten in einer Ebene ausgeführten Operationen zu viele sein, als dass die Beschleunigungsmaschine 712 sie gleichzeitig ausführen könnte. Die Beschleunigungsmaschine 712 kann beispielsweise nur über eine begrenzte Menge an lokalem Speicherplatz für die Daten verfügen, die für eine Berechnung benötigt werden, oder die Berechnungen können mehr sein, als die Beschleunigungsmaschine 712 auf einmal ausführen kann. In diesem Beispiel kann die erste Stufe 732 die Operationen der Ebene oder des Knotens in kleinere Operationen aufteilen, die in den lokalen Speicher der Beschleunigungsmaschine und/oder in die Rechenkapazität der Beschleunigungsmaschine 712 passen. Die Verarbeitung der Ausgabe 734 der ersten Stufe 732 kann weitere Schritte umfassen, wie z. B. die Zeitplanung oder die Festlegung der Reihenfolge, in der die Beschleunigungsmaschine 712 und/oder der Prozessor 702 Operationen ausführen, neben anderen Beispielen.
  • In verschiedenen Beispielen umfasst die Ausgabe 738 der zweiten Stufe 736 die verschiedenen Schritte, die von den Komponenten der Beschleunigungsmaschine 712 in der Reihenfolge ausgeführt werden sollen, in der die Schritte ausgeführt werden sollen. Die Ausgabe 738 kann z. B. als Datenflussdiagramm dargestellt werden, wobei die Knoten im Diagramm Speicheroperationen, Berechnungen und andere Operationen darstellen und die Kanten oder Verbindungen zwischen den Knoten Abhängigkeiten zwischen den Knoten darstellen, wie z. B. Datenabhängigkeiten, Speicherabhängigkeiten oder betriebliche Abhängigkeiten, neben anderen Beispielen.
  • Die dritte Stufe 740 kann mit der Ausgabe 738 der zweiten Stufe 736 arbeiten und verschiedene Schritte ausführen, bevor sie die Anweisungen erzeugt, die von der Beschleunigungsmaschine 712 ausgeführt werden sollen. Diese Schritte können z. B. das Entfernen redundanter Abhängigkeiten, das Auflösen oder Behandeln von Abhängigkeiten zwischen Knoten durch Einfügen von Synchronisationsanweisungen in den Code, das Erkennen möglicher Optimierungen bei der Speichernutzung oder der Nutzung der Speicherbandbreite und andere Operationen umfassen.
  • Das Ergebnis der dritten Stufe 740 ist ein kompilierter Code 744, der Maschinenanweisungen im Binärformat enthalten kann. In einigen Beispielen kann der kompilierte Code 744 im Prozessorspeicher 704 gespeichert werden. Alternativ oder zusätzlich kann der kompilierte Code 744 auf die Speichervorrichtung 706 oder in ein Netzwerk kopiert werden. Wie bereits erwähnt, kann sich die Beschleunigungsmaschine 712 auf einem anderen Host-System befinden. In diesem Fall kann der kompilierte Code 744 über die Netzwerkschnittstelle 710 an das andere Host-System gesendet werden.
  • Im Beispiel von 7 kann das Host-System 700 einen Treiber 722 ausführen, der auch als Gerätetreiber oder Laufzeittreiber bezeichnet werden kann und der die Beschleunigungsmaschine 712 verwaltet. Der Treiber 722 kann eine Schnittstelle zwischen Anwendungen, die auf dem Host-System 700 (oder einem anderen Host-System) ausgeführt werden, und der Beschleunigungsmaschine 712 bilden. So kann der Treiber 722 beispielsweise eine Anwendungsprogrammschnittstelle (API) bereitstellen, die Funktionen für die Eingabe von Daten in die Beschleunigungsmaschine 712 und die Definition der mit den Eingabedaten durchzuführenden Operation definiert. In diesem und anderen Beispielen kann der Treiber 722 die Beschleunigungsmaschine 712 so konfigurieren, dass sie die Operation ausführt. Beispielsweise kann der Treiber 722 ein neuronales Netzwerk identifizieren, das die Beschleunigungsmaschine 712 ausführen soll, sowie den Ort im Prozessorspeicher 704 oder auf der Speichervorrichtung 706, an dem sich der kompilierte Code 744 für das neuronale Netzwerk befindet. Der Treiber 722 kann ferner den kompilierten Code 744 in die Beschleunigungsmaschine 712 laden oder die Beschleunigungsmaschine 712 dazu veranlassen, den kompilierten Code zu laden, er kann die Eingabedaten laden oder die Beschleunigungsmaschine 712 dazu veranlassen, die Eingabedaten zu laden, mit denen das neuronale Netzwerk arbeiten soll, und/oder er kann die Beschleunigungsmaschine 712 veranlassen, die Eingabedaten auszuführen. Sobald die Beschleunigungsmaschine 712 fertig ist, kann die Beschleunigungsmaschine 712 den Treiber 722 benachrichtigen, und der Treiber 722 kann ein Ergebnis an die Anwendung zurückliefern, die das Ergebnis angefordert hat.
  • In einigen Ausführungsformen kann das Host-System 700 einen Debugger 746 ausführen, der eine Anwendung ist, die zum Debuggen, Prüfen und/oder Verbessern der Funktionalität des neuronalen Netzwerks verwendet werden kann. Der Debugger 746 kann es einem Benutzer ermöglichen, die Eingaben und Ausgaben verschiedener Schichten und Knoten des neuronalen Netzwerks zu untersuchen, indem er Haltepunkte im kompilierten Code 744 setzt. Ein Haltepunkt ist ein Punkt, an dem die weitere Ausführung des Codes angehalten wird, wobei der gesamte Ausführungszustand vor dem Haltepunkt erhalten bleibt. In verschiedenen Beispielen kann ein Haltepunkt einer bestimmten Anweisung, einem bestimmten Funktionsaufruf, einem Programmzählerwert oder einem anderweitig identifizierten Teil des Programmcodes zugewiesen werden. Sobald ein Haltepunkt erreicht ist, kann der Debugger es dem Benutzer ermöglichen, die aktuellen Werte von Variablen und den aktuellen Inhalt des Systemspeichers zu sehen und/oder den Programmcode schrittweise zu durchlaufen, unter anderem mit einer oder mehreren Anweisungen auf einmal.
  • 8 umfasst ein Blockdiagramm, das ein Beispiel für eine Beschleunigungsmaschine 800 zeigt. Die Beschleunigungsmaschine 800 ist ein Beispiel für eine integrierte Schaltung, die einen oder mehrere Beschleuniger 802a-802n enthalten kann, die dem in 9 beschriebenen ähneln.
  • Im Beispiel von 8 enthält die Beschleunigungsmaschine 800 mehrere Beschleuniger 802a-802n, von denen jeder einen Satz von Operationen ausführen kann. In verschiedenen Beispielen sind die Beschleuniger 802a-802n für bestimmte Arten von Operationen vorgesehen, so dass die Beschleuniger 802a-802n die Operationen viel schneller ausführen können, als wenn ähnliche Operationen von einem Allzweckprozessor ausgeführt werden. In verschiedenen Beispielen müssen zur Durchführung eines Satzes von Operationen zunächst die Eingabedaten, auf denen die Operationen ausgeführt werden sollen, in die Beschleuniger 802a-802n bewegt werden. Zusätzlich wird in einigen Fällen auch Programmcode in die Beschleuniger 802a-802n verlagert, der die Operationen programmiert, die die Beschleuniger 802a-802n an den Daten durchführen werden. Im dargestellten Beispiel umfasst die Beschleunigungsmaschine 800 n Beschleuniger 802a-802n. Beispiele für Beschleuniger, die in der Beschleunigungsmaschine 800 enthalten sein können, sind Grafikbeschleuniger, Gleitkommabeschleuniger, Beschleuniger für neuronale Netzwerke und andere. In verschiedenen Beispielen können die Beschleuniger 802a-802n alle gleich sein (z. B. ist jeder der Beschleuniger ein Grafikbeschleuniger) oder sie können unterschiedlich sein (z. B. umfassen die Beschleuniger 802a-802n einen Grafikbeschleuniger, einen Gleitkommabeschleuniger und einen Beschleuniger für neuronale Netzwerke).
  • Die Beispiel-Beschleunigungsmaschine 800 enthält außerdem DRAM-Controller 842a-842k zur Kommunikation mit einem externen Speicher. Der externe Speicher wird in diesem Beispiel mit DRAM 830 realisiert. Im dargestellten Beispiel enthält die Beschleunigungsmaschine 800 k DRAM-Controller 842a-842k, von denen jeder mit einem unabhängigen Satz von DRAM-Bänken kommunizieren kann. In anderen Beispielen können auch andere Arten von RAM-Technologie für den externen Speicher verwendet werden. Die DRAM-Controller 842a-842k können auch als Speichersteuerungen bezeichnet werden.
  • In verschiedenen Beispielen können Eingabedaten und/oder Programmcode für die Beschleuniger 802a-802n im DRAM 830 gespeichert werden. Unterschiedliche Programme können die Beschleuniger 802a-802n veranlassen, unterschiedliche Operationen auszuführen. Wenn es sich bei einem der Beschleuniger beispielsweise um einen Beschleuniger für neuronale Netzwerke handelt, kann ein Programm den Beschleuniger für neuronale Netzwerke so konfigurieren, dass er eine Spracherkennung durchführt, während ein anderes Programm den Beschleuniger für neuronale Netzwerke so konfiguriert, dass er eine Bilderkennung durchführt. In verschiedenen Beispielen können verschiedene Beschleuniger 802a-802n mit unterschiedlichen Programmen programmiert werden, so dass jeder einen anderen Satz von Operationen ausführt. In verschiedenen Beispielen können die Prozessoren 848a-848s das Verschieben von Programmcode aus dem DRAM 830 zu den Beschleunigern 802a-802n verwalten.
  • Die Beispiel-Beschleunigungsmaschine 800 enthält außerdem E/A-Controller 844a-844p zur Kommunikation mit E/A-Vorrichtungen 832 im System. Die Beschleunigungsmaschine 800 kann z. B. über einen Prozessorbus mit E/A-Vorrichtungen kommunizieren. In einigen Beispielen kann der Prozessorbus mit Peripheral Component Interconnect (PCI) und/oder einer Variante des PCI-Bus-Protokolls implementiert werden. Der Prozessorbus kann die Beschleunigungsmaschine 800 unter anderem mit E/A-Vorrichtungen wie z. B. Ein- und Ausgabevorrichtungen, Speichersteuerungen, Speichervorrichtungen und/oder Netzwerk-Schnittstellenkarten verbinden. In einigen Beispielen können die E/A-Controller 844-844p die Beschleunigungsmaschine 800 in die Lage versetzen, als E/A-Vorrichtung für einen Host-Prozessor zu fungieren. Beispielsweise kann die Beschleunigungsmaschine 800 der Empfänger von Eingabedaten vom Host-Prozessor und einer Anweisung sein, die eine Operation angibt, die mit den Eingabedaten durchgeführt werden soll (z. B. eine bestimmte Berechnung oder Analyse). Im dargestellten Beispiel enthält die Beschleunigungsmaschine 800 p E/A-Controller 844a-844p, von denen jeder einen separaten Root-Komplex enthalten und mit einem separaten Satz von E/A-Vorrichtungen 832 kommunizieren kann. In anderen Beispielen können andere standardisierte Busprotokolle, wie Ultra Path Interconnect (UPI), für den Host-Bus verwendet werden. In anderen Beispielen kann ein proprietäres Busprotokoll verwendet werden.
  • Die Bewegung von Daten in der Beschleunigungsmaschine 800 kann von einem oder mehreren Prozessoren 848a-848s verwaltet werden, die auch als Datenmanagementprozessoren bezeichnet werden können. Im Beispiel von 8 enthält die Beschleunigungsmaschine 800 s Prozessoren 848a-848s, die in die Vorrichtung integriert sind (z. B. auf demselben Silizium-Die). In anderen Beispielen können sich die Prozessoren 848a-848s außerhalb der Beschleunigungsmaschine 800 befinden (z. B. auf einem anderen Chip und/oder in einem anderen Gehäuse). In einigen Beispielen können die Prozessoren 848a-848s die Bewegung von Daten von E/A-Vorrichtungen 832 zu den Beschleunigern 802a-802n oder dem DRAM 830 verwalten. Eingabedaten können sich z. B. an einer E/A-Vorrichtung 832 oder im Prozessorspeicher befinden, und die Prozessoren 848a-848s können die Eingabe von der E/A-Vorrichtung 832 oder Prozessorspeicher in einen Beschleuniger oder in den DRAM 830 übertragen. Als weiteres Beispiel kann sich der Programmcode für die Beschleuniger 802a-802n auf einer E/A-Vorrichtung 832 oder im Prozessorspeicher befinden.
  • Die Beispiel-Beschleunigungsmaschine 800 enthält außerdem DMA-Maschinen 846a-846d, die Daten zwischen den Beschleunigern 802a-802n, den DRAM-Controllern 842a-842k und den E/A-Controllern 844a-844p bewegen können. Im dargestellten Beispiel umfasst die Beschleunigungsmaschine 800 d DMA-Maschinen 846a-846d. In einigen Implementierungen können die DMA-Maschinen 846a-846d bestimmten Aufgaben zugewiesen werden, z. B. dem Verschieben von Daten von den DRAM-Controllern 842a-842d zu den Beschleunigern 802a-802n oder dem Verschieben von Daten zwischen den E/A-Controllern 844a-844p und den Beschleunigern 802a-802n. Diese Aufgaben können z. B. durch das Einreihen von Deskriptoren in die Warteschlange der DMA-Maschinen 846a-846d zugewiesen werden, wobei ein Deskriptor eine Adresse für einen Datenblock und eine auszuführende Operation (z. B. eine Lese- oder Schreiboperation) identifiziert. Ein Deskriptor kann z. B. eine DMA-Maschine anweisen, einen DMA-Controller anzuweisen, einen Datenblock aus dem DRAM 830 zu lesen. Ein Deskriptor kann, als weiteres Beispiel, die DMA-Maschine anweisen, Daten, die vom DMA-Controller gelesen wurden, in einen Beschleuniger zu schreiben. Weitere Deskriptoren können verwendet werden, um Daten von einem Beschleuniger zum DRAM 830 zu bewegen.
  • In verschiedenen Beispielen kann jeder der Prozessoren 848a-848s für die Verwaltung der Datenbewegung für einen anderen Beschleuniger zuständig sein. In einigen Beispielen kann ein Prozessor die Datenbewegung für mehr als einen Beschleuniger verwalten. In ähnlicher Weise kann in verschiedenen Beispielen jeder der Prozessoren 848a-848s einer oder mehreren DMA-Maschinen 846a-846d zugewiesen werden. In diesen und anderen Beispielen werden die Zuordnungen zwischen den Prozessoren 848a-848s, den Beschleunigern 802a-802n und den DMA-Maschinen 846a-846d durch Programmcode bestimmt, der von den jeweiligen Prozessoren ausgeführt wird.
  • In der Beispiel-Beschleunigungsmaschine 800 können die verschiedenen Komponenten über eine Chip-Verbindung 820 kommunizieren. Die Chip-Verbindung 820 umfasst in erster Linie die Verdrahtung für die Weiterleitung von Daten zwischen den Komponenten der Beschleunigungsmaschine 800. In einigen Fällen kann die Chip-Verbindung 820 eine minimale Menge an Logik enthalten, wie z. B. Multiplexer zur Steuerung der Datenrichtung, Flip-Flops zur Behandlung von Taktbereichsübergängen und Timing-Logik.
  • 9 ist ein Blockdiagramm, das ein Beispiel für eine integrierte Schaltung zeigt. Das Beispiel von 9 veranschaulicht einen Beschleuniger 902. In verschiedenen Beispielen kann der Beschleuniger 902 für einen Satz von Eingabedaten (z. B. Eingabedaten 950) Berechnungen unter Verwendung eines Verarbeitungsmaschinenarrays 910, einer Aktivierungsmaschine 916 und/oder einer Pooling-Maschine 918 ausführen. In einigen Beispielen kann der Beispiel-Beschleuniger 902 eine integrierte Schaltkreiskomponente eines Prozessors sein, wie z. B. ein Prozessor für ein neuronales Netzwerk. Der Prozessor kann weitere integrierte Schaltkreiskomponenten haben, einschließlich zusätzlicher Beschleunigungsmaschinen.
  • In verschiedenen Implementierungen kann das Speicher-Subsystem 904 mehrere Speicherbänke 914 enthalten. In diesen Implementierungen kann jede Speicherbank 914 unabhängig zugänglich sein, was bedeutet, dass das Lesen einer Speicherbank nicht vom Lesen einer anderen Speicherbank abhängig ist. Ebenso hat das Schreiben in eine Speicherbank keinen Einfluss auf das Schreiben in eine andere Speicherbank oder schränkt dieses ein. In einigen Fällen kann jede Speicherbank gleichzeitig gelesen und geschrieben werden. Es können verschiedene Techniken verwendet werden, um unabhängig voneinander zugängliche Speicherbänke 914 zu haben. Zum Beispiel kann jede Speicherbank eine physikalisch getrennte Speicherkomponente sein, die einen Adressraum hat, der getrennt und unabhängig von den Adressräumen jeder anderen Speicherbank ist. In diesem Beispiel kann jede Speicherbank mindestens einen Lesekanal und mindestens einen separaten Schreibkanal haben, die gleichzeitig verwendet werden können. In diesen Beispielen kann das Speicher-Subsystem 904 den gleichzeitigen Zugriff auf die Lese- oder Schreibkanäle mehrerer Speicherbänke ermöglichen. Als weiteres Beispiel kann das Speicher-Subsystem 904 eine Arbitrierungslogik enthalten, so dass die Arbitrierung zwischen z. B. den Ausgaben mehrerer Speicherbänke 914 dazu führen kann, dass die Ausgabe von mehr als einer Speicherbank verwendet wird. In diesen und anderen Beispielen kann jede Speicherbank, obwohl sie global vom Speicher-Subsystem 904 verwaltet wird, unabhängig von den anderen betrieben werden.
  • Die Tatsache, dass die Speicherbänke 914 unabhängig voneinander zugänglich sind, kann die Effizienz des Beschleunigers 902 erhöhen. Beispielsweise können Werte gleichzeitig gelesen und jeder Zeile des Verarbeitungsmaschinenarrays 910 zur Verfügung gestellt werden, so dass das gesamte Verarbeitungsmaschinenarray 910 in einem Taktzyklus in Gebrauch sein kann. Als weiteres Beispiel können die Speicherbänke 914 zur gleichen Zeit gelesen werden, in der die von dem Verarbeitungsmaschinenarray 910 berechneten Ergebnisse in das Speicher-Subsystem 904 geschrieben werden. Im Gegensatz dazu kann ein einzelner Speicher möglicherweise nur ein Lesen oder Schreiben zur gleichen Zeit bedienen. Bei einem einzelnen Speicher können z. B. mehrere Taktzyklen erforderlich sein, um Eingabedaten für jede Zeile des Verarbeitungsmaschinenarrays 910 zu lesen, bevor das Verarbeitungsmaschinenarray 910 gestartet werden kann.
  • In verschiedenen Implementierungen kann das Speicher-Subsystem 904 so konfiguriert werden, dass es gleichzeitig mehrere Clients bedient, einschließlich des Verarbeitungsmaschinenarrays 910, der Aktivierungsmaschine 916, der Pooling-Maschine 918 und aller externen Clients, die über eine Kommunikationsstruktur 920 auf das Speicher-Subsystem 904 zugreifen. In einigen Implementierungen kann die Fähigkeit, mehrere Clients zu bedienen, bedeuten, dass das Speicher-Subsystem 904 mindestens so viele Speicherbänke hat, wie es Clients gibt. In einigen Fällen kann jede Zeile des Verarbeitungsmaschinenarrays 910 als ein separater Client zählen. In manchen Fällen kann jede Spalte des Verarbeitungsmaschinenarrays 910 ein Ergebnis ausgeben, so dass jede Spalte als separater Schreibclient zählen kann. In einigen Fällen kann die Ausgabe vom Verarbeitungsmaschinenarray 910 in die Speicherbänke 914 geschrieben werden, die dann anschließend Eingabedaten für das Verarbeitungsmaschinenarray 910 bereitstellen können. Als weiteres Beispiel können die Aktivierungsmaschine 916 und die Pooling-Maschine 918 mehrere Ausführungskanäle enthalten, von denen jeder ein separater Speicher-Client sein kann. Die Speicherbänke 914 können z. B. mit statischem Direktzugriffsspeicher (SRAM) realisiert werden.
  • In verschiedenen Implementierungen kann das Speicher-Subsystem 904 Steuerlogik enthalten. Die Steuerlogik kann z. B. die Adressräume jeder der Speicherbänke 914 verfolgen, Speicherbänke 914 zum Lesen oder Schreiben identifizieren und/oder Daten zwischen den Speicherbänken 914 bewegen. In einigen Implementierungen können die Speicherbänke 914 mit bestimmten Clients fest verdrahtet werden. Zum Beispiel kann ein Satz von Speicherbänken 914 fest verdrahtet werden, um Werte für die Zeilen des Verarbeitungsmaschinenarrays 910 bereitzustellen, wobei eine Speicherbank jede Zeile bedient. Als weiteres Beispiel kann ein Satz von Speicherbänken fest verdrahtet werden, um Werte von Spalten des Verarbeitungsmaschinenarrays 910 zu empfangen, wobei eine Speicherbank Daten für jede Spalte empfängt.
  • Das Verarbeitungsmaschinenarray 910 ist die Berechnungsmatrix des Beispielbeschleunigers 902. Das Verarbeitungsmaschinenarray 910 kann z. B. parallele Integration, Faltung, Korrelation und/oder Matrixmultiplikation ausführen. Das Verarbeitungsmaschinenarray 910 umfasst mehrere Verarbeitungsmaschinen 911, die in Zeilen und Spalten angeordnet sind, so dass die von einer Verarbeitungsmaschine 911 ausgegebenen Ergebnisse direkt in eine andere Verarbeitungsmaschine 911 eingegeben werden können. Verarbeitungsmaschinen 911, die sich nicht an den Außenkanten des Verarbeitungsmaschinenarrays 910 befinden, können daher Daten zur Bearbeitung von anderen Verarbeitungsmaschinen 911 und nicht vom Speicher-Subsystem 904 erhalten.
  • In verschiedenen Beispielen verwendet das Verarbeitungsmaschinenarray 910 eine systolische Ausführung, bei der die Daten in regelmäßigen Abständen aus verschiedenen Richtungen an jeder Verarbeitungsmaschine 911 ankommen. In einigen Beispielen können die Eingabedaten von links in das Verarbeitungsmaschinenarray 910 fließen und die Gewichtswerte können oben geladen werden. In einigen Beispielen können Gewichte und Eingabedaten von links und Teilsummen von oben nach unten fließen. In diesen und anderen Beispielen bewegt sich eine Multiplikations- und Akkumulationsoperation als diagonale Wellenfront durch das Verarbeitungsmaschinenarray 910, wobei sich die Daten nach rechts und unten über das Array bewegen. Steuersignale können gleichzeitig mit den Gewichten links eingegeben werden und mit der Berechnung quer und abwärts fließen.
  • In verschiedenen Implementierungen bestimmt die Anzahl der Spalten im Verarbeitungsmaschinenarray 910 die Rechenkapazität des Verarbeitungsmaschinenarrays 910, und die Anzahl der Zeilen bestimmt die erforderliche Speicherbandbreite zum Erreichen einer maximalen Auslastung des Verarbeitungsmaschinenarrays 910. Das Verarbeitungsmaschinenarray 910 kann z. B. 64 Spalten und 428 Zeilen oder eine andere Anzahl von Spalten und Zeilen haben.
  • Ein Beispiel für eine Verarbeitungsmaschine 911 ist in 9 in einem Beispieldiagramm dargestellt. Wie in diesem Beispiel dargestellt, kann eine Verarbeitungsmaschine 911 eine Multiplikator-Akkumulator-Schaltung enthalten. Eingaben von links können z. B. Eingabedaten i und einen Gewichtswert w enthalten, wobei die Eingabedaten ein Wert sind, der entweder aus einem Satz von Eingabedaten oder einem Satz von Zwischenergebnissen entnommen wird, und der Gewichtswert aus einem Satz von Gewichtswerten stammt, die eine Schicht des neuronalen Netzwerks mit der nächsten verbinden. Ein Satz von Eingabedaten kann z. B. ein Bild sein, das zur Identifizierung oder Objekterkennung eingereicht wird, ein Audioclip, der für die Spracherkennung bereitgestellt wird, eine Textfolge für die Verarbeitung natürlicher Sprache oder die maschinelle Übersetzung, oder der aktuelle Zustand eines Spiels, der analysiert werden muss, um den nächsten Zug zu bestimmen, unter anderem. In einigen Beispielen werden die Eingabedaten und der Gewichtswert nach rechts ausgegeben, zur Eingabe in die nächste Verarbeitungsmaschine 911.
  • Im dargestellten Beispiel kann eine Eingabe von oben eine Teilsumme, p_in, enthalten, die entweder von einer anderen Verarbeitungsmaschine 911 oder von einer vorherigen Berechnungsrunde durch das Verarbeitungsmaschinenarray 910 bereitgestellt wird. Beim Starten einer Berechnung für einen neuen Satz von Eingabedaten kann die oberste Zeile des Verarbeitungsmaschinenarrays 910 einen festen Wert für p_in erhalten, z. B. Null. Wie in diesem Beispiel dargestellt, werden i und w miteinander multipliziert und das Ergebnis wird mit p_in summiert, um eine neue Teilsumme, p_out, zu erzeugen, die in eine andere Verarbeitungsmaschine 911 eingegeben werden kann. Verschiedene andere Implementierungen der Verarbeitungsmaschine 911 sind möglich.
  • Die Ausgaben der letzten Zeile im Verarbeitungsmaschinenarray 910 können im Ergebnispuffer 912 zwischengespeichert werden. Bei den Ergebnissen kann es sich um Zwischenergebnisse handeln, die in die Speicherbänke 914 geschrieben werden können, um sie dem Verarbeitungsmaschinenarray 910 für weitere Berechnungen zur Verfügung zu stellen. Alternativ können die Ergebnisse Endergebnisse sein, die, nachdem sie in die Speicherbänke 914 geschrieben wurden, über die Kommunikationsstruktur 920 aus dem Speicher-Subsystem 904 gelesen werden können, um vom System ausgegeben zu werden.
  • In einigen Implementierungen enthält der Beschleuniger 902 eine Aktivierungsmaschine 916. In diesen Implementierungen kann die Aktivierungsmaschine 916 die Ergebnisse aus dem Verarbeitungsmaschinenarray 910 zu einer oder mehreren Ausgabeaktivierungen kombinieren. Bei einem neuronalen Faltungsnetzwerk können z. B. die Faltungen von mehreren Kanälen summiert werden, um eine Ausgabeaktivierung für einen einzelnen Kanal zu erzeugen. In anderen Beispielen kann die Akkumulation von Ergebnissen aus einer oder mehreren Spalten im Verarbeitungsmaschinenarray 910 erforderlich sein, um eine Ausgabeaktivierung für einen einzelnen Knoten im neuronalen Netzwerk zu erzeugen. In einigen Beispielen kann die Aktivierungsmaschine 916 umgangen werden.
  • In verschiedenen Beispielen kann die Aktivierungsmaschine 916 mehrere separate Ausführungskanäle enthalten. In diesen Beispielen können die Ausführungskanäle den Spalten des Verarbeitungsmaschinenarrays 910 entsprechen und eine Operation an den Ausgaben einer Spalte durchführen, deren Ergebnis im Speicher-Subsystem 904 gespeichert werden kann. In diesen Beispielen kann die Aktivierungsmaschine 916 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl der Spalten im Verarbeitungsmaschinenarray 910 ist. In einigen Fällen können eine oder mehrere der Berechnungen gleichzeitig durchgeführt werden. Beispiele für Berechnungen, die jeder Ausführungskanal durchführen kann, sind u. a. Exponentiale, Quadrate, Quadratwurzeln, Identitäten, Binärschritte, Bipolarschritte, Sigmoidale und Rampen.
  • In einigen Implementierungen enthält der Beschleuniger 902 eine Pooling-Maschine 918. Pooling ist das Zusammenfassen von Ausgaben der Spalten des Verarbeitungsmaschinenarrays 910. Das Zusammenfassen kann z. B. die Berechnung eines Maximalwerts, eines Minimalwerts, eines Mittelwerts, eines Medianwerts, einer Summierung, einer Multiplikation oder einer anderen logischen oder mathematischen Kombination umfassen. In verschiedenen Beispielen kann die Pooling-Maschine 918 mehrere Ausführungskanäle enthalten, die auf Werte aus entsprechenden Spalten des Verarbeitungsmaschinenarrays 910 arbeiten können. In diesen Beispielen kann die Pooling-Maschine 918 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl der Spalten im Verarbeitungsmaschinenarray 910 ist. In verschiedenen Beispielen können die Ausführungskanäle der Pooling-Maschine 918 parallel und/oder gleichzeitig arbeiten. In einigen Beispielen kann die Pooling-Maschine 918 umgangen werden.
  • Hierin können die Aktivierungsmaschine 916 und die Pooling-Maschine 918 gemeinsam als Ausführungsmaschinen bezeichnet werden. Das Verarbeitungsmaschinenarray 910 ist ein weiteres Beispiel für eine Ausführungsmaschine. Ein weiteres Beispiel für eine Ausführungsmaschine ist eine Direct Memory Access (DMA)-Maschine, die sich außerhalb des Beschleunigers 902 befinden kann.
  • Eingabedaten 950 können über die Kommunikationsstruktur 920 ankommen. Die Kommunikationsstruktur 920 kann den Beschleuniger 902 mit anderen Komponenten eines Prozessors verbinden, z. B. mit einer DMA-Maschine, die Eingabedaten 950 von einer Eingabe-/Ausgabevorrichtung (E/A), einem Speicherlaufwerk oder einer Netzwerkschnittstelle erhalten kann. Die Eingabedaten 950 können z. B. eindimensionale Daten sein, wie eine Zeichenkette oder eine numerische Sequenz, oder zweidimensionale Daten, wie ein Array von Pixelwerten für ein Bild oder Frequenz- und Amplitudenwerte über die Zeit für ein Audiosignal. In einigen Beispielen können die Eingabedaten 950 dreidimensional sein, wie es z. B. bei den von einem selbstfahrenden Auto verwendeten Situationsinformationen oder Virtual-Reality-Daten der Fall sein kann. In einigen Implementierungen kann das Speicher-Subsystem 904 einen separaten Puffer für die Eingabedaten 950 enthalten. In einigen Implementierungen können die Eingabedaten 950 in den Speicherbänken 914 gespeichert werden, wenn der Beschleuniger 902 die Eingabedaten 950 empfängt.
  • In einigen Beispielen kann der Beschleuniger 902 eine Maschine zur Verarbeitung neuronaler Netzwerke implementieren. In diesen Beispielen kann der Beschleuniger 902 für einen Satz von Eingabedaten 950 ein neuronales Netzwerk ausführen, um eine Aufgabe durchzuführen, für die das neuronale Netzwerk trainiert wurde. Das Ausführen eines neuronalen Netzwerks auf einem Satz von Eingabedaten kann als Inferenz oder Durchführen von Inferenz bezeichnet werden.
  • Die Gewichte für das neuronale Netzwerk können im Speicher-Subsystem 904 gespeichert werden, zusammen mit den Eingabedaten 950, auf denen das neuronale Netzwerk arbeiten wird. Das neuronale Netzwerk kann auch Anweisungen enthalten, die das Verarbeitungsmaschinenarray 910 programmieren können, um verschiedene Berechnungen mit den Gewichten und den Eingabedaten durchzuführen. Die Anweisungen können auch im Speichersubsystem 904, in den Speicherbänken 914 oder in einem separaten Befehlspuffer gespeichert werden. Das Verarbeitungsmaschinenarray 910 kann Zwischenergebnisse ausgeben, die die Ausgaben der einzelnen Schichten des neuronalen Netzwerks darstellen. In einigen Fällen kann die Aktivierungsmaschine 916 und/oder die Pooling-Maschine 918 für Berechnungen aktiviert werden, die von bestimmten Schichten des neuronalen Netzwerks gefordert werden. Der Beschleuniger 902 kann die Zwischenergebnisse im Speicher-Subsystem 904 speichern, um sie in das Verarbeitungsmaschinenarray 910 einzugeben, um die Ergebnisse für die nächste Schicht des neuronalen Netzwerks zu berechnen. Das Verarbeitungsmaschinenarray 910 kann außerdem Endergebnisse aus einer letzten Schicht des neuronalen Netzwerks ausgeben. Die Endergebnisse können im Speicher-Subsystem 904 gespeichert und dann in den Speicher des Host-Prozessors oder an einen anderen Ort kopiert werden.
  • 10 veranschaulicht ein Diagramm eines Beispielnetzwerks 1000, das ein oder mehrere Host-Systeme umfassen kann, wie das in 7 veranschaulichte Host-System. Zum Beispiel umfasst das Beispielnetzwerk 1000 von 10 mehrere Knoten 1002a-1002h, von denen einer oder mehrere ein Host-System sein können, wie in 7 gezeigt. Andere der Knoten 1002a-1002h können andere Computervorrichtungen 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 1000 enthält.
  • In verschiedenen Beispielen kann das Netzwerk 1000 zur Verarbeitung von Daten verwendet werden. Beispielsweise können Eingabedaten an einem der Knoten 1002a-1002h oder von anderen Netzwerken 1008, mit denen das Netzwerk 1000 kommunizieren kann, empfangen werden. In diesem Beispiel können die Eingabedaten an einen Knoten im Netzwerk 1000 geleitet werden, der eine Beschleunigungsmaschine enthält, damit die Beschleunigungsmaschine darauf arbeitet und ein Ergebnis erzeugt. 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 von verschiedenen Quellen gesammelt werden, einschließlich eines oder mehrerer der Knoten 1002a-1002h und/oder Computervorrichtungen, die sich in den anderen Netzwerken 1008 befinden, und die gesammelten Eingabedaten können an ein oder mehrere Host-Systeme im Netzwerk 1000 geleitet werden. Die Ergebnisse aus den Host-Systemen können dann zurück an die Quellen verteilt werden, aus denen die Eingabedaten gesammelt wurden.
  • In verschiedenen Beispielen können einer oder mehrere der Knoten 1002a-1002h für Operationen wie das Sammeln von Eingabedaten für Host-Systeme, die bearbeitet werden sollen, das Verfolgen, welche Host-Systeme ausgelastet sind und welche mehr Arbeit annehmen können, das Bestimmen, ob die Host-Systeme korrekt und/oder möglichst effizient arbeiten, das Überwachen der Netzwerksicherheit und/oder andere Verwaltungsoperationen verantwortlich sein.
  • Im Beispiel von 10 sind die Knoten 1002a-1002h über eine Switched-Architektur mit Punkt-zu-Punkt-Verbindungen miteinander verbunden. Die Switched-Architektur umfasst mehrere Switches 1004a-1004d, die in einem mehrschichtigen Netzwerk wie einem Clos-Netzwerk angeordnet sein können. Eine Netzwerkvorrichtung, die Pakete zwischen LAN-Segmenten (Local Area Network) filtert und weiterleitet, kann als Switch bezeichnet werden. Switches arbeiten im Allgemeinen auf der Datenverbindungsschicht (Schicht 2) und manchmal auf der Netzwerkschicht (Schicht 3) des Open System Interconnect (OSI)-Referenzmodells und können mehrere Paketprotokolle unterstützen. Die Switches 1004a-1004d von 10 können mit mehreren Knoten 1002a-1002h verbunden werden und bieten mehrere Pfade zwischen zwei beliebigen Knoten.
  • Das Netzwerk 1000 kann auch ein oder mehrere Netzwerkvorrichtungen zur Verbindung mit anderen Netzwerken 1008 enthalten, wie z. B. einen Router 1006. Router verwenden Header und Weiterleitungstabellen, um den besten Pfad für die Weiterleitung der Pakete zu bestimmen, und verwenden Protokolle wie das Internet Control Message Protocol (ICMP), um miteinander zu kommunizieren und die beste Route zwischen zwei beliebigen Vorrichtungen zu konfigurieren. Der Router 1006 von 10 kann zur Verbindung mit anderen Netzwerken 1008 wie Subnetzen, LANs, Wide Area Networks (WANs) und/oder dem Internet verwendet werden.
  • In einigen Beispielen kann das Netzwerk 1000 ein beliebiges oder eine Kombination von vielen verschiedenen Arten von Netzwerken enthalten, wie beispielsweise Kabelnetzwerke, das Internet, drahtlose Netzwerke, zellulare Netzwerke und andere private und/oder öffentliche Netzwerke. Die zusammengeschalteten Switches 1004a-1004d und Router 1006, falls vorhanden, können als Switch-Fabric 1010, Fabric, Network-Fabric oder einfach als Netzwerk bezeichnet werden. Im Rahmen eines Computernetzwerks können die Begriffe „Fabric“ und „Netzwerk“ hierin austauschbar verwendet werden.
  • Die Knoten 1002a-1002h können eine beliebige Kombination von Host-Systemen, Prozessorknoten, Speichersubsystemen und E/A-Chassis sein, die Benutzervorrichtungen, Dienstanbietercomputer oder Computer von Drittanbietern darstellen.
  • Benutzervorrichtungen können Computervorrichtungen enthalten, um auf eine Anwendung 1032 zuzugreifen (z. B. einen Webbrowser oder eine Anwendung für mobile Vorrichtungen). In einigen Aspekten kann die Anwendung 1032 von einem Rechenzentrums- oder Dienstanbieter gehostet, verwaltet und/oder bereitgestellt werden. Die Anwendung 1032 kann es den Benutzern ermöglichen, mit den Computern des Dienstanbieters zu interagieren, um beispielsweise auf Webinhalte (z. B. Webseiten, Musik, Videos usw.) zuzugreifen. Die Benutzervorrichtung(en) kann (können) eine Computervorrichtung wie beispielsweise ein Mobiltelefon, ein Smartphone, ein Personal Digital Assistant (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, eine Thin-Client-Vorrichtung, ein Tablet-Computer, ein elektronisches Buch (E-Book-Lesevorrichtung), eine Spielkonsole usw. sein. In einigen Beispielen kann (können) die Benutzervorrichtung(en) über ein anderes Netzwerk 1008 mit den Dienstanbietercomputern kommunizieren. Darüber hinaus kann (können) die Benutzervorrichtung(en) Teil des verteilten Systems sein, das von den Dienstanbietercomputern verwaltet, kontrolliert wird oder anderweitig Teil der Dienstanbietercomputer ist (z. B. eine mit den Dienstanbietercomputern integrierte Konsolenvorrichtung).
  • Der oder die Knoten von 10 können auch einen oder mehrere Dienstanbietercomputer darstellen. Ein oder mehrere Dienstanbietercomputer können eine native Anwendung bereitstellen, die so konfiguriert ist, dass sie auf den Benutzervorrichtungen ausgeführt wird, mit denen die Benutzer interagieren können. Die Computer des Dienstanbieters können in einigen Beispielen Computerressourcen bereitstellen, wie z. B. Client-Einheiten, Datenspeicher mit niedriger Latenzzeit, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen, elektronisches Content Performance Management und so weiter. Der oder die Computer des Dienstanbieters können auch so betrieben werden, dass sie dem oder den Benutzer(n) Webhosting, Datenbanken, Computeranwendungsentwicklungs- und/oder Implementierungsplattformen, Kombinationen aus dem Vorstehenden oder dergleichen bereitstellen. In einigen Beispielen können der oder die Dienstanbietercomputer als eine oder mehrere virtuelle Maschinen bereitgestellt werden, die in einer gehosteten Computerumgebung implementiert sind. Die gehostete Computerumgebung kann eine oder mehrere schnell bereitgestellte und freigegebene Computerressourcen enthalten. Zu diesen Computerressourcen können Computer-, Netzwerk- und/oder Speichervorrichtungen gehören. Eine gehostete Computerumgebung kann auch als Cloud-Computing-Umgebung bezeichnet werden. Der oder die Computer des Dienstanbieters können einen oder mehrere Server enthalten, die möglicherweise in einem Cluster, als Serverfarm oder als einzelne Server, die nicht miteinander verbunden sind, angeordnet sind, und können die Anwendung 1032 und/oder Cloud-basierte Softwaredienste hosten. Diese Server können als Teil einer integrierten, verteilten Computerumgebung konfiguriert werden. In einigen Aspekten können die Dienstanbietercomputer zusätzlich oder alternativ Computervorrichtungen wie z. B. ein Mobiltelefon, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, einen Server-Computer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielkonsole usw. enthalten. In einigen Fällen können die Dienstanbietercomputer mit einem oder mehreren Computern von Drittanbietern kommunizieren.
  • In einer Beispielkonfiguration können die Knoten 1002a-1002h mindestens einen Speicher 1018 und eine oder mehrere Verarbeitungseinheiten (oder Prozessoren 1020) enthalten. Der oder die Prozessor(en) 1020 können in Hardware, computerausführbaren Anweisungen, Firmware oder Kombinationen davon implementiert sein. Computerausführbare Anweisungen oder Firmware-Implementierungen des/der Prozessors(en) 1020 können computerausführbare oder maschinenausführbare Anweisungen enthalten, die in jeder geeigneten Programmiersprache geschrieben sind, um die verschiedenen beschriebenen Funktionen auszuführen.
  • In einigen Fällen kann (können) der oder die Hardware-Prozessor(en) 1020 ein Single-Core-Prozessor oder ein Multi-Core-Prozessor sein. Ein Multi-Core-Prozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors enthalten. In einigen Beispielen können sich die Multi-Core-Prozessoren bestimmte Ressourcen wie Busse und Caches der zweiten oder dritten Ebene teilen. In einigen Fällen kann jeder Kern in einem Single- oder Multi-Core-Prozessor auch mehrere ausführende logische Prozessoren (oder ausführende Threads) enthalten. In einem solchen Kern (z. B. mit mehreren logischen Prozessoren) können auch mehrere Stufen der Ausführungspipeline und auch untergeordnete Caches gemeinsam genutzt werden.
  • Der Speicher 1018 kann Programmanweisungen speichern, die auf dem/den Prozessor(en) 1020 ladbar und ausführbar sind, sowie Daten, die während der Ausführung dieser Programme erzeugt werden. Je nach Konfiguration und Typ der Knoten 1002a-1002h kann der Speicher 1018 flüchtig (z. B. RAM) und/oder nichtflüchtig (z. B. ROM, Flash-Speicher, etc.) sein. Der Speicher 1018 kann ein Betriebssystem 1028, einen oder mehrere Datenspeicher 1030, ein oder mehrere Anwendungsprogramme 1032, einen oder mehrere Treiber 1034 und/oder Dienste zur Implementierung der hierin offenbarten Funktionen enthalten.
  • Das Betriebssystem 1028 kann die Grundfunktionen der Knoten 1002a-1002h unterstützen, wie z. B. die Planung von Aufgaben, das Ausführen von Anwendungen und/oder die Steuerung von Peripherievorrichtungen. In einigen Implementierungen kann ein Dienstanbietercomputer eine oder mehrere virtuelle Maschinen bereitstellen. In diesen Implementierungen kann jede virtuelle Maschine dazu konfiguriert sein, ihr eigenes Betriebssystem auszuführen. Beispiele für Betriebssysteme sind Unix, Linux, Windows, Mac OS, iOS, Android und dergleichen. Das Betriebssystem 1028 kann auch ein proprietäres Betriebssystem sein.
  • Die Datenspeicher 1030 können permanente oder flüchtige Daten enthalten, die vom Betriebssystem 1028, den Anwendungsprogrammen 1032 oder den Treibern 1034 verwendet und/oder betrieben werden. Beispiele für solche Daten sind Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten und so weiter. Die Informationen in den Datenspeichern 1030 können in einigen Implementierungen über das/die Netzwerk(e) 1008 an die Benutzervorrichtungen übermittelt werden. In einigen Fällen können die Datenspeicher 1030 zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber enthalten. Alternativ oder zusätzlich können die Datenspeicher 1030 Standard- und/oder proprietäre Software bibliotheken und/oder Standard- und/oder proprietäre Application User Interface (API)-Bibliotheken speichern. In den Datenspeichern 1030 gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
  • Die Treiber 1034 enthalten Programme, die die Kommunikation zwischen Komponenten in einem Knoten ermöglichen. So können beispielsweise einige Treiber 1034 die Kommunikation zwischen dem Betriebssystem 1028 und dem zusätzlichen Speicher 1022, der Netzwerkvorrichtung 1024 und/oder der E/A-Vorrichtung 1026 ermöglichen. Alternativ oder zusätzlich können einige Treiber 1034 die Kommunikation zwischen den Anwendungsprogrammen 1032 und dem Betriebssystem 1028 und/oder den Anwendungsprogrammen 1032 und Peripherievorrichtungen ermöglichen, die für den Dienstanbietercomputer zugänglich sind. In vielen Fällen können die Treiber 1034 Treiber enthalten, die eine gut verstandene Funktionalität bieten (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Solid-State-Device-Treiber). In anderen Fällen können die Treiber 1034 proprietäre oder spezielle Funktionen bereitstellen.
  • Die Dienstanbietercomputer oder -server können auch zusätzlichen Speicher 1022 enthalten, der Wechselspeicher und/oder nicht entfernbaren Speicher enthalten kann. Der zusätzliche Speicher 1022 kann Magnetspeicher, optische Platten, Solid-State-Disks, Flash-Speicher und/oder Bandspeicher enthalten. Der zusätzliche Speicher 1022 kann im gleichen Gehäuse wie die Knoten 1002a-1002h oder in einem externen Gehäuse untergebracht sein. Der Speicher 1018 und/oder der zusätzliche Speicher 1022 und die zugehörigen computerlesbaren Medien können eine nichtflüchtige Speicherung von computerlesbaren Anweisungen, Datenstrukturen, Programmmodulen und anderen Daten für die Computervorrichtungen bereitstellen. In einigen Implementierungen kann der Speicher 1018 mehrere verschiedene Speichertypen enthalten, wie beispielsweise SRAM, DRAM oder ROM.
  • Der Speicher 1018 und die zusätzliche Speicherung 1022, sowohl wechselbar als auch nicht wechselbar, sind Beispiele für computerlesbare Speichermedien. So können beispielsweise computerlesbare Speichermedien flüchtige oder nichtflüchtige, entfernbare oder nicht entfernbare Medien enthalten, die in einem Verfahren oder einer Technologie zur Speicherung von Informationen implementiert sind, wobei die Informationen beispielsweise computerlesbare Anweisungen, Datenstrukturen, Programmodule oder andere Daten enthalten. Der Speicher 1018 und der zusätzliche Speicher 1022 sind Beispiele für Computerspeichermedien. Zusätzliche Arten von Computerspeichermedien, die in den Knoten 1002a-1002h vorhanden sein können, können unter anderem PRAM, SRAM, DRAM, RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, DVD oder andere optische Speicher, Magnetkassetten, Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen, Solid-State-Laufwerke oder andere Medien enthalten, die zum Speichern der gewünschten Informationen verwendet werden können und auf die die Knoten 1002a-1002h zugreifen können. Computerlesbare Medien umfassen auch Kombinationen aus einem der oben genannten Medientypen, einschließlich mehrerer Einheiten eines Medientyps.
  • Alternativ oder zusätzlich können computerlesbare Kommunikationsmedien computerlesbare Anweisungen, Programmmodule oder andere innerhalb eines Datensignals übertragene Daten, wie beispielsweise eine Trägerwelle oder eine andere Übertragung, enthalten. Der hier verwendete Begriff „computerlesbare Speichermedien“ schließt jedoch keine computerlesbaren Kommunikationsmedien ein.
  • Die Knoten 1002a-1002h können auch (eine) E/A-Vorrichtung(en) 1026 enthalten, wie beispielsweise eine Tastatur, eine Maus, einen Stift, eine Spracheingabevorrichtung, eine Touch-Eingabevorrichtung, eine Anzeige, Lautsprecher, einen Drucker und dergleichen. Die Knoten 1002a-1002h können auch einen oder mehrere Kommunikationskanäle 1036 enthalten. Ein Kommunikationskanal 1036 kann ein Medium bereitstellen, über das die verschiedenen Komponenten des/der Knoten 1002a-1002h kommunizieren können. Der oder die Kommunikationskanäle 1036 können die Form eines Busses, eines Rings, einer Schaltanlage oder eines Netzwerks annehmen.
  • Die Knoten 1002a-1002h können auch eine Netzwerkvorrichtung 1024 enthalten, die es den Knoten 1002a-1002h ermöglicht, mit einer gespeicherten Datenbank, einer anderen Computervorrichtung oder einem Server, Benutzerendvorrichtungen und/oder anderen Vorrichtungen im Netzwerk/in den Netzwerken 1000 zu kommunizieren.
  • In einigen Implementierungen ist die Netzwerkvorrichtung 1024 eine Peripherievorrichtung, wie beispielsweise eine PCI-basierte Vorrichtung. In diesen Implementierungen beinhaltet die Netzwerkvorrichtung 1024 eine PCI-Schnittstelle zur Kommunikation mit einer Hostvorrichtung. Der Begriff „PCI“ oder „PCI-basiert“ kann verwendet werden, um jedes Protokoll in der PCI-Busprotokollfamilie zu beschreiben, einschließlich des ursprünglichen PCI-Standards, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express(PCIe) oder andere Verbesserungs- oder abgeleitete Protokolle, die auf den hierin beschriebenen PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle für die Verbindung von Vorrichtungen, wie z. B. einer lokalen Peripherievorrichtung mit einer Hostvorrichtung. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation definiert und von verschiedenen Anbietern übernommen wurde. Die Anbieter stellen sicher, dass konforme Vorrichtungen mit Computersystemen kompatibel sind, die das Busprotokoll implementieren, und umgekehrt. Wie hierin verwendet, enthalten PCI-basierte Vorrichtungen auch Vorrichtungen, die über Non-Volatile Memory Express (NVMe) kommunizieren. NVMe ist eine Vorrichtungsschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die an ein Computersystem mit PCIe angeschlossen sind. So kann beispielsweise das Bus-Schnittstellenmodul NVMe implementieren, und die Netzwerkvorrichtung 1024 kann über eine PCIe-Schnittstelle mit einem Computersystem verbunden werden.
  • Eine PCI-basierte Vorrichtung kann eine oder mehrere Funktionen enthalten. Eine „Funktion“ beschreibt Operationen, die von der Netzwerkvorrichtung 1024 bereitgestellt werden können. Beispiele für Funktionen sind unter anderem Massenspeicher-Controller, Netzwerk-Controller, Display-Controller, Speicher-Controller, serielle Bus-Controller, Wireless-Controller, Ver- und Entschlüsselungs-Controller. In einigen Fällen kann eine PCI-basierte Vorrichtung mehr als eine Funktion enthalten. So kann beispielsweise eine PCI-basierte Vorrichtung einen Massenspeicher-Controller und einen Netzwerkadapter bereitstellen. Als weiteres Beispiel kann eine PCI-basierte Vorrichtung zwei Speichersteuerungen bereitstellen, um zwei verschiedene Speicherressourcen zu steuern. In einigen Implementierungen kann eine PCI-basierte Vorrichtung bis zu acht Funktionen haben.
  • In einigen Implementierungen kann die Netzwerkvorrichtung 1024 eine Single-Root-E/A-Virtualisierung (SR-IOV) enthalten. SR-IOV ist eine erweiterte Funktion, die in eine PCI-basierte Vorrichtung integriert werden kann. SR-IOV ermöglicht es, dass eine physische Ressource (z. B. ein einzelner Netzwerk-Schnittstellencontroller) als mehrere Ressourcen (z. B. vierundsechzig Netzwerk-Schnittstellencontroller) erscheint. Somit kann eine PCI-basierte Vorrichtung, die eine bestimmte Funktionalität bereitstellt (z. B. eine Netzwerkschnittstellen-Steuerung), für eine Vorrichtung, die die PCI-basierte Vorrichtung verwendet, als mehrere Vorrichtungen mit derselben Funktionalität erscheinen. Die Funktionen einer SR-IOV-fähigen Speicheradaptervorrichtung können als physikalische Funktionen (PFs) oder virtuelle Funktionen (VFs) klassifiziert werden. Physische Funktionen sind vollwertige Funktionen der Vorrichtung, die entdeckt, verwaltet und manipuliert werden können. Physische Funktionen verfügen über Konfigurationsressourcen, mit denen die Speicheradaptervorrichtung konfiguriert oder gesteuert werden kann. Zu den physischen Funktionen gehören der gleiche Konfigurations-Adressraum und Speicher-Adressraum, den eine nicht-virtualisierte Vorrichtung haben würde. Eine physikalische Funktion kann mit einer Reihe von virtuellen Funktionen verbunden sein. Virtuelle Funktionen ähneln physischen Funktionen, sind aber leichte Funktionen, die im Allgemeinen keine Konfigurationsressourcen haben und im Allgemeinen durch die Konfiguration ihrer zugrunde liegenden physischen Funktionen gesteuert werden. Jede der physischen Funktionen und/oder virtuellen Funktionen kann einem entsprechenden Ausführungs-Thread (wie z. B. einer virtuellen Maschine) zugeordnet werden, der auf einer Hostvorrichtung läuft.
  • Die hierin beschriebenen Module können Softwaremodule, Hardwaremodule oder eine geeignete Kombination davon sein. Wenn es sich bei den Modulen um Softwaremodule handelt, können die Module auf einem nichtflüchtigen, computerlesbaren Medium verkörpert und von einem Prozessor in einem der hierin beschriebenen Computersysteme verarbeitet werden. Es ist zu beachten, dass die beschriebenen Prozesse und Architekturen entweder in Echtzeit oder in einem asynchronen Modus vor jeder Benutzerinteraktion ausgeführt werden können. Die Module können auf die in den vorausgegangenen Figuren vorgeschlagene Weise konfiguriert werden, und/oder die hierin beschriebenen Funktionen können von einem oder mehreren Modulen bereitgestellt werden, die als separate Module existieren und/oder die hierin beschriebenen Modulfunktionen können auf mehrere Module verteilt werden.
  • Die Beschreibung und die Zeichnungen sind dementsprechend eher veranschaulichend als einschränkend zu verstehen. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom breiteren Geist und Umfang der Offenbarung abzuweichen, wie sie in den Ansprüchen dargelegt sind.
  • Weitere Variationen liegen im Geist der vorliegenden Offenbarung. Während die offenbarten Techniken für verschiedene Modifikationen und alternative Konstruktionen anfällig sind, sind bestimmte veranschaulichte Beispiele davon in den Zeichnungen gezeigt und wurden oben im Detail beschrieben. Es versteht sich jedoch, dass nicht beabsichtigt ist, die Offenbarung auf die bestimmte Form oder die bestimmten offenbarten Formen zu beschränken, sondern dass im Gegenteil beabsichtigt ist, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Geist und Umfang der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
  • Die Verwendung der Begriffe „ein“ und „eine/r“ und „der/die/das“ und ähnlicher Verweise im Zusammenhang mit der Beschreibung der offenbarten Beispiele (insbesondere im Zusammenhang mit den folgenden Ansprüchen) soll so ausgelegt werden, dass sie sowohl den Singular als auch den Plural abdeckt, sofern hierin nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. Die Begriffe „umfassen“, „haben“, „aufweisen“ und „enthalten“ sind als nicht einschränkende Begriffe zu verstehen (d. h. bedeuten „einschließlich, aber nicht darauf beschränkt“), sofern nicht anders angegeben. Der Begriff „verbunden“ ist so zu verstehen, dass etwas teilweise oder vollständig in etwas enthalten ist, daran angehängt oder zusammengefügt ist, selbst wenn etwas dazwischen liegt. Die Angabe von Wertebereichen hierin soll lediglich als Kurzform dienen, um sich einzeln auf jeden einzelnen Wert zu beziehen, der in den Bereich fällt, sofern hier nichts anderes angegeben ist, und jeder einzelne Wert wird in die Beschreibung aufgenommen, als ob er hier einzeln angegeben wäre. Alle hier beschriebenen Verfahren können in jeder geeigneten Reihenfolge durchgeführt werden, sofern hier nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. Die Verwendung aller hierin bereitgestellten Beispiele oder beispielhaften Ausdrücke (z. B. „wie“) soll lediglich Beispiele der Offenbarung besser veranschaulichen und stellt keine Einschränkung des Umfangs der Offenbarung dar, sofern nicht anders beansprucht. Keine Sprache in der Beschreibung sollte so ausgelegt werden, dass sie ein nicht beanspruchtes Element anzeigt, das für die Ausübung der Offenbarung wesentlich ist.
  • Eine disjunktive Sprache wie der Ausdruck „mindestens eines von X, Y oder Z“ soll, sofern nicht ausdrücklich anders angegeben, in dem Kontext verstanden werden, der allgemein verwendet wird, um darzustellen, dass ein Artikel, Begriff usw. entweder X, Y oder Z sein kann oder eine beliebige Kombination davon (z. B. X, Y und / oder Z). Somit soll und sollte eine solche disjunktive Sprache nicht generell bedeuten, dass bei bestimmten Beispielen mindestens eines von X, mindestens eines von Y oder mindestens eines von Z vorhanden sein muss.
  • Verschiedene Beispiele der vorliegenden Offenbarung werden hierin beschrieben, einschließlich der den Erfindern bekannten besten Art zum Ausführen der Offenbarung. Variationen dieser Beispiele können für den Fachmann beim Lesen der vorstehenden Beschreibung offensichtlich werden. Die Erfinder erwarten von Fachleuten, dass sie solche Variationen nach Bedarf anwenden, und die Erfinder beabsichtigen, dass die Offenbarung anders als hier spezifisch beschrieben praktiziert wird. Dementsprechend umfasst diese Offenbarung alle Modifikationen und Äquivalente des in den beigefügten Ansprüchen angegebenen Artikels, soweit dies nach geltendem Recht zulässig ist. Darüber hinaus ist jede Kombination der oben beschriebenen Elemente in allen möglichen Variationen davon von der Offenbarung umfasst, es sei denn, es ist hierin anders angegeben oder durch den Kontext klar widersprüchlich.
  • Im Folgenden ist jede Bezugnahme auf eine Reihe von Beispielen als Bezugnahme auf jedes dieser Beispiele in disjunktiver Form zu verstehen (z. B. ist „Beispiele 1-4“ als „Beispiele 1, 2, 3 oder 4“ zu verstehen).
  • Beispiel 1 ist ein Verfahren zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor, wobei das Verfahren Folgendes umfasst: Empfangen einer Anforderung zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf dem Zielprozessor durch ein auf einem Host-System arbeitendes Fehlersuchprogramm, wobei das neuronale Netzwerk mehrere Schichten umfasst, Erzeugen mehrerer erster Referenztensoren für das neuronale Netzwerk unter Verwendung eines Referenzprozessors auf dem Host-System und auf der Grundlage einer ersten Probeeingabe; wiederholtes Reduzieren der mehreren Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge aus mehreren Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen auf dem Host-System arbeitenden Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors und auf der Grundlage der ersten Probeeingabe oder eines der mehreren ersten Referenztensoren, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, durch das Debugger-Programm, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer kürzesten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; Erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der kürzesten Länge unter Verwendung des Referenzprozessors und auf der Grundlage einer zweiten Probeeingabe; Umwandeln des neuronalen Netzwerks mit der kürzesten Länge in zweite Maschinenanweisungen durch den Compiler, wobei die zweiten Maschinenanweisungen zusätzliche Anweisungen enthalten, die eine Tensorausgabe für die Darstellung auf niedrigerer Ebene ermöglichen; Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors und auf der Grundlage der zweiten Probeeingabe oder eines der mehreren zweiten Referenztensoren, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen; und Bestimmen, durch das Debugger-Programm, ob der zweite Gerätetensor mit einem zweiten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 2 ist das Verfahren von Beispiel(en) 1, wobei die zusätzlichen Anweisungen die Tensorausgabe für mehrere Darstellungen des neuronalen Netzwerks auf niedrigerer Ebene ermöglichen.
  • Beispiel 3 ist das Verfahren von Beispiel(en) 2, wobei das Ausführen der zweiten Maschinenanweisungen ferner einen dritten Gerätetensor für eine zweite Darstellung des neuronalen Netzwerks auf niedrigerer Ebene erzeugt, wobei die Darstellung auf niedrigerer Ebene eine erste Darstellung auf niedrigerer Ebene ist.
  • Beispiel 4 ist das Verfahren von Beispiel(en) 3, ferner umfassend: Bestimmen, durch das Debugger-Programm, ob der dritte Gerätetensor mit einem dritten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 5 ist das Verfahren eines der Beispiele 1-4, wobei die mehreren ersten Referenztensoren und die mehreren zweiten Referenztensoren durch das Debugger-Programm erzeugt werden.
  • Beispiel 6 ist ein Verfahren zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor, wobei das Verfahren Folgendes umfasst: Empfangen mehrerer erster Referenztensoren für ein neuronales Netzwerk; wiederholtes Reduzieren mehrerer Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge mehrerer Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer verkürzten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; Erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der verkürzten Länge; Umwandeln des neuronalen Netzwerks mit der verkürzten Länge in zweite Maschinenanweisungen durch den Compiler; und Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen.
  • Beispiel 7 ist das Verfahren von Beispiel(en) 6, wobei die verkürzte Länge eine kürzeste Länge der mehreren Längen ist.
  • Beispiel 8 ist das Verfahren von Beispiel(en) 6 oder 7, ferner umfassend: Bestimmen, durch das Debugger-Programm, ob der zweite Gerätetensor mit einem zweiten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 9 ist das Verfahren eines der Beispiele 6-8, wobei die zweiten Maschinenanweisungen zusätzliche Anweisungen enthalten, die eine Tensorausgabe für die Darstellung auf niedrigerer Ebene ermöglichen.
  • Beispiel 10 ist das Verfahren von Beispiel(en) 9, wobei die zusätzlichen Anweisungen die Tensorausgabe für mehrere Darstellungen des neuronalen Netzwerks auf niedrigerer Ebene ermöglichen.
  • Beispiel 11 ist das Verfahren von Beispiel(en) 10, wobei das Ausführen der zweiten Maschinenanweisungen ferner einen dritten Gerätetensor für eine zweite Darstellung des neuronalen Netzwerks auf niedrigerer Ebene erzeugt, wobei die Darstellung auf niedrigerer Ebene eine erste Darstellung auf niedrigerer Ebene ist.
  • Beispiel 12 ist das Verfahren von Beispiel(en) 11, ferner umfassend: Bestimmen, durch das Debugger-Programm, ob der dritte Gerätetensor mit einem dritten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 13 ist das Verfahren eines der Beispiele 6-12, wobei die mehreren ersten Referenztensoren und die mehreren zweiten Referenztensoren durch das Debugger-Programm erzeugt werden.
  • Beispiel 14 ist ein nichtflüchtiges computerlesbares Medium, das Anweisungen umfasst, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, die Folgendes umfassen: Empfangen mehrerer erster Referenztensoren für ein neuronales Netzwerk; wiederholtes Reduzieren mehrerer Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge mehrerer Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer verkürzten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der verkürzten Länge; Umwandeln des neuronalen Netzwerks mit der verkürzten Länge in zweite Maschinenanweisungen durch den Compiler; und Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen.
  • Beispiel 15 ist das nichtflüchtige computerlesbare Medium von Beispiel(en) 14, wobei die verkürzte Länge eine kürzeste Länge der mehreren Längen ist.
  • Beispiel 16 ist das nichtflüchtige computerlesbare Medium von Beispiel(en) 14 oder 15, wobei die Operationen ferner Folgendes umfassen: Bestimmen, durch das Debugger-Programm, ob der zweite Gerätetensor mit einem zweiten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 17 ist das nichtflüchtige computerlesbare Medium eines der Beispiele 14-16, wobei die zweiten Maschinenanweisungen zusätzliche Anweisungen enthalten, die eine Tensorausgabe für die Darstellung auf niedrigerer Ebene ermöglichen.
  • Beispiel 18 ist das nichtflüchtige computerlesbare Medium von Beispiel(en) 17, wobei die zusätzlichen Anweisungen die Tensorausgabe für mehrere Darstellungen des neuronalen Netzwerks auf niedrigerer Ebene ermöglichen.
  • Beispiel 19 ist das nichtflüchtige computerlesbare Medium von Beispiel(en) 18, wobei das Ausführen der zweiten Maschinenanweisungen ferner einen dritten Gerätetensor für eine zweite Darstellung des neuronalen Netzwerks auf niedrigerer Ebene erzeugt, wobei die Darstellung auf niedrigerer Ebene eine erste Darstellung auf niedrigerer Ebene ist.
  • Beispiel 20 ist das nichtflüchtige computerlesbare Medium von Beispiel(en) 19, wobei die Operationen ferner Folgendes umfassen: Bestimmen, durch das Debugger-Programm, ob der dritte Gerätetensor mit einem dritten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 21 ist ein System, umfassend: einen oder mehrere Prozessoren; und ein nichtflüchtiges computerlesbares Medium, das Anweisungen umfasst, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, die Folgendes umfassen: Empfangen mehrerer erster Referenztensoren für ein neuronales Netzwerk; wiederholtes Reduzieren mehrerer Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge mehrerer Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer verkürzten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der verkürzten Länge; Umwandeln des neuronalen Netzwerks mit der verkürzten Länge in zweite Maschinenanweisungen durch den Compiler; und Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen.
  • Beispiel 22 ist das System von Beispiel(en) 21, wobei die verkürzte Länge eine kürzeste Länge der mehreren Längen ist.
  • Beispiel 23 ist das System von Beispiel(en) 21 oder 22, wobei die Operationen ferner Folgendes umfassen: Bestimmen, durch das Debugger-Programm, ob der zweite Gerätetensor mit einem zweiten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  • Beispiel 24 ist das System eines der Beispiele 21-23, wobei die zweiten Maschinenanweisungen zusätzliche Anweisungen enthalten, die eine Tensorausgabe für die Darstellung auf niedrigerer Ebene ermöglichen.
  • Beispiel 25 ist das System von Beispiel(en) 24, wobei die zusätzlichen Anweisungen die Tensorausgabe für mehrere Darstellungen des neuronalen Netzwerks auf niedrigerer Ebene ermöglichen.
  • Beispiel 26 ist das System von Beispiel(en) 25, wobei das Ausführen der zweiten Maschinenanweisungen ferner einen dritten Gerätetensor für eine zweite Darstellung des neuronalen Netzwerks auf niedrigerer Ebene erzeugt, wobei die Darstellung auf niedrigerer Ebene eine erste Darstellung auf niedrigerer Ebene ist.
  • Beispiel 27 ist das System von Beispiel(en) 26, wobei die Operationen ferner Folgendes umfassen: Bestimmen, durch das Debugger-Programm, ob der dritte Gerätetensor mit einem dritten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.

Claims (15)

  1. Verfahren zur Fehlersuche bei der Ausführung eines neuronalen Netzwerks auf einem Zielprozessor, wobei das Verfahren Folgendes umfasst: Empfangen mehrerer erster Referenztensoren für ein neuronales Netzwerk; wiederholtes Reduzieren mehrerer Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge mehrerer Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer verkürzten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; Erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der verkürzten Länge; Umwandeln des neuronalen Netzwerks mit der verkürzten Länge in zweite Maschinenanweisungen durch den Compiler; und Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen.
  2. Verfahren nach Anspruch 1, wobei die verkürzte Länge eine kürzeste Länge der mehreren Längen ist.
  3. Verfahren nach Anspruch 1 oder 2, ferner umfassend: Bestimmen, durch das Debugger-Programm, ob der zweite Gerätetensor mit einem zweiten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  4. Verfahren nach einem der Ansprüche 1-3, wobei die zweiten Maschinenanweisungen zusätzliche Anweisungen enthalten, die eine Tensorausgabe für die Darstellung auf niedrigerer Ebene ermöglichen.
  5. Verfahren nach Anspruch 4, wobei die zusätzlichen Anweisungen die Tensorausgabe für mehrere Darstellungen des neuronalen Netzwerks auf niedrigerer Ebene ermöglichen.
  6. Verfahren nach Anspruch 5, wobei das Ausführen der zweiten Maschinenanweisungen ferner einen dritten Gerätetensor für eine zweite Darstellung des neuronalen Netzwerks auf niedrigerer Ebene erzeugt, wobei die Darstellung auf niedrigerer Ebene eine erste Darstellung auf niedrigerer Ebene ist.
  7. Verfahren nach Anspruch 6, ferner umfassend: Bestimmen, durch das Debugger-Programm, ob der dritte Gerätetensor mit einem dritten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  8. Verfahren nach einem der Ansprüche 1-7, wobei die mehreren ersten Referenztensoren und die mehreren zweiten Referenztensoren durch das Debugger-Programm erzeugt werden.
  9. Nichtflüchtiges computerlesbares Medium, das Anweisungen umfasst, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, umfassend: Empfangen mehrerer erster Referenztensoren für ein neuronales Netzwerk; wiederholtes Reduzieren mehrerer Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge mehrerer Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer verkürzten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; Erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der verkürzten Länge; Umwandeln des neuronalen Netzwerks mit der verkürzten Länge in zweite Maschinenanweisungen durch den Compiler; und Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen.
  10. Nichtflüchtiges computerlesbares Medium nach Anspruch 9, wobei die verkürzte Länge eine kürzeste Länge der mehreren Längen ist.
  11. Nichtflüchtiges computerlesbares Medium nach Anspruch 9 oder 10, wobei die Operationen ferner Folgendes umfassen: Bestimmen, durch das Debugger-Programm, ob der zweite Gerätetensor mit einem zweiten Referenztensor aus den mehreren zweiten Referenztensoren übereinstimmt.
  12. Nichtflüchtiges computerlesbares Medium nach einem der Ansprüche 9-11, wobei die zweiten Maschinenanweisungen zusätzliche Anweisungen enthalten, die eine Tensorausgabe für die Darstellung auf niedrigerer Ebene ermöglichen.
  13. Nichtflüchtiges computerlesbares Medium nach Anspruch 12, wobei die zusätzlichen Anweisungen die Tensorausgabe für mehrere Darstellungen des neuronalen Netzwerks auf niedrigerer Ebene ermöglichen.
  14. Nichtflüchtiges computerlesbares Medium nach Anspruch 13, wobei das Ausführen der zweiten Maschinenanweisungen ferner einen dritten Gerätetensor für eine zweite Darstellung des neuronalen Netzwerks auf niedrigerer Ebene erzeugt, wobei die Darstellung auf niedrigerer Ebene eine erste Darstellung auf niedrigerer Ebene ist.
  15. System, aufweisend: einen oder mehrere Prozessoren; und ein nichtflüchtiges computerlesbares Medium, das Anweisungen umfasst, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Operationen durchzuführen, umfassend: Empfangen mehrerer erster Referenztensoren für ein neuronales Netzwerk; wiederholtes Reduzieren mehrerer Schichten des neuronalen Netzwerks, um mehrere Längen zu erzeugen, und für jede bestimmte Länge mehrerer Längen: Umwandeln des neuronalen Netzwerks mit der bestimmten Länge in erste Maschinenanweisungen durch einen Compiler; Ausführen der ersten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen ersten Gerätetensor zu erzeugen; und Bestimmen, ob der erste Gerätetensor mit einem ersten Referenztensor aus den mehreren ersten Referenztensoren übereinstimmt; Identifizieren einer verkürzten Länge aus den mehreren Längen, für die der erste Gerätetensor nicht mit dem ersten Referenztensor übereinstimmt; Erzeugen mehrerer zweiter Referenztensoren für eine Darstellung des neuronalen Netzwerks auf niedrigerer Ebene mit der verkürzten Länge; Umwandeln des neuronalen Netzwerks mit der verkürzten Länge in zweite Maschinenanweisungen durch den Compiler; und Ausführen der zweiten Maschinenanweisungen unter Verwendung des Zielprozessors, um einen zweiten Gerätetensor für die Darstellung auf niedrigerer Ebene zu erzeugen.
DE112020003105.5T 2019-06-27 2020-06-26 Schicht für schicht-debugging von neuronalen netzwerken Pending DE112020003105T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/455,329 2019-06-27
US16/455,329 US11308396B2 (en) 2019-06-27 2019-06-27 Neural network layer-by-layer debugging
PCT/US2020/039872 WO2020264335A1 (en) 2019-06-27 2020-06-26 Neural network layer-by-layer debugging

Publications (1)

Publication Number Publication Date
DE112020003105T5 true DE112020003105T5 (de) 2022-05-19

Family

ID=71728910

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020003105.5T Pending DE112020003105T5 (de) 2019-06-27 2020-06-26 Schicht für schicht-debugging von neuronalen netzwerken

Country Status (4)

Country Link
US (1) US11308396B2 (de)
CN (1) CN114008635A (de)
DE (1) DE112020003105T5 (de)
WO (1) WO2020264335A1 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449711B2 (en) * 2020-01-02 2022-09-20 Applied Materials Isreal Ltd. Machine learning-based defect detection of a specimen
US11347488B2 (en) * 2020-05-18 2022-05-31 Fortinet, Inc. Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device
CN115879544B (zh) * 2023-02-28 2023-06-16 中国电子科技南湖研究院 一种针对分布式类脑仿真的神经元编码方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109542713B (zh) 2019-02-21 2021-07-09 深兰人工智能芯片研究院(江苏)有限公司 一种验证方法及验证装置
US11694090B2 (en) * 2019-04-10 2023-07-04 International Business Machines Corporation Debugging deep neural networks
US11556861B2 (en) * 2019-05-06 2023-01-17 Google Llc Debugging correctness issues in training machine learning models

Also Published As

Publication number Publication date
CN114008635A (zh) 2022-02-01
US20200410354A1 (en) 2020-12-31
US11308396B2 (en) 2022-04-19
WO2020264335A1 (en) 2020-12-30

Similar Documents

Publication Publication Date Title
DE112020003127T5 (de) Erweiterung von dynamischem Verarbeitungselement-Array
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
DE102018132069A1 (de) Äquivariante Orientierungspunkt-Transformation für Orientierungspunkt-Lokalisierung
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE112020004702T5 (de) Bildgenerierung unter verwendung eines oder mehrerer neuronaler netze
DE112020004625T5 (de) Transponierte faltung mit systolischem array
DE112020003066T5 (de) Transponierungsoperationen mit verarbeitungselementarray
DE112020004237T5 (de) Video-upsampling unter verwendung eines oder mehrerer neuronaler netze
DE112020003105T5 (de) Schicht für schicht-debugging von neuronalen netzwerken
DE102019106123A1 (de) Dreidimensionale (3D) Posenschätzung von Seiten einer monokularen Kamera
DE112020004107T5 (de) Inhaltsempfehlungen unter verwendung eines oder mehrerer neuronaler netze
DE102021107050A1 (de) Gradientenkomprimierung für verteiltes training
DE112020005789T5 (de) Hierarchische partitionierung von operatoren
DE112018005205T5 (de) Komprimierung von vollständig verbundenen / wiederkehrenden Schichten von einem oder mehreren tiefen Netzen durch Durchsetzen von räumlicher Lokalität für Gewichtsmatrizen und erwirken von Frequenzkomprimierung
DE102021107509A1 (de) Multi-modell-trainingspipeline in verteilten systemen
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE112020003165T5 (de) Videointerpolation unter Verwendung eines oder mehrerer neuronaler Netze
DE102021107586A1 (de) Spekulatives training unter verwendung der aktualisierung partieller gradienten
DE112020005020T5 (de) Stellungsbestimmung unter verwendung eines oder mehrerer neuronaler netze
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102019108733A1 (de) Schnelle mehrskalige Punktwolkenregistrierung mit einer hierarchischen Gauß-Mischung
DE102020121601A1 (de) Persistenter Notizblockspeicher zum Datenaustausch zwischen Programmen
DE102019106996A1 (de) Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks
DE112020003055T5 (de) Neuanordnen der operationen eines neuronalen netzwerks für parallele ausführung
DE112020002693T5 (de) Verringerung der berechnung in neuralen netzwerken mit selbstmodifizierendem code

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: ZACCO LEGAL RECHTSANWALTSGESELLSCHAFT MBH, DE