DE102019106996A1 - Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks - Google Patents

Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks Download PDF

Info

Publication number
DE102019106996A1
DE102019106996A1 DE102019106996.3A DE102019106996A DE102019106996A1 DE 102019106996 A1 DE102019106996 A1 DE 102019106996A1 DE 102019106996 A DE102019106996 A DE 102019106996A DE 102019106996 A1 DE102019106996 A1 DE 102019106996A1
Authority
DE
Germany
Prior art keywords
ann
paths
data
weights
sampling
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
DE102019106996.3A
Other languages
English (en)
Inventor
Alexander Keller
Goncalo Felipe Torcato Mordido
Noah Jonathan Gamboa
Matthijs Jules van Keirsbilck
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
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
Priority claimed from US16/352,596 external-priority patent/US11507846B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102019106996A1 publication Critical patent/DE102019106996A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/088Non-supervised learning, e.g. competitive learning
    • 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
    • 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
    • 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/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

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

Abstract

Künstliche neuronale Netzwerke (ANNs) sind Computersysteme, die ein menschliches Gehirn nachahmen, indem sie lernen, Aufgaben anhand von Beispielen auszuführen. Durch die Darstellung eines künstlichen neuronalen Netzwerks unter Verwendung individueller Pfade, die jeweils einen Eingang des ANN mit einem Ausgang des ANN verbinden, kann eine Komplexität des ANN reduziert werden, und kann das ANN im Vergleich zu einer Implementierung mit vollständig verbundenen ANN-Graphen viel schneller trainiert und implementiert werden.

Description

  • GEBIET DER ERFINDUNG
  • Die Erfindung bezieht sich auf künstliche neuronale Netzwerke, und insbesondere auf die Darstellung eines neuronalen Netzwerks unter Verwendung Pfaden innerhalb des Netzwerks.
  • HINTERGRUND
  • Künstliche neuronale Netzwerke (Artificial Neural Networks; ANNs) sind häufig verwendete Computersysteme, die eine Vielzahl von Aufgaben adressieren, wie z.B. Klassifizierung, Bilderkennung, Regression, Funktionsapproximation, Abtastung von Daten in Übereinstimmung mit einer gelernten Verteilung, usw. Aktuelle, vollständig verbundene ANN-Implementierungen sind jedoch von quadratischer Natur, und sind rechenintensiv und zeitaufwändig zu implementieren, zu trainieren und zu betreiben. Darüber hinaus müssen aktuelle Verarbeitungseinheiten in Hardware lineare Algorithmen verwenden, um effizient zu sein. Es besteht daher eine Notwendigkeit, ANNs mit linearer Komplexität in Zeit und Speicherplatz zu implementieren.
  • Figurenliste
    • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Implementieren eines linearen neuronalen Netzwerks gemäß einem Ausführungsbeispiel.
    • 2 veranschaulicht eine Parallelverarbeitungseinheit gemäß einem Ausführungsbeispiel.
    • 3A veranschaulicht einen Universalverarbeitungscluster innerhalb der Parallelverarbeitungseinheit von 2 gemäß einem Ausführungsbeispiel.
    • 3B veranschaulicht eine Speicherpartitionseinheit der Parallelverarbeitungseinheit von 2 gemäß einem Ausführungsbeispiel.
    • 4A veranschaulicht den Streaming-Multiprozessor von 3A gemäß einem Ausführungsbeispiel.
    • 4B ist ein konzeptionelles Diagramm eines unter Verwendung der PPU von 2 implementierten Verarbeitungssystems gemäß einem Ausführungsbeispiel.
    • 4C veranschaulicht ein beispielhaftes System, in welchem die unterschiedliche Architektur und/oder Funktionalität der verschiedenen vorangehenden Ausführungsbeispiele implementiert sein kann.
    • 5 ist ein konzeptionelles Diagramm einer von der PPU von 2 implementierten Grafikverarbeitungspipeline gemäß einem Ausführungsbeispiel.
    • 6 veranschaulicht ein beispielhaft gerichtetes Diagramm eines künstlichen neuronalen Netzwerks gemäß einem Ausführungsbeispiel.
    • 7 veranschaulicht eine beispielhafte Interpretation von Projektionen auf Halbräume als neuronale ReLU-Einheiten gemäß einem Ausführungsbeispiel.
    • 8 veranschaulicht einen beispielhaften Vergleich von zwei Dropout-Instanzen zu einer Partitions-Instanz gemäß einem Ausführungsbeispiel.
    • 9 veranschaulicht beispielhaft ausgewählte Pfade in einem künstlichen neuronalen Netzwerk gemäß einem Ausführungsbeispiel.
    • 10 veranschaulicht ein Subsampling von Aktivierungen einer gesamten Feature Layer online während einer Inferenz (und eines Trainings) gemäß einem Ausführungsbeispiel.
    • 11 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Erzeugen von Pfaden zum Verbinden einer Reihe von neuronalen Einheiten innerhalb eines künstlichen neuronalen Netzwerks gemäß einem Ausführungsbeispiel.
    • 12 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Komprimieren eines künstlichen neuronalen Netzwerks gemäß einem Ausführungsbeispiel.
    • 13 veranschaulicht ein Ablaufdiagramm eines Verfahrens zum Durchführen einer Netzwerknormalisierung gemäß einem Ausführungsbeispiel.
  • DETAILLIERTE BESCHREIBUNG
  • Künstliche neuronale Netzwerke (ANNs) sind Computersysteme, die ein menschliches Gehirn nachahmen, indem sie lernen, Aufgaben anhand von Beispielen auszuführen. Diese ANNs werden typischerweise durch Verbinden mehrerer Schichten neuronaler Einheiten unter Verwendung von Verbindungen erzeugt, wobei jede neuronale Einheit mit jeder anderen neuronalen Einheit entweder direkt oder indirekt verbunden ist, um vollständig verbundene Schichten innerhalb des ANN zu erzeugen. Durch Darstellen eines künstlichen neuronalen Netzwerks unter Verwendung von Pfaden von einem Eingang des ANN zu einem Ausgang des ANN kann jedoch eine Komplexität des ANN reduziert werden, und kann das ANN im Vergleich zu vollständig verbundenen Schichten innerhalb des ANN viel schneller trainiert und implementiert werden.
  • 1 veranschaulicht ein Ablaufdiagramm eines Verfahrens 100 zum Implementieren eines linearen neuronalen Netzwerks gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 100 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 100 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. Beispielsweise kann das Verfahren 100 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit), einem FPGA (Field Programmable Gate Array) oder einem beliebigen Prozessor oder rekonfigurierbaren Prozessor ausgeführt werden, der die Auswertung und/oder das Training von ANNs durchführen kann. Darüber hinaus versteht sich für den Fachmann, dass jedes System, das die Methode 100 durchführt, im Schutzumfang und Rahmen der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 102 dargestellt ist, wird ein künstliches neuronales Netzwerk (ANN) erzeugt, das durch eine Vielzahl von Pfaden dargestellt bzw. repräsentiert wird, die jeweils zumindest einen Eingang des ANN mit zumindest einem Ausgang des ANN verbinden. Darüber hinaus beinhaltet jeder der Vielzahl von Pfaden eine Vielzahl von Knoten, die jeweils eine neuronale Einheit innerhalb des ANN repräsentieren, und eine Vielzahl von Kanten, die jeweils eine gewichtete Verbindung innerhalb des ANN repräsentieren.
  • In einem Ausführungsbeispiel werden Eingangsdaten von dem ANN verarbeitet, um Ausgangsdaten zu erzeugen. In einem anderen Ausführungsbeispiel können die Eingangsdaten eines oder mehreres von Bilddaten, Textdaten, Audiodaten, Videodaten, Zufallszahlen, Pseudozufallszahlen oder Quasizufallszahlen usw. beinhalten. In einem weiteren Ausführungsbeispiel kann eine Einbettungsfunktion dazu verwendet werden, Eingangsdaten auf einen Vektor von Fließkommazahlen abzubilden, die von dem ANN zu verarbeiten sind. In einem weiteren Ausführungsbeispiel kann ein Einbetten durch ein künstliches neuronales Netzwerk selbst dargestellt werden. In einem weiteren Ausführungsbeispiel können die Ausgangsdaten eines oder mehreres einer Klassifizierung, einer Kategorisierung, einer Wahrscheinlichkeit, einer Regression, einer Funktionsapproximation, Abtastungen von Daten gemäß einer gelernten Verteilung (z.B. Generative Adversarial Networks (GANs)) usw. beinhalten. In einem nochmals weiteren Ausführungsbeispiel können die Eingangsdaten Umgebungsdaten beinhalten (z.B. aufgezeichnete Bilddaten einer Umgebung, die ein Automobil umgibt, usw.), und können die Ausgangsdaten eine Identifizierung/Klassifizierung eines oder mehrerer Objekte innerhalb der Umgebungsdaten beinhalten (wie beispielsweise Autos, Radfahrer, Fußgänger, usw.).
  • In einem nochmals weiteren Ausführungsbeispiel wird das ANN unter Verwendung von markierten bzw. gekennzeichneten Eingangsdaten trainiert. Beispielsweise kann das Training teilüberwacht, unbeaufsichtigt usw. sein. In einem nochmals weiteren Ausführungsbeispiel ist das ANN das Herzstück einer Verstärkungs-Lernmaschine, um Maßnahmen zu ergreifen und einen Wert anzunähern. In diesem Fall wird das ANN durch Durchführen einer Simulation einer Markov-Kette teilüberwacht trainiert. Auf eine nochmals weitere Weise wird das ANN dazu verwendet, das nächste Datenelement vorherzusagen, und wird in einer unbeaufsichtigten Weise trainiert, indem Trainingsdaten bereitgestellt werden, die die nächsten vorherzusagenden Daten beinhalten.
  • Darüber hinaus kann In einem Ausführungsbeispiel jeder der Vielzahl von Pfaden eine Sequenz von Pfaden beinhalten. In einem weiteren Ausführungsbeispiel kann die Sequenz von Pfaden in eine Vielzahl von zusammenhängenden Blöcken aufgeteilt bzw. partitioniert werden, um eine Reihe von künstlichen neuronalen Netzwerken zu erzeugen, die durch die Sequenz von Pfaden repräsentiert werden. In einem nochmals weiteren Ausführungsbeispiel kann jeder der Vielzahl von Pfaden durch Durchführen einer oder mehrerer Abtastungen, Pseudozufallsabtastungen und Quasizufallsabtastungen erzeugt werden. In einem weiteren Ausführungsbeispiel können die Pseudozufallsabtastung und die Quasizufallsabtastung in Hardware durchgeführt werden. In einem nochmals weiteren Ausführungsbeispiel können Teile der Pfade gegeben sein und können und fehlende Teile wie vorstehend beschrieben erzeugt werden. In einem nochmals weiteren Ausführungsbeispiel können die Pfade Pfad für Pfad oder Erzeugung für Erzeugung, d.h. gleichzeitig Schritt für Schritt für alle Pfade, erzeugt werden.
  • Ferner kann In einem Ausführungsbeispiel die Abtastung auf bzw. an einem anderen ANN durchgeführt werden. In einem weiteren Ausführungsbeispiel kann die Abtastung auf vollständig verbundenen Schichten eines ANN durchgeführt werden, um die Vielzahl von Pfaden zu bestimmen. In einem nochmals weiteren Ausführungsbeispiel kann die Vielzahl von Pfaden einen oder mehrere aus einer Teilmenge aller möglichen Pfade innerhalb der vollständig verbundenen Schichten des ANN oder der Faltungsschichten des ANN beinhalten.
  • Beispielsweise kann das andere ANN eine Vielzahl von Schichten beinhalten, wobei jede Schicht eine Gruppierung neuronaler Einheiten (z.B. Knoten) beinhaltet. Wenn das andere ANN vollständig verbunden ist, ist jede neuronale Einheit (Knoten) innerhalb einer Schicht (über eine Kante) mit allen neuronalen Einheiten einer vorangehenden Schicht sowie allen neuronalen Einheiten einer nachfolgenden Schicht innerhalb des anderen ANN verbunden. Diese Verbindungen werden als Kanten bezeichnet. Auf diese Weise sind alle neuronalen Einheiten eines vollständig verbundenen ANN entweder direkt oder indirekt miteinander verbunden.
  • Darüber hinaus können die Pfade durch Abtasten einer Teilmenge aller Verbindungen (Kanten) zwischen den Schichten neuronaler Einheiten innerhalb des anderen ANN erzeugt werden. Beispielsweise kann zwischen einer Eingangsschicht und einer ersten Schicht innerhalb des anderen ANN eine Kante abgetastet werden, die einen Knoten innerhalb der Eingangsschicht mit einem Knoten der ersten Schicht verbindet. Anschließend kann eine Kante abgetastet werden, die den Knoten der ersten Schicht mit einem Knoten einer zweiten Schicht innerhalb des anderen ANN verbindet. Dies kann fortgesetzt werden, bis ein kompletter Pfad abgetastet ist, der den Knoten innerhalb der Eingangsschicht über Kanten mit einem Knoten der Ausgangsschicht des ANN verbindet, wobei ein Knoten aus jeder Zwischenschicht des ANN verwendet wird. Dies kann für alle Knoten der Eingangsschicht und alle Knoten der Ausgangsschicht durchgeführt werden, und jeder Knoten der Eingangsschicht des anderen ANN ist über einen vollständigen Kantenpfad über die Zwischenschichten des ANN mit einem eindeutigen Knoten der Ausgangsschicht verbunden.
  • Ferner kann in einem Ausführungsbeispiel das Netzwerk durch einheitliches Abtasten von Pfaden unter Verwendung eines beliebigen Netzwerkgraphen erzeugt werden. In einem weiteren Ausführungsbeispiel kann der beliebige Netzwerkgraph ein untrainiertes ANN beinhalten. In einem nochmals weiteren Ausführungsbeispiel kann die Vielzahl von Pfaden aus dem untrainierten ANN ausgewählt und ^dazu verwendet werden, ein weiteres ANN zu erzeugen, das das untrainierte ANN repräsentiert. In einem nochmals weiteren Ausführungsbeispiel kann dann dieses andere ANN trainiert werden.
  • Außerdem können in einem Ausführungsbeispiel die gewichteten Verbindungen deterministisch initialisiert werden. Beispielsweise kann jede der gewichteten Verbindungen innerhalb des ANN mit einem konstanten Wert initialisiert werden. In einem weiteren Ausführungsbeispiel können die gewichteten Verbindungen mit einem Wert aus einer Sequenz mit geringer Diskrepanz bzw. Abweichung initialisiert werden.
  • Darüber hinaus kann in einem Ausführungsbeispiel das ANN durch Abtasten der Vielzahl von Pfaden proportional zu einer Vielzahl von gegebenen Gewichten von Schichten des ANN erzeugt werden. In einem weiteren Ausführungsbeispiel können die Gewichte einer Schicht einzeln oder in ihrer Gesamtheit unterabgetastet bzw. subsampled werden. In einem weiteren Ausführungsbeispiel kann das Abtasten der Vielzahl von Pfaden auch das Subsampling von Faltungsgewichten beinhalten. In einem nochmals weiteren Ausführungsbeispiel können Faltungsgewichte einzeln pro Filter oder in ihrer Gesamtheit unterabgetastet werden. In einem nochmals weiteren Ausführungsbeispiel kann die Vielzahl von Pfaden so ausgewählt werden, dass das resultierende Netzwerk berechnet werden kann, ohne Gewichtsmultiplikationen durchzuführen.
  • Ferner wird In einem Ausführungsbeispiel das ANN durch Abtasten der Vielzahl von Pfaden proportional zu einer Vielzahl von gegebenen Aktivierungen von Schichten des ANN erzeugt. In einem weiteren Ausführungsbeispiel wird die Vielzahl von Pfaden proportional zu der Vielzahl von gegebenen Aktivierungen während zumindest eines Trainings des ANN und einer unter Verwendung des ANN durchgeführten Inferenz ausgewählt. In einem nochmals weiteren Ausführungsbeispiel kann die Vielzahl von Pfaden in einer Weise proportional zu einem Fehler während der Rückpropagierung ausgewählt werden. In einem nochmals weiteren Ausführungsbeispiel kann die Vielzahl von Pfaden so ausgewählt werden, dass das resultierende Netzwerk berechnet werden kann, ohne Aktivierungsmultiplikationen durchzuführen.
  • Ferner kann in einem Ausführungsbeispiel die Vielzahl von Pfaden ausgewählt werden, ohne Multiplikationen mit Gewichten oder Multiplikationen mit Aktivierungen durchzuführen. In einem weiteren Ausführungsbeispiel kann das ANN durch Abtasten der Vielzahl von Pfaden proportional sowohl zu einer Vielzahl von gegebenen Gewichten als auch zu einer Vielzahl von gegebenen Aktivierungen von Schichten des ANN erzeugt werden. In einem nochmals weiteren Ausführungsbeispiel kann das ANN ein rekurrentes Netzwerk sein.
  • In einem nochmals weiteren Ausführungsbeispiel kann das ANN unter Verwendung der Parallelverarbeitungseinheit (PPU) 200 aus 2 erstellt, trainiert und/oder implementiert sein.
  • Auf diese Weise können neuronale Netzwerke unter Verwendung von Pfaden dargestellt werden. Darüber hinaus kann eine Komplexität eines neuronalen Netzwerks von quadratisch auf linear reduziert werden. Darüber hinaus kann eine Abtastung proportional zu diskreten Dichten/Gewichten innerhalb des ANN durchgeführt werden. Ferner kann die Abtastung proportional zu den Aktivierungen innerhalb des ANN durchgeführt werden. Außerdem können Gewichte eines neuronalen Netzwerks normalisiert und die normalisierten Gewichte propagiert werden. Darüber hinaus kann eine Netzwerkpartitionierung durchgeführt werden, und können Gewichte ausgehend von einem vollständig verbundenen/faltenden neuronalen Netzwerk unterabgetastet werden.
  • Nachstehend werden weiter veranschaulichende Informationen bezüglich verschiedener optionaler Architekturen und Funktionen gegeben, mit welchen das vorgenannte Framework nach den Wünschen des Benutzers implementiert werden kann. Es sei ausdrücklich darauf hingewiesen, dass die folgenden Informationen zur Veranschaulichung aufgeführt und nicht als in irgendeiner Weise beschränkend auszulegen sind. Eines der folgenden Merkmale kann wahlweise mit oder ohne die Ausnahme anderer beschriebener Merkmale integriert werden.
  • Parallelverarbeitungsarchitektur
  • 2 veranschaulicht eine Parallelverarbeitungseinheit (PPU) 200 gemäß einem Ausführungsbeispiel. In einem Ausführungsbeispiel ist die PPU 200 ein Multithread-Prozessor, der auf einer oder mehreren integrierten Schaltungsvorrichtungen implementiert ist. Die PPU 200 ist eine latenzverbergende Architektur, die entwickelt wurde, um eine große Anzahl von Threads parallel zu verarbeiten. Ein Thread (d.h. ein Thread der Ausführung) ist eine Instanziierung eines Satzes von Anweisungen, die für die Ausführung durch die PPU 200 konfiguriert sind. In einem Ausführungsbeispiel ist die PPU 200 eine Grafikverarbeitungseinheit (GPU), die dazu konfiguriert ist, eine Grafik-Rendering-Pipeline zum Verarbeiten von dreidimensionalen (3D) Grafikdaten zu implementieren, um zweidimensionale (2D) Bilddaten zur Anzeige auf einer Anzeigevorrichtung, wie beispielsweise einer Flüssigkristallanzeigevorrichtung (LCD), zu erzeugen. In anderen Ausführungsbeispielen kann die PPU 200 zur Durchführung von Universalberechnungen verwendet werden. Obwohl hierin ein beispielhafter Parallelprozessor zu veranschaulichenden Zwecken bereitgestellt ist, ist dringend darauf hinzuweisen, dass ein solcher Prozessor nur zu veranschaulichenden Zwecken dargelegt ist und dass jeder Prozessor dazu verwendet werden kann, denselben zu ergänzen und/oder zu ersetzen.
  • Eine oder mehrere PPUs 200 können dazu konfiguriert sein, um Tausende von High Performance Computing (HPC), Rechenzentren und Anwendungen des maschinellen Lernens zu beschleunigen. Die PPU 200 kann dazu konfiguriert sein, zahlreiche Systeme und Anwendungen für Deep Learning , darunter Plattformen für autonome Fahrzeuge, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalytik, molekulare Simulationen, Medikamentenentdeckung, Krankheitsdiagnose, Wettervorhersage, Big Data-Analytik, Astronomie, Molekulardynamiksimulationen, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierungen und personalisierte Benutzerempfehlungen und dergleichen, zu beschleunigen.
  • Wie in 2 dargestellt ist, beinhaltet die PPU 200 eine Eingabe/Ausgabe- bzw. Input/Output (I/O)-Einheit 205, eine Frontend-Einheit 215, eine Scheduler-Einheit 220, eine Arbeitsverteilungseinheit 225, einen Verteiler bzw. Hub 230, eine Kreuz- bzw. Querschiene (Xbar) 270, einen oder mehrere Universalverarbeitungscluster bzw. General Processing Cluster (GPCs) 250 und eine oder mehrere Partitionseinheiten 280. Die PPU 200 kann über einen oder mehrere NVLink-Zwischenverbindungen bzw. Interconnects 210 mit einem Host-Prozessor oder anderen Peripheriegeräten verbunden sein. Die PPU 200 kann über eine Zwischenverbindung bzw. Interconnect 202 mit einem Host-Prozessor oder anderen Peripheriegeräten verbunden sein. Die PPU 200 kann auch mit einem lokalen Speicher, der eine Anzahl von Speichervorrichtungen 204 umfasst, verbunden sein. In einem Ausführungsbeispiel kann der lokale Speicher eine Anzahl von dynamischen DRAM-Vorrichtungen (Dynamic Random Access Memory) umfassen. Die DRAM-Vorrichtungen können als ein Speicher-Subsystem mit hoher Bandbreite (High Bandwidth Memory; HBM) konfiguriert sein, mit mehreren DRAM-Dies, die innerhalb jeder Vorrichtung gestapelt sind.
  • Die NVLink 210-Zwischenverbindung ermöglicht es Systemen, zu skalieren und eine oder mehrere PPUs 200 kombiniert mit einer oder mehreren CPUs zu beinhalten, unterstützt Cache-Kohärenz zwischen den PPUs 200 und CPUs und CPU-Mastering. Daten und/oder Befehle können von dem NVLink 210 über den Hub 230 zu/von anderen Einheiten der PPU 200, wie z.B. einer oder mehreren Kopiermaschinen, einem Video-Encoder, einem Video-Decoder, einer Energieverwaltungseinheit bzw. Power-Management-Einheit usw. (nicht explizit gezeigt), übertragen werden. Der NVLink 210 wird in Verbindung mit 4B näher beschrieben.
  • Die I/O-Einheit 205 ist dazu konfiguriert, Kommunikationen (d.h. Befehle, Daten usw.) von einem Hostprozessor (nicht gezeigt) über die Zwischenverbindung 202 zu senden und zu empfangen. Die I/O-Einheit 205 kann mit dem Host-Prozessor direkt über die Zwischenverbindung 202 oder über eine oder mehrere Zwischenvorrichtungen, wie beispielsweise eine Speicherbrücke, kommunizieren. In einem Ausführungsbeispiel kann die I/O-Einheit 205 mit einem oder mehreren anderen Prozessoren, wie beispielsweise einer oder mehreren der PPUs 200, über die Zwischenverbindung 202 kommunizieren. In einem Ausführungsbeispiel implementiert die I/O-Einheit 205 eine Peripheral Component Interconnect Express (PCIe)-Schnittstelle für die Kommunikation über einen PCIe-Bus, und ist die Zwischenverbindung 202 ein PCIe-Bus. In alternativen Ausführungsbeispielen kann die I/O-Einheit 205 andere Arten von bekannten Schnittstellen zum Kommunizieren mit externen Vorrichtungen implementieren.
  • Die I/O-Einheit 205 dekodiert Pakete, die über die Verbindung 202 empfangen werden. In einem Ausführungsbeispiel repräsentieren die Pakete Befehle, die dazu konfiguriert sind, die PPU 200 zu veranlassen, verschiedenartige Operationen durchzuführen. Die I/O-Einheit 205 überträgt die dekodierten Befehle an verschiedenartige andere Einheiten der PPU 200, wie dies in den Befehlen angegeben sein kann. Beispielsweise können einige Befehle an die Frontend-Einheit 215 übertragen werden. Andere Befehle können an den Hub 230 oder andere Einheiten der PPU 200, wie z.B. eine oder mehrere Kopiermaschinen, ein Video-Encoder, ein Video-Decoder, eine Power-Management-Einheit, usw. (nicht explizit gezeigt) übertragen werden. Mit anderen Worten ist die I/O-Einheit 205 dazu konfiguriert, Kommunikationen zwischen und unter den verschiedenartigen logischen Einheiten der PPU 200 zu routen.
  • In einem Ausführungsbeispiel kodiert ein von dem Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einem Puffer, der Arbeitsaufkommen bzw. Workloads für die PPU 200 zur Verarbeitung bereitstellt. Ein Arbeitsaufkommen kann mehrere Anweisungen und Daten umfassen, die durch diese Anweisungen zu verarbeiten sind. Der Puffer ist eine Region in einem Speicher, der sowohl von dem Host-Prozessor als auch von der PPU 200 aus zugänglich (d.h. lesend/schreibend) ist. Beispielsweise kann die I/O-Einheit 205 dazu konfiguriert sein, über Speicheranforderungen, die über die Zwischenverbindung 202 übertragen werden, auf den Puffer in einem mit der Zwischenverbindung 202 verbundenen Systemspeicher zuzugreifen. In einem Ausführungsbeispiel schreibt der Host-Prozessor den Befehlsstrom in den Puffer und sendet dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 200. Die Frontend-Einheit 215 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Frontend-Einheit 215 verwaltet den einen oder die mehreren Ströme bzw. Streams, wobei sie Befehle aus den Streams liest und Befehle an die verschiedenen Einheiten der PPU 200 weiterleitet.
  • Die Frontend-Einheit 215 ist mit einer Scheduler-Einheit 220 gekoppelt, die die verschiedenen GPCs 250 dazu konfiguriert, Aufgaben zu verarbeiten, die durch den einen oder die mehreren Stream(s) definiert sind. Die Scheduler-Einheit 220 ist dazu konfiguriert, Zustandsinformationen mit Bezug zu den verschiedenen Aufgaben, die von der Scheduler-Einheit 220 verwaltet werden, nachzuverfolgen. Der Zustand kann angeben, welchem GPC 250 eine Aufgabe zugeordnet ist, ob die Aufgabe aktiv oder inaktiv ist, eine der Aufgabe zugeordnete Prioritätsstufe usw. Die Scheduler-Einheit 220 verwaltet die Ausführung einer Vielzahl von Aufgaben auf dem einem oder den mehreren GPC(s) 250.
  • Die Scheduler-Einheit 220 ist mit einer Arbeitsverteilungseinheit 225 gekoppelt, die dazu konfiguriert ist, Aufgaben zur Ausführung auf den GPCs 250 zu verteilen. Die Arbeitsverteilungseinheit 225 kann eine Anzahl von geplanten Aufgaben nachverfolgen, die von der Scheduler-Einheit 220 empfangen wurden. In einem Ausführungsbeispiel verwaltet die Arbeitsverteilungseinheit 225 für jeden der GPCs 250 einen Pool offener bzw. ausstehender Aufgaben und einen Pool aktiver Aufgaben. Der Pool offener Aufgaben kann eine Anzahl von Slots (z.B. 32 Slots) umfassen, die Aufgaben enthalten, die von einem bestimmten GPC 250 zu bearbeitet sind. Der Pool aktiver Aufgaben kann eine Anzahl von Slots (z.B. 4 Slots) für Aufgaben umfassen, die von den GPCs 250 aktiv bearbeitet werden. Wenn ein GPC 250 die Ausführung einer Aufgabe beendet, wird diese Aufgabe aus dem Pool aktiver Aufgaben für den GPC 250 entfernt und wird eine der anderen Aufgaben aus dem Pool offener Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant. Wenn eine aktive Aufgabe auf dem GPC 250 im Leerlauf war, z. B. während des Wartens auf die Auflösung einer Datenabhängigkeit, kann die aktive Aufgabe aus dem GPC 250 entfernt und in den Pool ausstehender Aufgaben zurückgeführt werden, während eine andere Aufgabe im Pool offener Aufgaben ausgewählt und zur Ausführung auf dem GPC 250 eingeplant wird.
  • Die Arbeitsverteilungseinheit 225 kommuniziert mit dem einen oder den mehreren GPC(s) 250 über die XBar 270. Die XBar 270 ist ein Zwischenverbindungsnetzwerk, das viele der Einheiten der PPU 200 mit anderen Einheiten der PPU 200 koppelt. So kann beispielsweise die XBar 270 dazu konfiguriert sein, die Arbeitsverteilungseinheit 225 mit einem bestimmten GPC 250 zu koppeln. Obwohl dies nicht ausdrücklich gezeigt ist, können eine oder mehrere andere Einheiten der PPU 200 auch über den Hub 230 mit der XBar 270 verbunden sein.
  • Die Aufgaben werden von der Scheduler-Einheit 220 verwaltet und von der Arbeitsverteilungseinheit 225 an einen GPC 250 geschickt. Der GPC 250 ist dazu konfiguriert, die Aufgabe zu verarbeiten und Ergebnisse zu generieren. Die Ergebnisse können von anderen Aufgaben innerhalb des GPC 250 übernommen, über die XBar 270 an einen anderen GPC 250 weitergeleitet oder in dem Speicher 204 gespeichert werden. Die Ergebnisse können über die Partitionseinheiten 280, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 204 implementieren, in den Speicher 204 geschrieben werden. Die Ergebnisse können über den NVLink 210 an eine andere PPU 200 oder CPU übertragen werden. In einem Ausführungsbeispiel beinhaltet die PPU 200 eine Anzahl U von Partitionseinheiten 280, die gleich der Anzahl der separaten und unterschiedlichen Speichervorrichtungen 204 ist, die mit der PPU 200 gekoppelt sind. Eine Partitionseinheit 280 wird nachstehend in Verbindung mit 3B näher beschrieben.
  • In einem Ausführungsbeispiel führt ein Host-Prozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle (API) implementiert, die es einer oder mehreren auf dem Host-Prozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der PPU 200 zu planen. In einem Ausführungsbeispiel werden mehrere Rechenanwendungen gleichzeitig von der PPU 200 ausgeführt und stellt die PPU 200 Isolation, Quality of Service (QoS) und unabhängige Adressräume für die mehreren Rechenanwendungen bereit. Eine Anwendung kann Anweisungen (z.B. API-Aufrufe) erzeugen, die den Treiberkern veranlassen, eine oder mehrere Tasks bzw. Aufgaben zur Ausführung durch die PPU 200 zu erzeugen. Der Treiberkern gibt Aufgaben an einen oder mehrere Streams aus, die von der PPU 200 verarbeitet werden. Jede Aufgabe kann eine oder mehrere Gruppen von verwandten Threads umfassen, die hierin als Warp bezeichnet werden. In einem Ausführungsbeispiel umfasst ein Warp 32 verwandte Threads, die parallel ausgeführt werden können. Kooperierende Threads können sich auf eine Vielzahl von Threads beziehen, einschließlich Anweisungen zur Ausführung der Aufgabe, die Daten über einen gemeinsamen Speicher austauschen können. Threads und kooperierende Threads werden in Verbindung mit 4A näher beschrieben.
  • 3A veranschaulicht einen GPC 250 der PPU 200 von 2 gemäß einem Ausführungsbeispiel. Wie in 3A gezeigt ist, beinhaltet jeder GPC 250 eine Anzahl von Hardwareeinheiten für Verarbeitungsaufgaben. In einem Ausführungsbeispiel beinhaltet jeder GPC 250 einen Pipeline-Manager 310, eine Pre-Raster Operations Unit (PROP) 315, eine Rastermaschine bzw. Raster-Engine 325, eine Arbeitsverteilungs-Querschiene bzw. Work Distribution Crossbar (WDX) 380, eine Speicherverwaltungseinheit bzw. Memory Management Unit (MMU) 390 und einen oder mehrere Datenverarbeitungscluster bzw. Data Processing Cluster (DPCs) 320. Es versteht sich, dass der GPC 250 von 3A anstelle oder zusätzlich zu den in 3A gezeigten Einheiten weitere Hardwareeinheiten beinhalten kann.
  • In einem Ausführungsbeispiel wird der Betriebsablauf des GPC 250 durch den Pipeline-Manager 310 gesteuert. Der Pipeline-Manager 310 verwaltet die Konfiguration des einen oder der mehreren DPC(s) 320 zum Verarbeiten von Aufgaben, die dem GPC 250 zugeordnet sind. In einem Ausführungsbeispiel kann der Pipeline-Manager 310 zumindest einen des einen oder der mehreren DPC(s) 320 konfigurieren, um zumindest einen Teil einer Grafik-Rendering-Pipeline zu implementieren. Beispielsweise kann ein DPC 320 dazu konfiguriert sein, ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 340 auszuführen. Der Pipeline-Manager 310 kann darüber hinaus dazu konfiguriert sein, von der Arbeitsverteilungseinheit 225 empfangene Pakete an die geeigneten logischen Einheiten innerhalb des GPC 250 weiterzuleiten. Beispielsweise können einige Pakete an Hardwareeinheiten mit fester Funktion in dem PROP 315 und/oder der Raster-Engine 325 weitergeleitet werden, während andere Pakete an die DPCs 320 zur Verarbeitung durch die Stammfunktions-Engine 335 oder den SM 340 weitergeleitet werden können. In einem Ausführungsbeispiel kann der Pipeline-Manager 310 zumindest einen des einen oder der mehreren DPC(s) 320 dazu konfigurieren, ein neuronales Netzwerkmodell und/oder eine Rechen-Pipeline zu implementieren.
  • Die PROP-Einheit 315 ist dazu konfiguriert, die von der Raster-Engine 325 und den DPCs 320 erzeugten Daten an eine Raster Operations (ROP)-Einheit weiterzuleiten, die in Verbindung mit 3B näher beschrieben wird. Die PROP-Einheit 315 kann darüber hinaus dazu konfiguriert sein, Optimierungen zur Farbmischung durchzuführen, Pixeldaten zu organisieren, Adressenübersetzungen durchzuführen und dergleichen.
  • Die Raster-Engine 325 beinhaltet eine Anzahl von Hardwareeinheiten mit fester Funktion, die dazu konfiguriert sind, verschiedene Rasteroperationen durchzuführen. In einem Ausführungsbeispiel beinhaltet die Raster-Engine 325 eine Einricht- bzw. Setup-Engine, eine Grobrastermaschine bzw. Grobraster-Engine, eine Entfernungsmaschine bzw. Culling-Engine, eine Abschneidemaschine bzw. Clipping-Engine, eine Feinrastermaschine bzw. Feinraster-Engine und eine Kachel-Koaleszenzmaschine bzw. -Engine. Die Setup-Engine empfängt transformierte Knoten bzw. Vertices und erzeugt Ebenengleichungen, die der durch die Knoten definierten geometrischen Stammfunktion zugeordnet sind. Die Ebenengleichungen werden an den Grobraster-Engine übertragen, um Abdeckungsinformationen (z.B. eine x,y-Abdeckungsmaske für eine Kachel) für die Stammfunktion zu erzeugen. Die Leistung der Grobraster-Engine wird an die Culling-Engine übertragen, an der der Stammfunktion zugeordnete Fragmente, die einen z-Test nicht bestehen, entfernt werden, und an eine Clipping--Engine übertragen, an der Fragmente, die außerhalb eines Betrachtungskegelstumpfs bzw. Betrachtungsfrustums liegen, abgeschnitten werden. Die Fragmente, die das Clipping und Culling überleben, können an die Feinraster-Engine übergeben werden, um Attribute für die Pixelfragmente basierend auf den von der Setup-Engine erzeugten Ebenengleichungen zu erzeugen. Die Ausgabe der Raster-Engine 325 umfasst Fragmente, die beispielsweise von einem innerhalb eines DPC 320 implementierten Fragment-Shaders zu verarbeiten sind.
  • Jeder in dem GPC 250 enthaltene DPC 320 beinhaltet eine M-Pipe-Steuereinrichtung bzw. einen M-Pipe-Controller (MPC) 330, eine Stammfunktions-Engine 335 und einen oder mehrere SMs 340. Der MPC 330 steuert den Betriebsablauf des DPC 320 und leitet die von dem Pipeline-Manager 310 empfangenen Pakete an die geeigneten Einheiten des DPC 320 weiter. Beispielsweise können Pakete, die einem Knoten bzw. Vertex zugeordnet sind, an die Stammfunktions-Engine 335 weitergeleitet werden, welche dazu konfiguriert ist, die dem Knoten zugeordneten Knoten-Attribute aus dem Speicher 204 zu holen. Demgegenüber können Pakete, die einem Shader-Programm zugeordnet sind, an den SM 340 übertragen werden.
  • Der SM 340 umfasst einen programmierbaren Streaming-Prozessor, der dazu konfiguriert ist, Aufgaben zu verarbeiten, die durch eine Anzahl von Threads repräsentiert werden. Jeder SM 340 ist multi-threaded und dazu konfiguriert, eine Vielzahl von Threads (z.B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig auszuführen. In einem Ausführungsbeispiel implementiert der SM 340 eine SIMD (Single-Instruction, Multiple-Data)-Architektur, bei der jeder Thread in einer Gruppe von Threads (d.h. einem Warp) dazu konfiguriert ist, einen anderen Datensatz basierend auf demselben Befehlssatz zu verarbeiten. Alle Threads in der Gruppe von Threads führen dieselben Anweisungen aus. In einem weiteren Ausführungsbeispiel implementiert der SM 340 eine SIMT (Single-Instruction, Multiple Thread)-Architektur, bei der jeder Thread in einer Gruppe von Threads dazu konfiguriert ist, einen anderen Datensatz basierend auf demselben Befehlssatz zu verarbeiten, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. In einem Ausführungsbeispiel wird für jeden Warp ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand beibehalten, welches die Gleichzeitigkeit zwischen Warps und die serielle Ausführung innerhalb von Warps ermöglicht, wenn Threads innerhalb des Warps divergieren. In einem weiteren Ausführungsbeispiel werden für jeden einzelnen Thread ein Programmzähler, ein Aufrufstapel und ein Ausführungszustand beibehalten, welches eine gleiche Gleichzeitigkeit zwischen allen Threads, innerhalb und zwischen Warps, ermöglicht. Wenn der Ausführungszustand für jeden einzelnen Thread beibehalten wird, können Threads, die dieselben Anweisungen ausführen, für maximale Effizienz konvergiert und parallel ausgeführt werden. Der SM 340 wird nachstehend in Verbindung mit 4A näher beschrieben.
  • Die MMU 390 stellt eine Schnittstelle zwischen dem GPC 250 und der Partitionseinheit 280 bereit. Die MMU 390 kann eine Übersetzung virtueller Adressen in physikalische Adressen, Speicherschutz und Arbitrierung von Speicheranforderungen bereitstellen. In einem Ausführungsbeispiel stellt die MMU 390 einen oder mehrere Translation Lookaside Buffer (TLBs) bereit zum Durchführen einer Übersetzung von virtuellen Adressen in physikalische Adressen in dem Speicher 204.
  • 3B veranschaulicht eine Speicherpartitionseinheit 280 der PPU 200 von 2 gemäß einem Ausführungsbeispiel. Wie in 3B gezeigt ist, beinhaltet die Speicherpartitionseinheit 280 eine Raster Operations (ROP)-Einheit 350, einen Level-2 (L2)-Cache 360 und eine Speicherschnittstelle 370. Die Speicherschnittstelle 370 ist mit dem Speicher 204 gekoppelt. Die Speicherschnittstelle 370 kann 32, 64, 128, 1024-Bit-Datenbusse oder dergleichen für eine Hochgeschwindigkeits-Datenübertragung implementieren. In einem Ausführungsbeispiel integriert die PPU 200 U-Speicherschnittstellen 370, eine Speicherschnittstelle 370 pro Paar von Partitionseinheiten 280, wobei jedes Paar von Partitionseinheiten 280 mit einer entsprechenden Speichervorrichtung 204 verbunden ist. Beispielsweise kann die PPU 200 mit bis zu Y Speichervorrichtungen 204 verbunden sein, wie beispielsweise Speicherstapeln mit hoher Bandbreite oder synchronem dynamischem Grafik-Direktzugriffsspeicher mit doppelter Datenrate, Version 5, oder anderen Arten von persistentem Speicher.
  • In einem Ausführungsbeispiel implementiert die Speicherschnittstelle 370 eine HBM2-Speicherschnittstelle und entspricht Y der Hälfte von U. In einem Ausführungsbeispiel befinden sich die HBM2-Speicherstapel auf dem gleichen physikalischen Package wie die PPU 200, welches im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen zu erheblichen Strom- und Flächeneinsparungen führt. In einem Ausführungsbeispiel beinhaltet jeder HBM2-Stapel vier Speicherchips und ist Y gleich 4, wobei der HBM2-Stapel zwei 128-Bit-Kanäle pro Die für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit beinhaltet.
  • In einem Ausführungsbeispiel unterstützt der Speicher 204 Single-Error Correcting Double-Error Detecting (SECDED) Error Correction Code (ECC) zum Schutz von Daten. ECC bietet eine höhere Zuverlässigkeit für Rechenanwendungen, die empfindlich auf Datenverluste reagieren. Zuverlässigkeit ist besonders wichtig in großen Cluster-Computerumgebungen, in denen PPUs 200 sehr große Datensätze verarbeiten und/oder Anwendungen über einen längeren Zeitraum betreiben.
  • In einem Ausführungsbeispiel implementiert die PPU 200 eine mehrstufige Speicherhierarchie. In einem Ausführungsbeispiel unterstützt die Speicherpartitionseinheit 280 einen vereinheitlichten Speicher, um einen einzigen vereinheitlichten virtuellen Adressraum für CPU- und PPU 200-Speicher bereitzustellen, der einen Datenaustausch zwischen virtuellen Speichersystemen ermöglicht. In einem Ausführungsbeispiel wird die Häufigkeit der Zugriffe einer PPU 200 auf Speicher, der sich auf anderen Prozessoren befindet, nachverfolgt, um sicherzustellen, dass Speicherseiten in den physikalischen Speicher der PPU 200 verschoben werden, die häufiger auf die Seiten zugreift. In einem Ausführungsbeispiel unterstützt der NVLink 210 Adressübersetzungsdienste, die es der PPU 200 ermöglichen, direkt auf die Seitentabellen einer CPU zuzugreifen, und stellt vollen Zugriff auf den CPU-Speicher durch die 200 bereit.
  • In einem Ausführungsbeispiel übertragen Kopiermaschinen bzw. Kopier-Engines Daten zwischen mehreren PPUs 200 oder zwischen PPUs 200 und CPUs. Die Kopier-Engines können Seitenfehler für Adressen erzeugen, die nicht in die Seitentabellen abgebildet sind. Die Speicherpartitionseinheit 280 kann dann die Seitenfehler beheben und die Adressen in die Seitentabelle eintragen, woraufhin die Kopier-Engine die Übertragung durchführen kann. In einem herkömmlichen System ist der Speicher für mehrfache Kopier-Engine-Operationen zwischen mehreren Prozessoren gepinnt (d.h. nicht auslagerbar), welches den verfügbaren Speicher erheblich reduziert. Mit Hardware-Seitenfehlerbehebung können Adressen an die Kopier-Engines weitergegeben werden, ohne sich Sorgen machen zu müssen, ob die Speicherseiten resident sind, und ist der Kopiervorgang transparent.
  • Daten aus dem Speicher 204 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 280 abgerufen und in dem L2-Cache 360 gespeichert werden, welcher sich auf dem Chip befindet und von den verschiedenen GPCs 250 gemeinsam genutzt wird. Wie gezeigt ist, beinhaltet jede Speicherpartitionseinheit 280 einen Abschnitt des L2-Cache 360, der einer entsprechenden Speichervorrichtung 204 zugeordnet ist. Untergeordnete Caches können dann in verschiedenen Einheiten innerhalb der GPCs 250 implementiert sein. Beispielsweise kann jeder der SMs 340 einen Level 1 (L1)-Cache implementieren. Der L1-Cache ist ein privater Speicher, der für einen bestimmten SM 340 dediziert ist. Daten aus dem L2-Cache 360 können abgerufen und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der SMs 340 gespeichert werden. Der L2-Cache 360 ist mit der Speicherschnittstelle 370 und der XBar 270 gekoppelt.
  • Die ROP-Einheit 350 führt grafische Rasteroperationen mit Bezug zu Pixelfarbe durch, wie z.B. eine Farbkompression, ein Pixelblending und dergleichen. Die ROP-Einheit 350 implementiert darüber hinaus Tiefenprüfungen in Verbindung mit der Raster-Engine 325 durch, wobei sie eine Tiefe für einen Musterort empfängt, die einem Pixelfragment von dem Culling-Engine der Raster-Engine 325 zugeordnet ist. Die Tiefe wird gegen eine entsprechende Tiefe in einem Tiefenpuffer für einen dem Fragment zugeordneten Musterort getestet. Falls das Fragment den Tiefentest für den Musterort besteht, aktualisiert die ROP-Einheit 350 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 325. Es versteht sich, dass die Anzahl der Partitionseinheiten 280 von der Anzahl der GPCs 250 verschieden sein kann und daher jede ROP-Einheit 350 mit jedem der GPCs 250 gekoppelt sein kann. Die ROP-Einheit 350 nachverfolgt die von den verschiedenen GPCs 250 empfangenen Pakete und bestimmt, zu welchem GPC 250 ein von der ROP-Einheit 350 erzeugtes Ergebnis durch die Xbar 270 geleitet wird. Obwohl die ROP-Einheit 350 in 3B innerhalb der Speicherpartitionseinheit 280 enthalten ist, kann sich die ROP-Einheit 350 in einem anderen Ausführungsbeispiel außerhalb der Speicherpartitionseinheit 280 befinden. Beispielsweise kann sich die ROP-Einheit 350 in dem GPC 250 oder einer anderen Einheit befinden.
  • 4A veranschaulicht den Streaming-Multiprozessor 340 von 3A gemäß einem Ausführungsbeispiel. Wie in 4A gezeigt ist, beinhaltet der SM 340 einen Anweisungscache 405, eine oder mehrere Scheduler-Einheiten 410(K), eine Registerdatei 420, einen oder mehrere Verarbeitungskerne 450, eine oder mehrere Spezialfunktionseinheiten (SFUs) 452, eine oder mehrere Lade-/Speicher-Einheiten (LSUs) 454, ein Zwischenverbindungsnetzwerk 480, einen gemeinsam genutzten Speicher/L1-Cache 470.
  • Wie vorstehend beschrieben wurde, versendet die Arbeitsverteilungseinheit 225 Aufgaben zur Ausführung auf den GPCs 250 der PPU 200. Die Aufgaben sind einem bestimmten DPC 320 innerhalb eines GPC 250 zugeordnet und, wenn die Aufgabe einem Shader-Programm zugeordnet ist, kann die Aufgabe einem SM 340 zugeordnet sein. Die Scheduler-Einheit 410(K) empfängt die Aufgaben von der Arbeitsverteilungseinheit 225 und verwaltet die Anweisungsplanung für einen oder mehrere dem SM 340 zugeordnete Thread-Blöcke. Die Scheduler-Einheit 410(K) plant Thread-Blöcke zur Ausführung als Warps paralleler Threads ein, wobei jedem Thread-Block zumindest ein Warp zugeordnet ist. In einem Ausführungsbeispiel führt jeder Warp 32 Threads aus. Die Scheduler-Einheit 410(K) kann eine Vielzahl von verschiedenen Thread-Blöcken verwalten, wobei sie die Warps den verschiedenen Thread-Blöcken zuordnet und dann während jedes Taktzyklus Anweisungen von der Vielzahl von verschiedenen kooperativen Gruppen an die verschiedenen Funktionseinheiten (d.h. Kerne 450, SFUs 452 und LSUs 454) sendet.
  • Cooperative Groups ist ein Programmiermodell zum Organisieren von Gruppen kommunizierenden Threads, das es Entwicklern erlaubt, die Granularität auszudrücken, mit welcher Threads kommunizieren, welches den Ausdruck reichhaltigerer, effizienterer paralleler Zerlegungen ermöglicht. Kooperative Start-APIs unterstützen eine Synchronisation zwischen Thread-Blöcken zur Ausführung paralleler Algorithmen. Herkömmliche Programmiermodelle bieten ein einziges, einfaches Konstrukt zur Synchronisation kooperierender Threads: eine Barriere über alle Threads eines Thread-Blocks (d.h. die syncthreads() Funktion). Programmierer möchten jedoch oft Gruppen von Threads definieren, die kleiner als die Granularität von Thread-Blöcken sind, und innerhalb der definierten Gruppen synchronisieren, um mehr Leistung, Designflexibilität und Softwarewiederverwendung in Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen.
  • Cooperative Groups ermöglichen es Programmierern, Gruppen von Threads explizit bei Subblock- (d.h. so klein wie ein einzelner Thread) und Multiblock-Granularitäten zu definieren und kollektive Operationen wie beispielsweise eine Synchronisation auf den Threads in einer kooperativen Gruppe durchzuführen. Das Programmiermodell unterstützt eine saubere Komposition über Softwaregrenzen hinweg, so dass Bibliotheken und Hilfsfunktionen sicher innerhalb ihres lokalen Kontexts synchronisieren können, ohne Annahmen über Konvergenz treffen zu müssen. Stammfunktionen kooperativer Gruppen ermöglichen neue Muster kooperativer Parallelität, einschließlich einer Produzenten-Verbraucher-Parallelität, einer opportunistischen Parallelität und einer globalen Synchronisation über ein gesamtes Netz von Thread-Blöcken hinweg.
  • Eine Sende-Einheit 415 ist dazu konfiguriert, Anweisungen an eine oder mehrere der Funktionseinheiten zu senden. In dem Ausführungsbeispiel beinhaltet die Scheduler-Einheit 410(K) zwei Sende-Einheiten 415, die es ermöglichen, während jedes Taktzyklus zwei verschiedene Anweisungen aus demselben Warp zu versenden. In alternativen Ausführungsbeispielen kann jede Scheduler-Einheit 410(K) eine einzelne Sende-Einheit 415 oder zusätzliche Sende-Einheiten 415 beinhalten.
  • Jeder SM 340 beinhaltet eine Registerdatei 420, die einen Satz von Registern für die Funktionseinheiten des SM 340 bereitstellt. In einem Ausführungsbeispiel ist die Registerdatei 420 zwischen jeder der Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein dedizierter Abschnitt der Registerdatei 420 zugeordnet ist. In einem anderen Ausführungsbeispiel ist die Registerdatei 420 zwischen den verschiedenen Warps aufgeteilt, die von der SM 340 ausgeführt werden. Die Registerdatei 420 stellt einen Zwischenspeicher für Operanden, die mit den Datenpfaden der Funktionseinheiten verbunden sind, bereit.
  • Jeder SM 340 umfasst L Verarbeitungskerne 450. In einem Ausführungsbeispiel beinhaltet die SM 340 eine große Anzahl (z.B. 128, usw.) von verschiedenen Verarbeitungskernen 450. Jeder Kern 450 kann eine vollpipelinierte, einfachgenaue, doppeltgenaue und/oder gemischtgenaue Verarbeitungseinheit beinhalten, die eine Gleitkommaarithmetik-Logikeinheit und eine Ganzzahlarithmetik-Logikeinheit beinhaltet. In einem Ausführungsbeispiel implementieren die Gleitkommaarithmetik-Logikeinheiten den Standard IEEE 754-2008 für Gleitkommaarithmetik. In einem Ausführungsbeispiel beinhalten die Kerne 450 64 einfachgenaue (32-Bit) Gleitkomma-Kerne, 64 Ganzzahlkerne, 32 doppeltgenaue (64-Bit) Gleitkomma-Kerne und 8 Tensorkerne.
  • Tensorkerne, die dazu konfiguriert sind, Matrixoperationen durchzuführen, und, in einem Ausführungsbeispiel, ein oder mehrere Tensorkerne sind in den Kernen 450 enthalten. Insbesondere sind die Tensorkerne dazu konfiguriert, tief lernende Matrixarithmetik durchzuführen, wie z.B. Faltungsoperationen für das Training und die Inferenzierung neuronaler Netzwerke. In einem Ausführungsbeispiel arbeitet jeder Tensorkern auf einer 4x4-Matrix und führt eine Matrixmultiplikations- und Akkumulationsoperation D=AxB+C durch, worin A, B, C und D 4x4-Matrizen sind.
  • In einem Ausführungsbeispiel sind die Matrix-Multiplikationseingänge A und B 16-Bit Fließkomma-Matrizen, während die Akkumulationsmatrizen C und D 16-Bit Fließkomma- oder 32-Bit Fließkomma-Matrizen sein können. Tensorkerne arbeiten mit 16-Bit Gleitkomma-Eingangsdaten mit 32-Bit Gleitkommaakkumulation. Die 16-Bit-Fließkomma-Multiplikation erfordert 64 Operationen und resultiert in einem hochgenauen Produkt, das dann unter Verwendung der 32-Bit-Fließkommaaddition mit den anderen Zwischenprodukten für eine 4x4x4x4-Matrix-Multiplikation akkumuliert wird. In der Praxis werden Tensorkerne verwendet, um viel größere zweidimensionale oder höher dimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. Eine API, wie beispielsweise die CUDA 9 C++ API, stellt spezielle Matrixlasten, Matrixmultiplikationen und -akkumulationen sowie Matrixspeicheroperationen zur Verfügung, um Tensor-Kerne aus einem CUDA-C++-Programm heraus effizient zu nutzen. Auf der CUDA-Ebene geht das Warp-Level-Interface von Matrizen der Größe 16x16 aus, die alle 32 Threads des Warps umfassen.
  • Jeder SM 340 umfasst darüber hinaus M SFUs 452, die spezielle Funktionen durchführen (z.B. Attributbewertung, reziproke Quadratwurzel und dergleichen). In einem Ausführungsbeispiel können die SFUs 452 eine Baumdurchlaufeinheit beinhalten, die dazu konfiguriert ist, eine hierarchische Baumdatenstruktur zu durchlaufen. In einem Ausführungsbeispiel können die SFUs 452 eine Textureinheit beinhalten, die dazu konfiguriert ist, Textur-Map-Filteroperationen durchzuführen. In einem Ausführungsbeispiel sind die Textureinheiten dazu konfiguriert, Textur-Maps (z.B. eine 2D-Anordnung von Texturen) aus dem Speicher 204 zu laden und die Textur-Maps abzutasten, um abgetastete Texturwerte für die Verwendung in Shader-Programmen zu erzeugen, die von dem SM 340 ausgeführt werden. In einem Ausführungsbeispiel werden die Textur-Maps in dem gemeinsam genutzten Speicher/L1-Cache 370 gespeichert. Die Textureinheiten implementieren Texturoperationen wie z.B. Filteroperationen mit Hilfe von Mip-Maps (d.h. Textur-Maps unterschiedlichen Detaillierungsgrads). In einem Ausführungsbeispiel beinhaltet jeder SM 340 zwei Textureinheiten.
  • Jeder SM 340 umfasst auch N LSUs 454, die Lade- und Speicher-Operationen zwischen dem gemeinsam genutzten Speicher/L1-Cache 470 und der Registerdatei 420 implementieren. Jeder SM 340 beinhaltet ein Zwischenverbindungsnetzwerk 480, das jede der Funktionseinheiten mit der Registerdatei 420 und die LSU 454 mit der Registerdatei 420, dem gemeinsam genutzten Speicher/ L1-Cache 470 verbindet. In einem Ausführungsbeispiel ist das Zwischenverbindungsnetzwerk 480 eine Kreuzschiene, die dazu konfiguriert sein kann, eine beliebige der Funktionseinheiten mit einem beliebigen der Register in der Registerdatei 420 zu verbinden und die LSUs 454 mit der Registerdatei und den Speicherplätzen in dem gemeinsam genutzten Speicher bzw. Shared Memory/L1-Cache 470 zu verbinden.
  • Der gemeinsam genutzte Speicher/L1 Cache 470 ist eine Anordnung von On-Chip-Speicher, der eine Datenspeicherung und Kommunikation zwischen dem SM 340 und der Stammfunktions-Engine 335 sowie zwischen den Threads in dem SM 340 ermöglicht. In einem Ausführungsbeispiel umfasst der gemeinsam genutzte Speicher/L1-Cache 470 128KB Speicherkapazität und befindet sich in dem Pfad von dem SM 340 zu der Partitionseinheit 280. Der gemeinsam genutzte Speicher/L1-Cache 470 kann dazu verwendet werden, Lese- und Schreibvorgänge zwischenzuspeichern. Einer oder mehrere des gemeinsam genutzten Speichers/L1-Caches 470, des L2-Caches 360 und des Speichers 204 sind Backup-Speicher.
  • Ein Kombinieren von Daten-Cache und Shared-Memory-Funktionalität in einem einzigen Speicherblock bietet die beste Gesamtleistung für beide Arten von Speicherzugriffen. Die Kapazität ist als ein Cache von Programmen nutzbar, die keinen gemeinsam genutzten Speicher verwenden. Wenn beispielsweise der gemeinsam genutzte Speicher dazu konfiguriert ist, die Hälfte der Kapazität zu verwenden, können Textur- und Lade-/Speicher-Operationen die verbleibende Kapazität nutzen. Die Integration in den gemeinsam genutzten Speicher/L1-Cache 470 ermöglicht es dem gemeinsam genutzten Speicher/L1-Cache 470, als eine Hochdurchsatzleitung zum Streamen von Daten zu arbeiten und gleichzeitig einen Zugriff auf häufig wiederverwendete Daten mit hoher Bandbreite und geringer Latenz zu ermöglichen.
  • Bei einer Konfiguration für universelle parallele Berechnungen kann im Vergleich zu einer Grafikverarbeitung eine einfachere Konfiguration verwendet werden. Spezieller werden die in 2 gezeigten Grafikverarbeitungseinheiten mit fester Funktion umgangen, wodurch ein wesentlich einfacheres Programmiermodell entsteht. In der Konfiguration für allgemeine parallele Berechnungen weist die Arbeitsverteilungseinheit 225 Thread-Blöcke direkt den DPCs 320 zu und verteilt sie. Die Threads in einem Block führen das gleiche Programm aus, wobei sie eine eindeutige Thread-ID in der Berechnung verwenden, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 340 dazu verwendet wird, das Programm auszuführen und Berechnungen durchzuführen, der gemeinsam genutzte Speicher/L1-Cache 470 dazu verwendet wird, um zwischen Threads zu kommunizieren, und die LSU 454 dazu verwendet wird, den globalen Speicher über den gemeinsam genutzten Speicher/L1-Cache 470 und die Speicherpartitionseinheit 280 zu lesen und zu schreiben. Wenn der SM 340 für allgemeine parallele Berechnungen konfiguriert ist, kann er auch Befehle schreiben, mit denen die Scheduler-Einheit 220 neue Arbeiten an den DPCs 320 starten kann.
  • Die PPU 200 kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z.B. einem drahtlosen, tragbaren Gerät), einem Personal Digital Assistant (PDA), einer Digitalkamera, einem Fahrzeug, einem Kopfbildschirm, einer tragbaren elektronischen Vorrichtung und dergleichen enthalten sein. In einem Ausführungsbeispiel ist die PPU 200 auf einem einzelnen Halbleitersubstrat ausgeführt. In einem weiteren Ausführungsbeispiel ist die PPU 200 zusammen mit einer oder mehreren anderen Vorrichtungen, wie zusätzlichen PPUs 200, dem Speicher 204, einer CPU mit reduziertem Befehlssatz (RISC), einer Speicherverwaltungseinheit (MMU), einem Digital-Analog-Wandler (DAC) und dergleichen, in einem System auf einem Chip (SoC) enthalten.
  • In einem Ausführungsbeispiel kann die PPU 200 auf einer Grafikkarte enthalten sein, die eine oder mehrere Speichervorrichtungen 204 beinhaltet. Die Grafikkarte kann dazu konfiguriert sein, mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden zu sein. In einem nochmals weiteren Ausführungsbeispiel kann die PPU 200 eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein paralleler Prozessor sein, der in dem Chipsatz des Motherboards enthalten ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Branchen eingesetzt, da Entwickler mehr Parallelität in Anwendungen wie beispielsweise Computing in künstlicher Intelligenz bereitstellen und nutzen. Leistungsstarke GPUbeschleunigte Systeme mit zehn bis vielen Tausenden von Rechenknoten werden in Datenzentren, Forschungseinrichtungen und Supercomputern eingesetzt, um immer größere Probleme zu lösen. Mit zunehmender Anzahl von Verarbeitungsvorrichtungen innerhalb der Hochleistungssysteme müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 4B ist ein konzeptionelles Diagramm eines Verarbeitungssystems 400, das unter Verwendung der PPU 200 von 2 implementiert ist, gemäß einem Ausführungsbeispiel. Das beispielhafte System 465 kann dazu konfiguriert sein, das in 1 gezeigte Verfahren 100 zu implementieren. Das Verarbeitungssystem 400 beinhaltet eine CPU 430, einen Switch 410 und jeweils mehrere PPUs 200 und entsprechende Speicher 204. Der NVLink 210 bietet Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 200. Obwohl eine bestimmte Anzahl von NVLink-Verbindungen 210 und Zwischenverbindungen 202 in 4B dargestellt ist, kann die Anzahl der Verbindungen zu jeder PPU 200 und der CPU 430 variieren. Der Switch 410 verbindet zwischen der Zwischenverbindung 202 und der CPU 430. Die PPUs 200, Speicher 204 und NVLinks 210 können sich auf einer einzigen Halbleiterplattform befinden, um ein Parallelverarbeitungsmodul 425 zu bilden. In einem Ausführungsbeispiel unterstützt der Switch 410 zwei oder mehr Protokolle, um eine Schnittstelle zwischen verschiedenartigen unterschiedlichen Verbindungen und/oder Verknüpfungen auszubilden.
  • In einem weiteren Ausführungsbeispiel (nicht gezeigt) stellt der NVLink 210 eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 200 und der CPU 430 her, und bildet der Switch 410 eine Schnittstelle zwischen der Zwischenverbindung 202 und jeder der PPUs 200. Die PPUs 200, die Speicher 204 und die Zwischenverbindung 202 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 425 zu bilden. In einem nochmals weiteren Ausführungsbeispiel (nicht gezeigt) stellt die Verbindung 202 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 200 und der CPU 430 bereit, und bildet der Switch 410 unter Verwendung des NVLinks 210 eine Schnittstelle zwischen jeder der PPUs 200, um eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 200 bereitzustellen. In einem weiteren Ausführungsbeispiel (nicht gezeigt) stellt der NVLink 210 eine oder mehrere Hochgeschwindigkeitskommunikationsverbindungen zwischen den PPUs 200 und der CPU 430 über den Switch 410 bereit. In einem nochmals weiteren Ausführungsbeispiel (nicht gezeigt) stellt die Zwischenverbindung 202 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 200 direkt zur Verfügung. Eine oder mehrere der NVLink 210-Hochgeschwindigkeitskommunikationsverbindungen können als physische NVLink-Verbindung oder als On-Chip- oder On-Die-Verbindung unter Verwendung desselben Protokolls wie das des NVLinks 210 implementiert sein.
  • Im Kontext der vorliegenden Beschreibung kann sich eine einzelne Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung beziehen, die auf einem Chip oder einem Die hergestellt ist. Es wird angemerkt, dass sich der Begriff einer einzelnen Halbleiterplattform auch auf Multichip-Module mit erhöhter Konnektivität, welche einen On-Chip-Betriebsablauf simulieren und wesentliche Verbesserungen gegenüber einer herkömmlichen Busimplementierung vornehmen, beziehen kann. Natürlich können die verschiedenen Schaltungsanordnungen oder Vorrichtungen bzw. Geräte auch einzeln oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Benutzers angeordnet sein. Alternativ kann das Parallelverarbeitungsmodul 425 als ein Leiterplattensubstrat implementiert sein und kann jede(r) der PPUs 200 und/oder Speicher 204 als gepackte Vorrichtung ausgeführt sein. In einem Ausführungsbeispiel liegen die CPU 430, der Switch 410 und das Parallelverarbeitungsmodul 425 auf einer einzigen Halbleiterplattform.
  • In einem Ausführungsbeispiel beträgt die Signalisierungsrate jedes NVLinks 210 20 bis 25 Gigabit/Sekunde und beinhaltet jede PPU 200 sechs NVLink 210-Schnittstellen (wie in 4B gezeigt ist, sind fünf NVLink 210-Schnittstellen für jede PPU 200 enthalten). Jeder NVLink 210 bietet eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jede Richtung, so dass sechs Links 300 Gigabyte/Sekunde bereitstellen. Die NVLinks 210 können ausschließlich für die PPU-zu-PPU-Kommunikation, wie in 4B gezeigt ist, oder für irgendeine eine Kombination aus PPU-zu-PPU und PPU-zu-CPU-Kommunikation verwendet werden, wenn die CPU 430 auch eine oder mehrere NVLink 210-Schnittstellen beinhaltet.
  • In einem Ausführungsbeispiel ermöglicht das NVLink 210 den direkten Lade-/ Speicher-/Kern-Zugriff von der CPU 430 auf den Speicher 204 jeder PPU 200. In einem Ausführungsbeispiel unterstützt der NVLink 210 Kohärenzoperationen, so dass aus den Speichern 204 gelesene Daten in der Cache-Hierarchie der CPU 430 gespeichert werden können, wodurch die Cache-Zugriffslatenz für die CPU 430 reduziert wird. In einem Ausführungsbeispiel beinhaltet der NVLink 210 die Unterstützung von Address Translation Services (ATS), so dass die PPU 200 direkt auf Seitentabellen innerhalb der CPU 430 zugreifen kann. Einer oder mehrere der NVLinks 210 können auch für den Betrieb in einem Low-Power-Modus konfiguriert sein.
  • 4C veranschaulicht ein beispielhaftes System 465, in welchem die verschiedenartige Architektur und/oder Funktionalität der verschiedenartigen vorangehenden Ausführungsbeispiele implementiert sein kann. Das beispielhafte System 465 kann dazu konfiguriert sein, das in 1 gezeigte Verfahren 100 zu implementieren.
  • Wie gezeigt ist, wird ein System 465 bereitgestellt, das zumindest eine zentrale Verarbeitungseinheit 430 beinhaltet, die mit einem Kommunikationsbus 475 verbunden ist. Der Kommunikationsbus 475 kann unter Verwendung jedes geeigneten Protokolls, wie z.B. PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport oder einem beliebigen anderen Bus- oder Punkt-zu-Punkt Kommunikationsprotokoll implementiert sein. Das System 465 beinhaltet darüber hinaus einen Hauptspeicher 440. Steuerlogik (Software) und Daten werden in dem Hauptspeicher 440 gespeichert, welcher als Direktzugriffsspeicher (RAM) ausgeführt sein kann.
  • Das System 465 beinhaltet darüber hinaus Eingabevorrichtungen 460, das Parallelverarbeitungssystem 425 und Anzeigevorrichtungen 445, d.h. eine herkömmliche CRT (Kathodenstrahlröhre), ein LCD (Flüssigkristallanzeige), ein LED (Leuchtdiode), eine Plasmaanzeige oder dergleichen. Benutzereingaben können von den Eingabevorrichtungen 460, z.B. einer Tastatur, einer Maus, einem Touchpad, einem Mikrofon und dergleichen, empfangen werden. Jedes der vorgenannten Module und/oder jede der vorgenannten Vorrichtungen kann sich sogar auf einer einzigen Halbleiterplattform befinden, um das System 465 zu bilden. Alternativ können die verschiedenen Module auch einzeln oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Anwenders angeordnet sein.
  • Ferner kann das System 465 über eine Netzwerkschnittstelle 435 zu Kommunikationszwecken mit einem Netzwerk (z.B. einem Telekommunikationsnetzwerk, einem Local Area Network (LAN), einem drahtlosen Netzwerk, einem Wide Area Network (WAN) wie dem Internet, einem Peer-to-Peer-Netzwerk, einem Kabelnetzwerk oder dergleichen) gekoppelt sein.
  • Das System 465 kann darüber hinaus einen sekundären Speicher (nicht gezeigt) beinhalten. Der sekundäre Speicher beinhaltet beispielsweise ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein Digital Versatile Disk (DVD)-Laufwerk, eine Aufnahmevorrichtung, einen Flashspeicher für den universellen seriellen Bus (USB) repräsentiert. Das Wechselspeicherlaufwerk liest und/oder schreibt in gut bekannter Weise von einer/auf eine Wechselspeichereinheit.
  • Computerprogramme oder Logikalgorithmen der Computersteuerung können in dem Hauptspeicher 440 und/oder in dem sekundären Speicher gespeichert sein. Solche Computerprogramme ermöglichen es dem System 465, verschiedene Funktionen auszuführen, wenn sie ausgeführt werden. Der Speicher 440, der Speicher und/oder ein beliebiger andere Speicher sind mögliche Beispiele für computerlesbare Medien.
  • Die Architektur und/oder die Funktionalität der verschiedenen vorangehenden Figuren kann im Kontext eines universellen Computersystems, eines Schaltungsplatinensystems, eines Spielkonsolensystems, das für Unterhaltungszwecke dediziert ist, eines anwendungsspezifischen Systems und/oder eines beliebigen anderen gewünschten Systems implementiert sein. Das System 465 kann beispielsweise in Form eines Desktop-Computers, eines Laptops, eines Tablet-Computers, von Servern, von Supercomputern, eines Smartphones (z.B. eines drahtlosen, tragbaren Geräts), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, eines kopfmontierten Displays, einer tragbaren elektronischen Vorrichtung, einer mobilen Telefonvorrichtung, eines Fernsehers, einer Workstation, von Spielkonsolen, eines eingebetteten Systems und/oder einer beliebigen anderen Art von Logik ausgeführt sein.
  • Während vorstehend verschiedene Ausführungsbeispiele beschrieben wurden, versteht sich, dass diese nur beispielhaft und nicht beschränkend dargestellt wurden. Daher ist die Breite und der Schutzumfang eines bevorzugten Ausführungsbeispiels nicht durch eines der vorstehend beschriebenen beispielhaften Ausführungsbeispiele zu beschränken, sondern nur in Übereinstimmung mit den nachfolgenden Ansprüchen und deren Äquivalenten zu definieren.
  • Grafikverarbeitungs-Pipeline
  • In einem Ausführungsbeispiel umfasst die PPU 200 eine Grafikverarbeitungseinheit (GPU). Die PPU 200 ist dazu konfiguriert, Befehle zu empfangen, die Shader-Programme zur Verarbeitung von Bilddaten spezifizieren. Grafikdaten können als ein Satz von Stammfunktionen wie beispielsweise Punkte, Linien, Dreiecke, Vierecke, Dreiecksstreifen und dergleichen definiert sein. Typischerweise beinhaltet eine Stammfunktion Daten, die eine Anzahl von Knoten bzw. Eckpunkten bzw. Vertices für die Stammfunktion (z.B. in einem Modell-Raum-Koordinatensystem) spezifizieren, sowie Attribute, die jedem Vertex der Stammfunktion zugeordnet sind. Die PPU 200 kann dazu konfiguriert sein, die Grafik-Stammfunktion zu verarbeiten, um einen Einzelbild- bzw. Frame-Puffer (d.h. Pixeldaten für jedes der Pixel des Displays) zu erzeugen.
  • Eine Anwendung schreibt Modelldaten für eine Szene (d.h. eine Sammlung von Vertices und Attributen) in einen Speicher, wie beispielsweise einen Systemspeicher oder Speicher 204. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung führt dann einen API-Aufruf an den Treiberkern durch, der die Modelldaten zur Wiedergabe und Anzeige anfordert. Der Treiberkern liest die Modelldaten und schreibt Befehle in den einen oder die mehreren Streams, um Operationen zur Verarbeitung der Modelldaten durchzuführen. Die Befehle können verschiedene Shader-Programme referenzieren, die auf den SMs 340 der PPU 200 zu implementieren sind, einschließlich eines oder mehrere eines Vertex-Shaders, eines Hüllen-Shaders, eines Domain-Shaders, eines Geometrie-Shaders und eines Pixel-Shaders. Beispielsweise kann einer oder mehrere der SMs 340 dazu konfiguriert sein, ein Vertex-Shader-Programm auszuführen, das eine Anzahl von durch die Modelldaten definierten Vertices verarbeitet. In einem Ausführungsbeispiel können die verschiedenen SMs 340 dazu konfiguriert sein, verschiedene Shader-Programme gleichzeitig auszuführen. Beispielsweise kann eine erste Teilmenge von SMs 340 dazu konfiguriert sein, ein Vertex-Shader-Programm auszuführen, während eine zweite Teilmenge von SMs 340 dazu konfiguriert sein kann, ein Pixel-Shader-Programm auszuführen. Die erste Teilmenge von SMs 340 verarbeitet Vertex-Daten, um verarbeitete Vertex-Daten zu erzeugen, und schreibt die verarbeiteten Vertex-Daten in den L2-Cache 360 und/oder den Speicher 204. Nachdem die verarbeiteten Vertex-Daten gerastert sind (d.h. von dreidimensionalen Daten in zweidimensionale Daten im Bildschirmraum umgewandelt wurden), um Fragmentdaten zu erzeugen, führt die zweite Teilmenge von SMs 340 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, welche dann mit anderen verarbeiteten Fragmentdaten vermischt und in den Frame-Puffer im Speicher 204 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden und dabei verschiedene Daten aus derselben Szene in einer Pipeline verarbeiten, bis alle Modelldaten für die Szene in den Frame-Puffer gerendert sind. Anschließend wird der Inhalt des Frame-Puffers an eine Anzeigesteuervorrichtung zur Anzeige auf einer Anzeigevorrichtung übertragen.
  • 5 ist ein konzeptionelles Diagramm einer Grafikverarbeitungs-Pipeline 500, die durch die PPU 200 von 2 gemäß einem Ausführungsbeispiel implementiert wird. Die Grafikverarbeitungs-Pipeline 500 ist ein abstraktes Ablaufdiagramm der Verarbeitungsschritte, die zur Erzeugung von computer-generierten 2D-Bildern aus 3D-Geometriedaten implementiert sind. Wie gut bekannt ist, können Pipeline-Architekturen Operationen bzw. Betriebsabläufe mit langen Latenzzeiten durch Aufspalten der Operation in eine Vielzahl von Stufen effizienter durchführen, indem sie den Betriebsablauf in eine Vielzahl von Stufen aufteilen, wobei der Ausgang jeder Stufe mit dem Eingang der nächsten nachfolgenden Stufe gekoppelt ist. Somit empfängt die Grafikverarbeitungs-Pipeline 500 Eingangsdaten 501, die von einer Stufe zur nächsten Stufe der Grafikverarbeitungs-Pipeline 500 übertragen werden, um Ausgangsdaten 502 zu erzeugen. In einem Ausführungsbeispiel kann die Grafikverarbeitungs-Pipeline 500 eine durch die OpenGL®-API definierte Grafikverarbeitungs-Pipeline repräsentieren. Optional kann die Grafikverarbeitungspipeline 500 im Kontext der Funktionalität und der Architektur der vorangehenden Figuren und/oder (einer) beliebigen nachfolgenden Figur(en) implementiert sein.
  • Wie in 5 gezeigt ist, umfasst die Grafikverarbeitungs-Pipeline 500 eine Pipeline-Architektur, die mehrere Stufen beinhaltet. Die Stufen beinhalten, sind aber nicht beschränkt auf, eine Daten-Zusammensetzungsstufe 510, eine Vertex-Shading-Stufe 520, eine Stammfunktion-Zusammensetzungsstufe 530, eine Geometrie-Shading-Stufe 540, eine Ansichtsbereich-Skalen-, Cull- und Clip- (VSCC)-Stufe 550, eine Rasterungsstufe 560, eine Fragment-Shading-Stufe 570 und eine Rasteroperationsstufe 580. In einem Ausführungsbeispiel umfassen die Eingangsdaten 501 Befehle, die die Verarbeitungseinheiten dazu konfigurieren, die Stufen der Grafikverarbeitungs-Pipeline 500 und geometrischer Stammfunktionen (z.B. Punkte, Linien, Dreiecke, Vierecke, Dreiecksstreifen oder Fächer, usw.) zu implementieren, die von den Stufen zu verarbeiten sind. Die Ausgangsdaten 502 können Pixeldaten (d.h. Farbdaten) umfassen, die in einen Frame-Puffer oder eine andere Art von Oberflächendatenstruktur in einem Speicher kopiert werden.
  • Die Daten-Zusammensetzungsstufe 510 empfängt die Eingangsdaten 501, die Vertex-Daten für Oberflächen hoher Ordnung, Stammfunktion oder dergleichen spezifizieren. Die Daten-Zusammensetzungsstufe 510 sammelt die Vertex-Daten in einem Zwischenspeicher oder einer Warteschlange, beispielsweise durch Empfangen eines Befehls von dem Host-Prozessor, der einen Zeiger auf einen Puffer im Speicher enthält, und Lesen der Vertex-Daten aus dem Puffer. Die Vertex-Daten werden dann zur Verarbeitung an die Vertex-Shading-Stufe 520 übertragen.
  • Die Vertex-Shading-Stufe 520 verarbeitet Vertex-Daten, indem sie einen Satz von Operationen (z.B. einen Vertex-Shader oder ein Programm) einmal für jeden der Vertices durchführt. Vertices können z.B. als ein 4-Koordinaten-Vektor (d.h. <x, y, z, w>) angegeben sein, der einem oder mehreren Vertex-Attributen (z.B. Farbe, Texturkoordinaten, Oberflächennormale, usw.) zugeordnet ist. Die Vertex-Shading-Stufe 520 kann einzelne Vertex-Attribute wie Position, Farbe, Texturkoordinaten und dergleichen manipulieren. Mit anderen Worten führt die Vertex-Shading-Stufe 520 Operationen an den Vertex-Koordinaten oder anderen Vertex-Attributen durch, die einem Vertex zugeordnet sind. Solche Operationen beinhalten üblicherweise Beleuchtungsoperationen (d.h. ein Modifizieren von Farbattributen für einen Vertex) und Transformationsoperationen (d.h. ein Modifizieren des Koordinatenraums für einen Vertex). Beispielsweise können Vertices unter Verwendung von Koordinaten in einem Objektkoordinatenraum spezifiziert sein, welche durch Multiplizieren der Koordinaten mit einer Matrix, die die Koordinaten aus dem Objektkoordinatenraum in einen Welt-Raum oder einen für eine Vorrichtung normalisierten Koordinatenraum (normalized-device-coordinate; NCD) übersetzt, transformiert werden. Die Vertex-Shading-Stufe 520 erzeugt transformierte Vertex-Daten, die an die Stammfunktion-Zusammensetzungsstufe 530 übertragen werden.
  • Die Stammfunktion-Zusammensetzungsstufe 530 sammelt die von der Vertex-Shading-Stufe 520 ausgegebenen Vertices und gruppiert die Vertices zu geometrischen Stammfunktionen zur Verarbeitung durch die Geometrie-Shading-Stufe 540. Beispielsweise kann die Stammfunktion-Zusammensetzungsstufe 530 dazu konfiguriert sein, jeweils drei aufeinanderfolgende Vertices als geometrische Stammfunktion (d.h. ein Dreieck) zur Übertragung an die Geometrie-Shading-Stufe 540 zu gruppieren. In einigen Ausführungsbeispielen können bestimmte Vertices für aufeinanderfolgende geometrische Stammfunktionen wiederverwendet werden (z.B. können zwei aufeinanderfolgende Dreiecke in einem Dreieckstreifen zwei Vertices teilen). Die Stammfunktion-Zusammensetzungsstufe 530 überträgt geometrische Stammfunktionen (d.h. eine Sammlung von zugehörigen Vertices) an die Geometrie-Shading-Stufe 540.
  • Die Geometrie-Shading-Stufe 540 verarbeitet geometrische Stammfunktion, indem sie eine Reihe von Operationen (d.h. einen Geometrie-Shader oder ein Programm) auf den geometrischen Stammfunktionen durchführt. Tessellierungsoperationen können aus jeder geometrischen Stammfunktion eine oder mehrere geometrische Stammfunktionen erzeugen. Mit anderen Worten kann die Geometrie-Shading-Stufe 540 jede geometrische Stammfunktion in ein feineres Netzwerk von zwei oder mehr geometrischen Stammfunktionen zur Verarbeitung durch den Rest der Grafikverarbeitungs-Pipeline 500 unterteilen. Die Geometrie-Shading-Stufe 540 überträgt geometrische Stammfunktionen an die Ansichtsbereich-SCC-Stufe 550.
  • In einem Ausführungsbeispiel kann die Grafikverarbeitungs-Pipeline 500 innerhalb eines Streaming-Multiprozessors arbeiten, und die Vertex-Shading-Stufe 520, die Stammfunktion-Zusammensetzungsstufe 530, die Geometrie-Shading-Stufe 540, die Fragment-Shading-Stufe 570 und/oder damit verbundene Hardware/Software können sequenziell Verarbeitungsoperationen durchführen. Sobald die sequentiellen Verarbeitungsoperationen abgeschlossen sind, kann in einem Ausführungsbeispiel die Ansichtsbereich-SCC-Stufe 550 die Daten nutzen. In einem Ausführungsbeispiel können Stammfunktionsdaten, die von einer oder mehreren Stufen in der Grafikverarbeitungs-Pipeline 500 verarbeitet werden, in einen Cache (z.B. den L1-Cache, den Vertex-Cache, usw.) geschrieben werden. In diesem Fall kann in einem Ausführungsbeispiel die Ansichtsbereich-SCC-Stufe 550 auf die Daten in dem Cache zugreifen. In einem Ausführungsbeispiel sind die Ansichtsbereich-SCC-Stufe 550 und die Rasterungsstufe 560 als Schaltungsanordnung mit fester Funktion implementiert.
  • Die Ansichtsbereich-SCC-Stufe 550 führt eine Ansichtsbereich-Skalierung, ein Culling und ein Clipping der geometrischen Stammfunktionen durch. Jede Oberfläche, auf die gerendert wird, ist einer abstrakten Kameraposition zugeordnet. Die Kameraposition repräsentiert eine Position eines Betrachters, der die Szene betrachtet, und definiert einen Betrachtungskegelstumpf, der die Objekte der Szene umschließt. Der Betrachtungskegelstumpf kann eine Betrachtungsebene, eine hintere Ebene und vier Clipping-Ebenen beinhalten. Jede geometrische Stammfunktion, die sich vollständig außerhalb des Betrachtungskegelstumpfs befindet, kann gecullt (d.h. verworfen) werden, weil die geometrische Stammfunktion nicht zu der endgültigen gerenderten Szene beitragen wird. Jede geometrische Stammfunktion, die sich teilweise innerhalb des Betrachtungskegelstumpfs und teilweise außerhalb des Betrachtungskegelstumpfs befindet, kann abgeschnitten werden (d.h. in eine neue geometrische Stammfunktion umgewandelt werden, die innerhalb des Betrachtungskegelstumpfs eingeschlossen ist). Darüber hinaus können geometrische Stammfunktion jeweils auf der Grundlage einer Tiefe des Betrachtungskegelstumpfs skaliert werden. Alle potenziell sichtbaren geometrischen Stammfunktionen werden dann an die Rasterungsstufe 560 übertragen.
  • Die Rasterungsstufe 560 wandelt die geometrischen 3D-Stammfunktionen in 2D-Fragmente (die z.B. zur Anzeige genutzt werden können, usw.) um. Die Rasterungsstufe 560 kann dazu konfiguriert sein, die Vertices der geometrischen Stammfunktionen zu nutzen, um einen Satz von Ebenengleichungen aufzustellen, aus welchen verschiedene Attribute interpoliert werden können. Die Rasterungsstufe 560 kann auch eine Abdeckungsmaske für eine Vielzahl von Pixeln berechnen, die angibt, ob eine oder mehrere Musterorte für den Pixel die geometrische Stammfunktion unterbrechen. In einem Ausführungsbeispiel kann darüber hinaus ein z-Test durchgeführt werden, um zu ermitteln, ob die geometrische Stammfunktion durch andere geometrische Stammfunktionen, die bereits gerastert wurden, verdeckt wird. Die Rasterungsstufe 560 erzeugt Fragmentdaten (d.h. interpolierte Vertex-Attribute, die einem bestimmten Musterort für jedes abgedeckte Pixel zugeordnet sind), die an die Fragment-Shading-Stufe 570 übertragen werden.
  • Die Fragment-Shading-Stufe 570 verarbeitet Fragmentdaten durch Durchführen einer Reihe von Operationen (z.B. einen Fragment-Shader oder ein Programm) an jedem der Fragmente. Die Fragment-Shading-Stufe 570 kann Pixeldaten (d.h. Farbwerte) für das Fragment erzeugen, z.B. durch Durchführen von Beleuchtungsoperationen oder Abtasten von Textur-Maps unter Verwendung interpolierter Texturkoordinaten für das Fragment. Die Fragment-Shading-Stufe 570 erzeugt Pixeldaten, die an die Rasteroperationsstufe 580 übertragen werden.
  • Die Rasteroperationsstufe 580 kann verschiedene Operationen an den Pixeldaten durchführen, wie z.B. Alpha-Tests, Schablonentests und ein Mischen der Pixeldaten mit anderen Pixeldaten, die anderen Fragmenten entsprechen, die dem Pixel zugeordnet sind. Wenn die Rasteroperationsstufe 580 das Verarbeiten der Pixeldaten (d.h. der Ausgabedaten 502) abgeschlossen hat, können die Pixeldaten in ein Renderziel, wie beispielsweise ein Frame-Puffer, ein Farbpuffer oder dergleichen, geschrieben werden.
  • Es versteht sich, dass zusätzlich zu oder anstelle von einer oder mehrerer der vorstehend beschriebenen Stufen eine oder mehrere zusätzliche Stufen in der Grafikverarbeitungs-Pipeline 500 enthalten sein können. Verschiedene Implementierungen der abstrakten Grafikverarbeitungs-Pipeline können verschiedene Stufen implementieren. Ferner können in manchen Ausführungsbeispielen (z. B. der Geometrie-Shading-Stufe 540) eine oder mehrere der vorstehend beschriebenen Stufen aus der Grafikverarbeitungs-Pipeline ausgeschlossen sein. Andere Arten von Grafikverarbeitungs-Pipelines werden als im Rahmen der Offenbarung liegend betrachtet. Ferner kann jede der Stufen der Grafikverarbeitungs-Pipeline 500 durch eine oder mehrere dedizierte Hardwareeinheiten innerhalb eines Grafikprozessors wie beispielsweise der PPU 200 implementiert sein. Andere Stufen der Grafikverarbeitungs-Pipeline 500 können durch programmierbare Hardwareeinheiten wie beispielsweise den SM 340 der PPU 200 implementiert sein.
  • Die Grafikverarbeitungs-Pipeline 500 kann über eine Anwendung, die von einem Host-Prozessor, wie beispielsweise einer CPU, ausgeführt wird, implementiert sein. In einem Ausführungsbeispiel kann ein Gerätetreiber eine Anwendungsprogrammierschnittstelle (API) implementieren, die verschiedene Funktionen definiert, die von einer Anwendung verwendet werden können, um grafische Daten zur Anzeige zu erzeugen. Der Gerätetreiber ist ein Softwareprogramm, das eine Vielzahl von Anweisungen beinhaltet, die den Betriebsablauf der PPU 200 steuern. Die API stellt eine Abstraktion für einen Programmierer bereit, die es einem Programmierer ermöglicht, spezielle Grafikhardware, wie beispielsweise die PPU 200, zu verwenden, um die grafischen Daten zu erzeugen, ohne dass der Programmierer den spezifischen Befehlssatz für die PPU 200 verwenden muss. Die Anwendung kann einen API-Aufruf beinhalten, der an den Gerätetreiber für die PPU 200 weitergeleitet wird. Der Gerätetreiber interpretiert den API-Aufruf und führt verschiedene Operationen durch, um auf den API-Aufruf zu reagieren. In einigen Fällen kann der Gerätetreiber durch Ausführen von Anweisungen auf der CPU Operationen durchführen. In anderen Fällen kann der Gerätetreiber zumindest teilweise Operationen durchführen, indem er Operationen auf der PPU 200 über eine Eingabe-/Ausgabe-Schnittstelle zwischen der CPU und der PPU 200 startet. In einem Ausführungsbeispiel ist der Gerätetreiber dazu konfiguriert, die Grafikverarbeitungs-Pipeline 500 unter Verwendung der Hardware der PPU 200 zu implementieren.
  • Innerhalb der PPU 200 können verschiedene Programme ausgeführt werden, um die verschiedenen Stufen der Grafikverarbeitungs-Pipeline 500 zu implementieren. Beispielsweise kann der Gerätetreiber einen Kernel auf der PPU 200 starten, um die Vertex-Shading-Stufe 520 auf einem SM 340 (oder mehreren SMs 340) durchzuführen. Der Gerätetreiber (oder der initiale Kernel, der von der PPU 300 ausgeführt wird) kann auch andere Kernel auf der PPU 300 starten, um andere Stufen der Grafikverarbeitungs-Pipeline 500 durchzuführen, wie z.B. die Geometrie-Shading-Stufe 540 und die Fragment-Shading-Stufe 570. Darüber hinaus können einige der Stufen der Grafikverarbeitungs-Pipeline 500 auf fester Einheitshardware wie beispielsweise einem Rasterisierer oder einem innerhalb der PPU 300 implementierten Datenassembler implementiert sein. Es versteht sich, dass die Ergebnisse eines Kernels von einer oder mehreren dazwischenliegenden Hardwareeinheiten mit fester Funktion verarbeitet werden können, bevor sie von einem nachfolgenden Kernel auf einem SM 340 verarbeitet werden.
  • Maschinelles Lernen
  • Tiefe neuronale Netzwerke bzw. Deep Neural Networks (DNNs), die auf Prozessoren wie beispielsweise der PPU 200 entwickelt wurden, wurden für verschiedene Anwendungsfälle eingesetzt, von selbstfahrenden Autos bis hin zu schnellerer Medikamentenentwicklung, von der automatischen Bildüberschrift in Online-Bilddatenbanken bis hin zur intelligenten Echtzeit-Sprachübersetzung in Video-Chat-Anwendungen. Deep Learning ist eine Technik, die den neuronalen Lernprozess des menschlichen Gehirns modelliert, kontinuierlich lernt, kontinuierlich intelligenter wird und im Laufe der Zeit schnellere und genauere Ergebnisse liefert. Ein Kind wird zunächst von einem Erwachsenen gelehrt, verschiedene Formen richtig zu identifizieren und zu klassifizieren, um schließlich ohne Coaching Formen identifizieren zu können. Ebenso muss ein tief lernendes oder neuronal lernendes System in der Objekterkennung und -klassifizierung trainiert werden, damit es intelligenter und effizienter grundlegende Objekte, verdeckte Objekte usw. identifizieren und gleichzeitig den Objekten Kontext zuweisen kann.
  • Auf der einfachsten Ebene betrachten Neuronen im menschlichen Gehirn verschiedene Inputs, die empfangen werden, werden jedem dieser Inputs Bedeutungsgrade zugewiesen, und wird eine Ausgabe an andere Neuronen weitergeleitet, um darauf zu reagieren. Ein künstliches Neuron oder Perzeptron ist das grundlegendste Modell eines neuronalen Netzwerks. In einem Beispiel kann ein Perzeptron eine oder mehrere Inputs bzw. Eingaben empfangen, die verschiedene Merkmale eines Objekts darstellen, zu deren Erkennung und Klassifizierung das Perzeptron trainiert ist, und wird jedem dieser Merkmale ein bestimmtes Gewicht zugewiesen, das auf der Bedeutung dieses Merkmals für die Definition der Form eines Objekts basiert.
  • Ein DNN (Deep Neural Network)-Modell beinhaltet mehrere Schichten vieler verbundener Perzeptrons (beispielsweise Knoten), die mit enormen Mengen an Eingangsdaten trainiert werden können, um komplexe Probleme schnell und mit hoher Genauigkeit zu lösen. In einem Beispiel zerlegt eine erste Schicht des DNN-Modells ein zugeführtes Bild eines Autos in verschiedene Abschnitte und sucht nach Grundmustern wie beispielsweise Linien und Winkeln. Die zweite Schicht setzt die Linien zusammen, um nach Mustern höherer Ebene wie beispielsweise Rädern, Windschutzscheiben und Spiegeln zu suchen. Die nächste Schicht identifiziert den Fahrzeugtyp und die letzten paar Schichten erzeugen ein Label für das zugeführte Bild, das das Modell einer bestimmten Automobilmarke identifiziert.
  • Sobald das DNN trainiert ist, kann das DNN eingesetzt und dazu verwendet werden, Objekte oder Muster in einem Prozess zu identifizieren und zu klassifizieren, der als Inferenz bzw. Folgerung bezeichnet wird. Beispiele für Folgerungen (der Prozess, durch den ein DNN nützliche Informationen aus einem gegebenen Input extrahiert) beinhalten das Identifizieren von handschriftlichen Zahlen bei Schecks, die in Geldautomaten hinterlegt sind, das Identifizieren von Bildern von Freunden auf Fotos, das Liefern von Filmempfehlungen an über fünfzig Millionen Benutzer, das Identifizieren und Klassifizieren verschiedener Arten von Autos, Fußgängern und Straßengefahren in fahrerlosen Autos, oder das Übersetzen menschlicher Sprache in Echtzeit.
  • Während des Trainings fließen die Daten in einer Vorwärtspropagierungsphase durch das DNN, bis eine Vorhersage erzeugt wird, die eine dem Input entsprechende Bezeichnung anzeigt. Falls das neuronale Netzwerk den Input nicht korrekt bezeichnet, dann werden Fehler zwischen der korrekten Bezeichnung und der vorhergesagten Bezeichnung analysiert und die Gewichte während einer Rückwärtsausbreitungsphase für jedes Merkmal angepasst, bis das DNN den Input und andere Eingaben in einem Trainingsdatensatz korrekt bezeichnet. Das Training komplexer neuronaler Netze erfordert enorme Mengen an paralleler Rechenleistung, einschließlich Gleitkomma-Multiplikationen und Additionen, die von der PPU 200 unterstützt werden. Die Inferenzierung ist weniger rechenintensiv als das Training, da es sich um einen latenzsensitiven Prozess handelt, bei dem ein trainiertes neuronales Netzwerk auf neue Inputs angewendet wird, die es bisher noch nicht gesehen hat, um Bilder zu klassifizieren, Sprache zu übersetzen und allgemein neue Informationen abzuleiten.
  • Neuronale Netze sind stark auf Matrix-Mathematik-Operationen angewiesen, und komplexe mehrschichtige Netzwerke erfordern enorme Mengen an Gleitkommaleistung und Bandbreite für sowohl Effizienz als auch Geschwindigkeit. Mit Tausenden von Rechenkernen, optimiert für Matrix-Mathematik-Operationen, und Hunderte von TFLOPS an Leistung liefernd ist die PPU 200 eine Rechenplattform, die in der Lage ist, die für auf tiefen neuronalen Netzwerken basierende künstliche Intelligenz und Anwendungen maschinellen Lernens erforderliche Leistung zu liefern.
  • Künstliche neuronale Netzwerke mit linearer Komplexität
  • Übersicht
  • Das durchschnittliche menschliche Gehirn hat etwa 1011 Nervenzellen, wobei jede von diesen mit bis zu 104 anderen verbunden sein kann. Wir untersuchen daher die Frage, ob es Algorithmen für künstliche neuronale Netzwerke gibt, die in der Anzahl von neuronalen Einheiten linear sind. Ein Kombinieren künstlicher neuronaler Netzwerke und Monte-Carlo- und Quasi-Monte-Carlo-Verfahren ermöglicht es, allgemeine, auf Sampling basierende Algorithmen für Inferenz, Training, Kompression und Quantisierung abzuleiten, die von linearer Komplexität sind und über eine Performance auf neuestem Stand verfügen.
  • Einführung
  • Künstliche neuronale Netzwerke bestehen aus neuronalen Einheiten, die dazu bestimmt sind, biologische Neuronen nachzuahmen. Eine solche neuronale Einheit berechnet eine nichtlineare Funktion der gewichteten Summe der Signale an ihren Eingängen. Wenn jede erwähnte neuronale Einheit mit jeder anderen neuronalen Einheit verbunden wäre, wäre der Rechenaufwand von quadratischer Komplexität. Es ist jedoch bekannt, dass im Gehirn nicht jedes Neuron mit jedem anderen Neuron verbunden ist. Noch mehr noch, die Anzahl von Eingängen zu einem Neuron wird durch eine Konstante begrenzt, die viel kleiner ist als die tatsächliche Anzahl der Neuronen.
  • Künstliche neuronale Netzwerke können sogenannte vollständig verbundene Schichten enthalten, wobei jede neuronale Einheit einer Schicht mit jeder neuronalen Einheit der nächsten Schicht verbunden ist. Eine Vielzahl von Experimenten hat gezeigt, dass eine große Anzahl von Verbindungen wenig zum Endergebnis beiträgt und beschnitten werden kann, ohne die Funktion des künstlichen neuronalen Netzwerks zu beeinträchtigen.
  • Die gewichtete Summe im Kern einer neuronalen Einheit kann als ein Skalarprodukt oder eine Quadraturregel betrachtet werden. Durch Interpretieren neuronaler Einheiten als numerische Integrationsalgorithmen können die Prinzipien von Monte-Carlo- und Quasi-Monte-Carlo-Verfahren angewendet werden, um Algorithmen von linearer Komplexität abzuleiten.
  • Ein Anwenden des Prinzips der diskreten Dichtesimulation ermöglicht die Ableitung von Algorithmen linearer Komplexität für künstliche neuronale Netzwerke. Wenn künstliche neuronale Netzwerke durch Pfade dargestellt werden, können sie viel schneller als herkömmliche Darstellungen trainiert werden, und können darüber hinaus auf eine spärliche Weise von Grund auf trainiert werden. Als eine Konsequenz der Spärlichkeit wird eine deterministische Initialisierung möglich. Darüber hinaus kann ein Algorithmus abgeleitet werden, der ein künstliches neuronales Netzwerk so unterabtastet, dass die Gewichte nur {-1, 0, 1} betragen und seine Komplexität linear ist in Zeit und Raum in der Anzahl der neuronalen Einheiten. Darüber hinaus kann die Online-Spärlichkeit durch Unterabtasten der Aktivierungen erreicht werden.
  • Simulation diskreter Dichten
  • Skalare Produkte sind die bestimmende Operation von Hilbert-Räumen und bilden die Grundlage linearer Algorithmen. Sie bilden den Kern maschinellen Lernens und sind vor allem in neuronalen Einheiten von Bedeutung, wo eine gewichtete Summe von Eingaben berechnet wird, die dann als Argument an eine nichtlineare Funktion übergeben wird (siehe z.B. die untenstehende Gleichung 2).
  • Im Folgenden untersuchen wir, wie skalare Produkte unter Verwendung zufälliger und deterministischer Abtastungen, die die Grundlage für die Effizienzsteigerung künstlicher neuronaler Netzwerke bilden, zu evaluieren sind. Siehe zum Beispiel „Massively parallel construction of radix tree forests for the efficient sampling of discrete probability distributions“ von Binder et al., welches fortgeschrittene Algorithmen zur Abtastung diskreter Wahrscheinlichkeitsverteilungen diskutiert und welches in seiner Gesamtheit hierin einbezogen wird.
  • Ohne Verlust der Allgemeingültigkeit gehen wir von einem normierten bzw. normalisierten Satz von Gewichten aus, so dass sich die Absolutwerte der Gewichte zu Eins aufaddieren, d.h.: k = 0 n 1 | w k | = w 1 = 1   .
    Figure DE102019106996A1_0001
  • Wenn die Gewichte nicht normalisiert sind, verwenden wir stattdessen Gewichte | w k | w 1
    Figure DE102019106996A1_0002
    und gehen davon aus, dass ∥w∥1≠0.
  • Die Absolutwerte der Gewichte bilden dann eine Partition des Einheitsintervalls, wobei P m : = k 1 m | w k |
    Figure DE102019106996A1_0003
    und 0 = P 0 < P 1 < < P n 1 = 1 :
    Figure DE102019106996A1_0004
    Figure DE102019106996A1_0005
  • Bei N gleichmäßig verteilten Abtastwerten xi ∈ [0, 1) ermöglicht diese Prozedur, ein skalares Produkt zu approximieren. k = 0 n 1 w k a k 1 N i = 0 N 1 sign ( w j i ) a j i ,
    Figure DE102019106996A1_0006
    wobei der Index ji ∈ {0,..., n - 1} eindeutig bestimmt wird durch Pj i -1 ≤ xi < Pj i , da dies sicherstellt, dass ji mit der Wahrscheinlichkeit |wj i | ausgewählt wird. a = (a0, ..., an-1) ist ein gegebener Vektor von Eingaben.
  • Falls xi Zufallszahlen sind, dann ist die Prozedur die Monte-Carlo-Integration eines skalaren Produkts durch Simulieren der diskreten Dichte, die durch die Absolutwerte der normalisierten Gewichte gegeben ist. Es läuft darauf hinaus, dass die Gewichte auf Werte in {-1, 0, +1} quantisiert werden.
  • Die Qualität der Approximation kann durch Auswählen von Abtastwerten xi mit verbesserter gleichmäßiger Verteilung verbessert werden. Eine deterministische Wahl wären Sequenzen mit geringer Diskrepanz bzw. Abweichung, und eine einfache randomisierte Alternative ist eine äquidistante Abtastung mit Jitter, wobei: x i = i + ξ N
    Figure DE102019106996A1_0007
    für eine Realisierung der Zufallsvariablen ξ ∈ [0, 1). Ein Sortieren der Gewichte vor der Aufnahme ihrer absoluten Werte verbessert die Approximationsqualität.
  • Es wird angemerkt, dass größere Gewichte mehrfach abgetastet werden können. Dieser Fall kann durch Zählen, wie viele Referenzen gemacht wurden, und Multiplizieren der entsprechenden Aktivierung mit der Anzahl von Referenzen, anstatt über die Referenzen zu schleifen, optimiert werden.
  • Andererseits können doppelte Referenzen selten vorkommen, es sei denn, die Gewichte variieren stark. Eine grobe Annäherung, die mehrfache Referenzen ignoriert, kann in solchen Fällen gut funktionieren. Alternativ kann man eine Anzahl von Abtastwerten so durchsuchen, dass die resultierende Quantisierung wirklich ternär (oder binär) ohne Duplikate ist. In einem weiteren Ausführungsbeispiel kann die Anzahl der maximalen Bits zum Zählen von Duplikaten festgelegt sein und können Abtastwerte hinzugefügt werden, bis diese maximal darstellbare Anzahl erreicht ist. In einem nochmals weiteren Ausführungsbeispiel kann das Zählen über die maximal darstellbare Anzahl hinaus fortgesetzt werden, indem ein resultierender Rundungs- bzw. Abschneidefehler akzeptiert wird.
  • Ein Abtasten in Übereinstimmung mit einer Verteilung kann auch auf parallelen Systemen und wenn die Gewichte nur sequentiell verfügbar sind implementiert werden. Aufgrund von Annullierung und Rundung kann eine Implementierung in Gleitkommazahlen nicht unbedingt ||w|| = 1 ergeben, und es ist darauf zu achten, solche Fälle abzufangen. Eine praktische Umgehungslösung besteht darin, die tatsächliche Summe zur Skalierung der Zufallsvariablen zu verwenden.
  • Künstliche neuronale Netzwerke
  • Ein beispielhaft gerichteter Graph 600 eines künstlichen neuronalen Netzwerks ist in 6 dargestellt. Wie gezeigt ist, ist bei gegebenem Eingangsvektor a0 602A-N ein Ausgangsvektor aL 604A-N durch die neuronalen Einheiten al,i 606A-N und 608A-N bestimmt. Jede neuronale Einheit in einer Schicht / berechnet eine gewichtete Summe der Aktivierungen in der vorherigen Schicht 1-1 und wendet eine Aktivierungsfunktion an, die ihre Ausgabe fixiert.
  • Es gibt L-Schichten mit nl neuronalen Einheiten in der I-ten Schicht. Bei gegebenen Gewichten wl,k,i und Eingangsaktivierungen a0,k wird die Ausgabe einer neuronalen Einheit berechnet als: a l , i : = max { 0, k = 0 n l 1 1 w l , k , i a l 1, k b l , i } .
    Figure DE102019106996A1_0008
  • Somit berechnet eine neuronale Einheit eine gewichtete Summe der Eingangsaktivierungen und wendet eine nichtlineare Funktion auf die gewichtete Summe an. Der Term bl,i wird als Bias bezeichnet und kann zusammen mit ReLU als ein Schwellenwert im Vergleich zu der gewichteten Summe für die Aktivierung verstanden werden.
  • Eigenschaften der Rectified Linear Unit (ReLU)
  • Während es viele Möglichkeiten für die nichtlineare Ausgangsfunktion einer neuronalen Einheit gibt, konzentrieren wir uns auf: ReLU ( x ) : = max { 0, x } ,
    Figure DE102019106996A1_0009
    und überprüfen einige Eigenschaften neuronaler Einheiten unter Verwendung der Funktion der Rectified Linear Unit (ReLU). Tatsächlich kann die ReLU-Aktivierungsfunktion der Kern vieler Funktionen sein, die in künstlichen neuronalen Netzwerken verwendet werden.
  • Leaky ReLU
  • Beispielsweise ist die Leaky ReLU definiert durch: ReLU ( x ) α ReLU ( x ) .
    Figure DE102019106996A1_0010
  • Max-Pooling
  • Für α = -1 resultiert die Leaky ReLU in dem Absolutwert | x | = ReLU ( x ) + ReLU ( x ) ,
    Figure DE102019106996A1_0011
    die wiederum dazu verwendet werden kann, das Maximum zweier Werte darzustellen: max { x , y } = x + y 2 + | x y 2 | = 1 2 ( x + y + ReLU ( x y ) + ReLU ( y x ) )
    Figure DE102019106996A1_0012
  • Durch Induktion kann das Maximum zweier Werte auf das Maximum einer beliebigen Anzahl von Werten erweitert werden. Noch wichtiger ist, dass die Identitäten zeigen, dass die Berechnung des Maximums durch die ReLU-Aktivierungsfunktion dargestellt werden kann und somit eine Optimierung in einem künstlichen neuronalen Netzwerk darstellen kann, die nicht gelernt werden muss. Eine zweite Konsequenz dieser Darstellung ist die Einführung von Skip Links, d.h. die Weitergabe einer Eingabe durch eine Schicht eines neuronalen Netzwerks.
  • Residual Layers
  • Es besteht eine starke Verbindung zwischen neuronalen Einheiten und Projektionsverfahren. Bei einem durch einen normalen Vektor ŵ definierten Halbraum H+ und einem senkrechten Abstand von dem Ursprung b ist die Projektion eines Punkts x auf diesen Halbraum gegeben durch P H + ( x )   : = x min { 0, ( w ^ , x ) b } w ^                = x ReLU ( ( w ^ , x ) b ) w ^ .
    Figure DE102019106996A1_0013
  • Dies ist in 7 dargestellt, welche eine Interpretation 700 von Projektionen auf Halbräume als neuronale ReLU-Einheiten ist. Wie gezeigt ist, ist der Halbraum H+ 702 definiert durch den Vektor von Gewichten ŵ 704 als Normale und einen Bias-Term b 706, welcher die Entfernung der Ebene von dem Ursprung O 708 repräsentiert. Da x1 ∉ H+, wird das x1 710 entlang des eindeutig definierten kürzesten Distanzvektors, d.h. entlang der Richtung ŵ 704, auf die Grenze H+ von 702 bewegt. Für x2 ist nichts zu tun, da bereits x2 ∈ H+ und damit PH+(x2) = x2.
  • Dies kann in adaptiven projektiven Subgradienten-Verfahren für Klassifizierungsprobleme verwendet werden. Tatsächlich übersetzt sich der Term ReLU(〈ŵ,x〉-b) in eine if-Bestimmung, die die Projektion durchführt, wenn das skalare Produkt 〈ŵ,x〉 als ein Schwellenwert b ist.
  • Es wird angemerkt, dass normalerweise der Bias-Term hinzugefügt ist (siehe Gleichung 2). Mit der Interpretation des Bias-Terms als Abstand von dem Ursprung ist die Subtraktion jedoch natürlicher. Die Halbrauminterpretation stellt darüber hinaus eine gewisse Intuition über einen Null- und einen Nicht-Null-Bias bereit: Während es ein Nicht-Null-Bias erlaubt, endliche konvexe Mengen zu konstruieren, bedeutet ein Null-Bias, dass sich alle Ebenen von Halbräumen im Ursprung schneiden müssen und somit die darstellbaren konvexen Mengen unendlich sind. Es wird angemerkt, dass ein konstanter Nicht-Null-Bias bedeutet, dass alle Ebenen den gleichen senkrechten Abstand von dem Ursprung haben.
  • Es sind starke Beziehungen von Residual Layers bzw. Restschichten und gewöhnlichen Differentialgleichungen bereitgestellt. Mit Einführung eines Faktors h kann eine Restschicht geschrieben werden als: a l = a l 1 + h W l ( 2 ) max { 0, W l ( 1 ) a l 1 }    a l a l 1 h = W l ( 2 ) max { 0, W l ( 1 ) a l 1 }
    Figure DE102019106996A1_0014
    und sieht nach der Äquivalenztransformation unmittelbar aus wie ein Schritt des Euler-Verfahrens mit einer Schrittweite h. Mit dem Übergang h → 0 wird die linke Seite zu ȧl, welches eine Restschicht zu einer gewöhnlichen Differentialgleichung macht. Dies führte dazu, dass verschiedene gewöhnliche Differentialgleichungen ausprobiert wurden, um W l ( 1 )  und  W l ( 2 )
    Figure DE102019106996A1_0015
    auf der rechten Seite zu bestimmen und um Inferenz und Training unter Verwendung klassischer Solver für gewöhnliche Differentialgleichungen durchzuführen.
  • Netzwerk-Normalisierung
  • Bei einem positiven Faktor f ∈ ℝ+ hat eine neuronale Einheit mit der ReLU-Aktivierungsfunktion eine Skalierungseigenschaft: max { 0,   k = 0 n l 1 1 w l , k , i a l 1, k b l , i }    = f max { 0, k = 0 n l 1 1 w l . k . i a l 1, k b l , i f }
    Figure DE102019106996A1_0016
  • Neuronale Einheiten mit einer Aktivierungsfunktion, die diese Skalierungseigenschaft aufweist, können durch Auswählen des linearen Faktors bzw. Linearfaktors normalisiert werden. f = w l , i 1 + | b l , i | = k = 0 n l 1 1 | w l , k , i | + | b l , i |
    Figure DE102019106996A1_0017
    so dass sich die Absolutwerte zu Eins aufsummieren. Unter Verwendung von f = w l , i 1 = k = 0 n l 1 1 | w l , k , i |
    Figure DE102019106996A1_0018
    normalisiert sich der Absolutwert der Gewichte derart, dass sie eine diskrete Wahrscheinlichkeitsverteilung bilden. Ein ganzes Netzwerk kann normalisiert werden, indem man beginnt, die Linearfaktoren ausgehend von der ersten Schicht durch das Netzwerk in einer Feed-Forward-Manier zu propagieren: Die Gewichte der nächsten Schicht werden durch Multiplikation mit den jeweiligen Linearfaktoren aus der vorherigen Schicht aktualisiert. Die letzte Schicht muss dann die abschließenden Linearfaktoren für die neuronalen Ausgabeeinheiten speichern. Diese Netzwerknormalisierungstransformation ist deterministisch. Wird ein künstliches neuronales Netzwerk als Approximationsoperator betrachtet, ermöglicht es die Netzwerknormalisierung, die Operatornorm zu kontrollieren.
  • Wie vorstehend gezeigt wurde, haben die Leaky ReLU, der Absolutwert und das Max-Pooling die Eigenschaft eines positiven Linearfaktors. Daher können aus ihnen aufgebaute künstliche neuronale Netzwerke wie beschrieben normalisiert werden. Es wird angemerkt, dass wir für das Beispiel der Projektionsmethoden in Gleichung 3 die euklidische Norm f = w l , i 2 : = k = 0 n l 1 1 | w l , k , i | 2
    Figure DE102019106996A1_0019
    verwenden würden, um die Normalenvektoren senkrecht zu der Ebene, die sie beschreiben, zu erhalten. Die euklidische Norm wurde auch dazu verwendet, die Länge eines Gewichtsvektors von seiner Richtung zu trennen, um das Training zu beschleunigen. Sie ist ein Ersatz für die Batch-Normalisierung.
  • Lineare Algorithmen für künstliche neuronale Netzwerke
  • In einem vollständig verbundenen künstlichen neuronalen Netzwerk ist die Anzahl der Gewichte n w = l = 1 L n l 1 n l
    Figure DE102019106996A1_0020
    äquivalent zu der Anzahl von Verbindungen, wobei nl die Anzahl der neuronalen Einheiten in der Schicht / ist. Im Gehirn ist jedoch bei weitem nicht jedes Neuron mit allen anderen Neuronen verbunden. Eine Möglichkeit, eine Komplexität zu erreichen, die linear in der Anzahl der neuronalen Einheiten n = l = 1 L n l
    Figure DE102019106996A1_0021
    ist, besteht darin, die Anzahl von Verbindungen zu einer neuronalen Einheit durch eine Konstante zu begrenzen. In einer ersten Reihe von Experimenten untersuchen wir Verbindungen von trainierten künstlichen neuronalen Netzwerken proportional zu der Gewichtsverteilung der neuronalen Einheiten, wie vorstehend erklärt wurde:
  • Vollständig verbundene Schichten
  • Ein spärliches künstliches neuronales Netzwerk kann durch Auswählen eines Bruchteils der Verbindungen eines vollständig verbundenen Netzwerks durch Sampling bzw. Abtasten gemäß den Gewichten jeder neuronalen Einheit erzeugt werden. In einem Beispiel kann man mit nur 12% der wichtigsten Gewichte 97,52% der Genauigkeit des vollständigen Modells erreichen. Dieser einfache Ansatz veranschaulicht bereits die Leistungsfähigkeit unterabtastender neuronaler Netzwerke. Für dieses Experiment verwendeten wir ein äquidistant flimmerndes bzw. jittered Abtasten mit einem zufälligen Offset pro neuronaler Einheit.
  • Es wird angemerkt, dass ein unabhängiges Abtasten neuronaler Einheiten dazu führen kann, dass neuronale Einheiten oder Eingänge nicht verbunden werden. Darüber hinaus ist ein Abtasten eines Bruchteils der Gewichte noch kein linearer Algorithmus, obwohl es bereits das Potenzial des Abtastungsansatzes unterstreicht.
  • Faltungsschichten
  • Für eine LeNet-Architektur auf CIFAR-10 liegt die beste Testgenauigkeit unseres Modells bei 69,12%. Durch Anwenden der Unterabtastung auf die Faltungsgewichte sind wir in der Lage, 88% der Genauigkeit des vollständigen Modells bei nur 50% abgetasteter Gewichte zu erreichen. Die Gewinne sind geringer als bei der Unterabtastung vollständig verbundener Schichten, da die Anzahl der Gewichte viel geringer ist und tatsächlich bereits durch eine Konstante begrenzt ist, welche die Filterkerngröße. Daher kann sich die Unterabtastung einzelner Filterkerne nur bei größeren Filterkernen auszahlen.
  • Anstatt jedoch die Gewichte der jedes Filters nacheinander zu erfassen, verbessert die Abtastung über alle Gewichte aller Filter einer Faltungsschicht die Situation sehr stark. Auf diese Weise repräsentieren die ausgewählten Verbindungen das Ensemble aller Filter einer Faltungsschicht viel besser, welches eine erhöhte Spärlichkeit ermöglicht.
  • Partition statt Dropout
  • Dropout wird dazu verwendet, um das Training künstlicher neuronaler Netzwerke zu regulieren. Mit einer Wahrscheinlichkeit 1 P
    Figure DE102019106996A1_0022
    wird eine neuronale Einheit während des Trainings nicht berücksichtigt, falls wir für eine gleichmäßig verteilte Zufallszahl ξ 1 P > ξ
    Figure DE102019106996A1_0023
    haben. Eine solche Zufallszahl kann beispielsweise durch einen Schieberegistergenerator mit linearer Rückführung effizient simuliert werden.
  • Dieses Verfahren garantiert jedoch nicht die Abdeckung aller neuronalen Einheiten. Die Zuordnung einer neuronalen Einheit zu genau einer Partition p = ζ P
    Figure DE102019106996A1_0024
    aus P ∈ ℕ Partitionen verwendet weniger Pseudo-Zufallszahlengenerator-Aufrufe und garantiert, dass alle neuronalen Einheiten berücksichtigt werden. Siehe zum Beispiel 8, welche zwei Dropout-Instanzen 802 und 804 mit einer Partitions-Instanz 806 vergleicht.
  • Abgesehen von der verbesserten algorithmischen Effizienz ist nichts verändert, wie in Tabelle 1 dargestellt ist: Tabelle 1
    LeNet auf CIFAR-10 Dropout Mittelwert über Partitionen Mittelwertvon
    1 P = 1 / 2   t o   1 / 9
    Figure DE102019106996A1_0025
    P = 2 to 9
    Mittl.-Genauigkeit 0.6062 0.6057
    Std.abw.-Genaurigkeit 0.0106 0.009
  • Darstellen künstlicher neuronaler Netzwerke durch Pfade
  • Bei Dropout- oder Drop-Connect kann es vorkommen, dass der Ausgang einer neuronalen Einheit nicht verwendet wird oder dass eine neuronale Einheit mit keinem Eingang verbunden ist. Dasselbe kann für das reine Abtasten von Verbindungen einer neuronalen Einheit gelten. Wenn jedoch Pfade von den Eingängen zu den Ausgängen eines künstlichen neuronalen Netzwerks konstruiert werden, kann es keine hängenden neuronalen Einheiten geben, da alle neuronalen Einheiten auf einem Pfad zumindest einen Eingang verwenden und ihre Ausgabe propagieren. Daher ist die Komplexität durch die Tiefe des künstlichen neuronalen Netzwerks multipliziert mit der Anzahl der Pfade begrenzt, und ist daher sowohl räumlich als auch zeitlich linear.
  • 9 veranschaulicht beispielhaft ausgewählte Pfade 902-908 in einem künstlichen neuronalen Netzwerk 900 gemäß einem beispielhaften Ausführungsbeispiel. Wie gezeigt ist, wird die Rechenkomplexität der ausgewählten Pfade 902-908 in sowohl Zeit als auch Raum durch die Anzahl ausgewählter Pfade 902-908 mal die Anzahl L von Schichten (z.B. die Tiefe des künstlichen neuronalen Netzwerks 900) begrenzt.
  • Tabelle 2 veranschaulicht beispielhafte C++-Deklarationen und Initialisierungen der Variablen für künstliche neuronale Netzwerke, die durch Pfade dargestellt werden. LayerOffset [ l ] = i = 0 l 1 n l
    Figure DE102019106996A1_0026
    ist der Index des ersten Elements der Schicht l in den Aktivierungs- und Fehlerarrays. Die Pfade werden entweder als Zufallswege erzeugt, die von einem Pseudozufallszahlengenerator oder von einer deterministischen Sequenz ausgewählte neuronale Einheiten verbinden, wobei P[i][I] die I-te Komponente des i-ten Vektors einer Sequenz mit geringer Diskrepanz bzw. Abweichung ist.
    Figure DE102019106996A1_0027
  • Tabelle 3 veranschaulicht eine beispielhafte Implementierung mit linearer Komplexität C++ des Inferenz (Feed-Forward)-Schrittes eines durch Pfade unter Verwendung der ReLU-Aktivierungsfunktion definierten künstlichen neuronalen Netzwerks gemäß einem Ausführungsbeispiel. Die Implementierung zeigt die explizite Ausführung der ReLU-Aktivierungsfunktion. Das Weglassen dieser Schleife und das Auskommentieren der if-Anweisung realisiert implizit die ReLU-Aktivierungsfunktion in einer hardwaremäßigeren Form, da das Vorzeichenbit der Aktivierung ausreicht, um die Akkumulationsoperationen zu maskieren.
    Figure DE102019106996A1_0028
  • Es kann immer noch vorkommen, dass einige neuronale Einheiten nie berührt werden, oder dass einige Verbindungen mehrfach abgetastet werden. Während dies unter Verwendung randomisierter Verfahren zur Nachverfolgung der Pfade nicht zu vermeiden ist, gibt es zahlentheoretische Konstruktionen, die es ermöglichen, Verbindungsmuster mit Garantien für Abdeckung, Fan-In und Fan-Out zu erstellen.
  • In diesem Sinne kann eine Hardwarearchitektur für spärliche künstliche neuronale Netzwerke eingeführt werden. Eine Stufe der Pipeline-Architektur entspricht einer Schicht eines künstlichen neuronalen Netzwerks und kümmert sich um Feed-Forward, Back-Propagation und Gewichtsaktualisierung in dieser Schicht. Ein künstliches neuronales Netzwerk wird durch die Anzahl von neuronalen Einheiten pro Schicht und sowohl Fan-in als auch Fan-out für alle neuronalen Einheiten einer Schicht spezifiziert. Die Verbindungen zwischen den Schichten werden unter Verwendung deterministischer Permutationen hergestellt, welches es ermöglicht, doppelte Verbindungen zu vermeiden und die Abdeckung aller neuronalen Einheiten zu gewährleisten. Die Architektur wurde nicht für neuronale Faltungsnetzwerke ausgelegt. Für ausreichend kleine Fan-In- und Fan-Out legen die resultierenden künstlichen neuronalen Netzwerke die strukturelle Spärlichkeit offen. Größere spärliche neuronale Netzwerke können kleinere, aber dichte Netzwerke von etwa derselben Komplexität übertreffen.
  • In ähnlicher Weise würden künstliche neuronale Netzwerke, die auf Expandergraphen basieren, zumindest einen möglichen Pfad von jedem Eingang zu jedem Ausgang garantieren. In Bezug auf das Berechnen von n Ausgangsmerkmalsschichten aus m Eingangsmerkmalsschichten kann für jede der n Faltungen eine Teilmenge von D < m Eingangsmerkmalsschichten ausgewählt werden, um die Komplexität von Faltungsschichten zu reduzieren. Die Implementierung basiert jedoch auf einem zufälligen Abtastverfahren, das die Verbindungseigenschaft nicht garantiert.
  • In einem Ausführungsbeispiel hängen Fan-In und Fan-Out von der Anzahl der Pfade und der Anzahl nl von neuronalen Einheiten pro Schicht ab. Falls die Anzahl von neuronalen Einheiten und die Anzahl von Verbindungen zwischen den Schichten Potenzen von zwei sind, garantiert die Sobol'sche Sequenz, dass der Fan-In und der Fan-Out pro neuronaler Einheit eine Ganzzahl und Konstante pro Schicht ist. Anstatt die gleiche Anzahl von Pfaden zwischen Schichten auszuwählen, garantiert jede Zweierpotenz der Anzahl von Kanten zwischen Schichten, die unter Verwendung der Sobol'schen Sequenz erzeugt wurden, dieses. Darüber hinaus können Fan-In und Fan-Out durch Trajektoriensplitting angepasst werden. Siehe z.B. „Quasi-Monte Carlo image synthesis in a nutshell“ von Alexander Keller, welches durch Bezugnahme Verweis in seiner Gesamtheit hierin einbezogen wird.
  • Unter Verwendung einer deterministischen Sequenz mit geringer Diskrepanz bzw. Abweichung kann P[I][i] als eine Funktionsauswertung der I-ten Komponente des i-ten Vektors einer solchen Sequenz, d.h. ein Adressgenerator, der für viele Sequenzen mit geringer Diskrepanz effizient in Hardware implementiert werden kann, verstanden werden. Insbesondere für Sequenzen wie die Sobol'sche Sequenz sind von einer Komponente erzeugte zusammenhängende Blöcke von Adressen Permutationen und garantieren somit ein kollisionsfreies Routing, wenn Schichten parallel verbunden werden.
  • Progressives Spärliches Training
  • Anstatt Teilmengen eines künstlichen neuronalen Netzwerks durch Dropout oder Partitionieren zu erzeugen, kann aus einer Sequenz von Pfaden ein Teilgraph als die Vereinigung der neuronalen Einheiten, die von einem zusammenhängenden Block von Pfaden berührt werden (siehe z.B. 9), erzeugt werden. Diese Prozedur wird dann für jeden Batch des Trainings iteriert bzw. wiederholt. Abgesehen von Dropout, Drop Connect oder Partitionierung werden die Teilgraphen garantiert verbunden. Auf diese Weise wird sichergestellt, dass die Trainingskomplexität pro Iteration linear ist.
  • Neben zufälligen Schritten im Diagramm des Netzwerks können auch Sequenzen mit geringer Diskrepanz angewendet werden, um die Pfade durch das Netzwerk in einer progressiven Weise abzutasten. Diese Konstruktion basiert auf sogenannten (t, s)-Sequenzen in einer Basis b, welche tatsächlich Sequenzen von (t, m, s)-Netzen in der Basis b sind.
  • Beispielsweise ist die deterministische Sobol'sche Sequenz mit geringer Diskrepanz eine (t, s)-Sequenz in der Basis b = 2, die s Dimensionspunkte in dem Einheits-Hyperwürfel [0, 1)s erzeugt, die gleichmäßig verteilt sind. Diese Punkte können sehr effizient berechnet werden. Eine Hardware-Realisierung ist einfach, weil die Arithmetik vollständig auf finiten Feldern mit einer Potenz von 2 Elementen basiert. Nun haben die Komponenten der Sobol'schen Sequenz die Eigenschaft, dass jeder zusammenhängende Block einer Potenz von 2 Elementen eine Permutation bildet, welche garantiert, dass Schichten in einem neuronalen Netzwerk, die durch einen quasizufälligen Weg unter Verwendung der Sobol'schen Sequenz verbunden sind, durch Sätze von Permutationen verbunden sind.
  • Unter Verwendung des Zweigs mit geringer Diskrepanz in dem Algorithmus in Tabelle 2 ist das Erzeugen der deterministischen quasizufälligen Wege so einfach wie das Auswerten des P[I][i] in Tabelle 2 unter Verwendung der s-dimensionalen Punkte anstelle eines Pseudozufallszahlengenerators. Mit der Schicht / und dem Index i des Pfads kann die entsprechende Komponente der Sobol'schen Sequenz und ihrer verschlüsselten Varianten durch eine einfache spezifische Schaltung aus Boole'scher Logik berechnet werden, welches es ermöglicht, die Sequenz zu verwenden, ohne ihre Punkte explizit zu speichern.
  • Da diese Permutationen progressiv sind, können zusammenhängende Blöcke von quasizufälligen Wegen, die durch die Sobol'sche Sequenz erzeugt werden, verwendet werden, um neuronale Netzwerke unterzuabtasten, anstatt Dropout zu verwenden.
  • Es wird angemerkt, dass Sequenzen mit geringer Diskrepanz randomisiert und/oder verschlüsselt werden können, welches ihre Permutationseigenschaften erhalten kann. Es wird angemerkt, dass dies nicht unbedingt garantiert ist, wenn anstelle von Sequenzen mit geringer Diskrepanz Pseudozufallszahlengeneratoren verwendet werden.
  • Ähnlich zu Computergrafik kann ein Nachverfolgen von Pfaden durch Netzwerke erfolgen, indem an den Eingängen begonnen wird, von den Ausgängen aus zurückverfolgt wird oder an beiden Enden begonnen wird und Pfadsegmente verbunden werden.
  • Spärliches Trainieren von Grund auf
  • Anstatt ein neuronales Netzwerk progressiv unterabzutasten, kann ein Satz von Pfaden verwendet werden, um eine spärliche Architektur zu reparieren, siehe zum Beispiel 9. Bei einem spärlichen Training von Grund auf ist die Komplexität von sowohl Inferenz als auch Training in der Anzahl neuronaler Einheiten, die von den Pfaden berührt werden, linear ist.
  • Gleichmäßige Initialisierung
  • Vor dem Training müssen die Gewichte eines künstlichen neuronalen Netzwerks initialisiert werden. In der Regel werden Gauß-verteilte Zufallsvariablen oder kleinskalige gleichmäßige Zufallsvariablen verwendet, welches zu unvorhersehbaren Ausgaben während der anfänglichen Trainingsphase führt. Dies kann vermieden werden, indem ein neuronales Netzwerk dazu trainiert wird, eine gleichmäßige Verteilung zu approximieren, bevor es aus Daten lernt.
  • Für rekurrente künstliche neuronale Netzwerke kann es sinnvoll sein, mit einer gleichmäßig skalierten diagonalen Einheitsmatrix für die Versteckt-bis-versteckt-Gewichte zu beginnen.
  • Das Initialisieren der Gewichtsmatrizen mit einer kleinen positiven Konstante funktioniert jedoch gut, wenn wir das künstliche neuronale Netzwerk wie vorstehend gezeigt unterabtasten. Während dies auf den ersten Blick kontraintuitiv erscheinen mag, ist zu beachten, dass nur eine Teilmenge der Verbindungen ausgewählt ist. Daher werden die Gewichte der ausgewählten Verbindungen auf eine Konstante, z.B. das Inverse der Anzahl von Verbindungen einer neuronalen Einheit, initialisiert, um normalisiert zu werden, während die nicht ausgewählten Verbindungsgewichte implizit auf null gesetzt werden. Folglich würde der entsprechende Gewichtsvektor in einer vollständig verbundenen Schicht aus zufällig oder quasizufällig ausgewählten Indizes mit Null- und Nicht-Null-Werten bestehen. Diese Konfiguration ist ausreichend gleichmäßig verteilt, um eine Konvergenz während des Trainings zu ermöglichen.
  • Spärlichkeit durch Quantisierung nach dem Training
  • Bei einem trainierten künstlichen neuronalen Netzwerk ist es einfach, dieses Netzwerk zu komprimieren, um Gewichte in {-1, 0, 1} zu verwenden, indem einfach proportional zu den Gewichten jeder neuronalen Einheit abgetastet wird, wie vorstehend erklärt wurde. Ausgehend von den Ausgängen werden Pfade rückwärts proportional zu den Gewichten jeder neuronalen Einheit abgetastet, die entlang des Pfads besucht wurden. Dies entspricht einer wichtigkeitsgemäßen Abtastung von Pfaden in einem gewichteten Graphen.
  • Das resultierende Netzwerk verwendet dann nur noch Addition und Subtraktion und keine weitere Multiplikation mit Gewichten. Es wird angemerkt, dass Verbindungen mehr als einmal abgetastet werden können und daher durch eine Verbindung mit den aufsummierten Gewichten ersetzt werden können.
  • Tatsächlich wird eine Ableitung ternärer Gewichten bereitgestellt und gleichzeitig erklärt, warum binäre Gewichte von nur {-1, 1} oder {0, 1} nicht unbedingt funktioniert haben: Sie konnten nicht als diskrete Dichteapproximation abgeleitet werden. Ein beispielhaftes Schema kann als ein Compiler betrachtet werden, der ein trainiertes künstliches neuronales Netzwerk in ein ternäres übersetzt. In Bezug auf doppelte Verbindungen gibt es eine interessante Beobachtung: In unserem Schema können Verbindungen mehr als einmal abgetastet werden, wenn sie angesichts der Anzahl von Abtastwerten ausreichend wichtig sind. Solche doppelten Verbindungen können während der Gewichtsquantisierung nicht auftreten, wenn keine mehrfachen Referenzen zulässig sind, sie können jedoch als doppelte Filterkerne erscheinen.
  • Spärliche Inferenz
  • Während ein Unterabtasten von Gewichten die Effizienz für große Filter verbessert, kann dies nicht viel helfen, wenn die Anzahl von Gewichten klein ist. Stattdessen können die Aktivierungen einer ganzen Merkmalsschicht während der Inferenz (und des Trainings) online unterabgetastet werden, wie in 10 dargestellt ist. Genauer gesagt werden bei der spärlichen Inferenz neuronale Einheiten proportional zu ihren Aktivierungen ausgewählt. Dieses Prinzip gilt für jede Art von Schicht, z.B. vollständig verbundene Schichten 1002 oder Faltungsschichten 1004. Auf diese Weise können Berechnungen drastisch reduziert werden, da während des Feed-Forward nur ein Bruchteil oder eine konstante Anzahl der Verbindungen ausgewählt wird.
  • Dies kann auf jede Art von Schicht im Allgemeinen angewendet werden, ist besonders nützlich für Faltungsschichten und kann helfen, wenn die statische Quantisierung nicht ausreichend effizient ist.
  • In unserer Implementierung tasten wir proportional zu den Aktivierungen einer Schicht online während der Inferenz ab und zählen, wie oft eine Aktivierung (d.h. neuronale Einheit) ausgewählt wird. Diese Zähler werden dann durch ||a||1 dividiert, und das Ergebnis wird vorwärts geleitet. Im Vergleich zu Gleichung 1 tasten wir nun proportional zu der Verteilung der Aktivierungen ak ab, welche für den Fall der ReLU nicht negativ sind.
  • Falls die Aktivierungen auf {0, 1} quantisiert werden, werden wir nur Gewichte aufsummieren, ohne jegliche Multiplikation. Die Unterabtastung kann als eine andere Art der Regularisierung betrachtet werden. Im Grenzfall ähnelt das Fixieren des Eingangs und das wiederholte Unterabtasten von Aktivierungen wie beschrieben einem Netzwerk, in dem neuronale Einheiten proportional zu ihren Aktivierungen feuern.
  • In einer ähnlichen Weise können durch Abtasten proportional zu dem Fehler einer Schicht Fehler durch das Netzwerk zurückpropagiert bzw. zurückverbreitet werden.
  • Die hierin vorgestellten Techniken können auf rekurrente Verbindungen angewendet werden. Während sie nicht nur auf die Quantisierung von rekurrenten Gewichten anwendbar sind, können wir spärlich rekurrente Verbindungen von Grund auf und spärliche Aktivierungen haben.
  • Neben der Abtastung proportional zu den Aktivierungen einer Schicht können wir auch proportional zu dem Produkt aus Aktivierungen und Gewichten während der Inferenz abtasten. Dies entspricht am ehesten dem, was in Monte-Carlo-Verfahren als wichtigkeitsgemäßes Abtasten bezeichnet wird. Die betrachtete neuronale Einheit addiert dann einfach die -1 für abgetastete Verbindungen mit negativen Gewichten und +1 für abgetastete Verbindungen mit positiven Gewichten auf. Die Effizienz eines solchen Ansatzes hängt von der Anzahl von Einträgen in der diskreten Wahrscheinlichkeitsdichte ab. Offenkundig lohnt es sich nur, wenn die Zahl nicht quadratisch ist.
  • Fazit
  • Wir zeigten, dass Dropout-Partitionen einen Dropout nur bei einem Bruchteil der zuvor verwendeten Pseudozufallszahlen realisieren. Ein Abtasten proportional zu den Gewichten einer neuronalen Einheit stellt eine Ableitung ternärer Gewichte bereit und liefert einen einfachen Algorithmus zum Erzeugen künstlicher neuronaler Netzwerke, die nur Addition und Subtraktion anstelle von Gewichtsmultiplikation verwenden. Infolgedessen ist es einfach, neuronale Netzwerke ohne erneutes Training zu ganzzahligen Gewichten zu quantisieren. Ein Ersetzen von Drop Connect und Dropout durch Zufalls- und Quasizufallswege zur Generierung von Pfaden durch künstliche neuronale Netzwerke garantiert keine hängenden neuronalen Einheiten und lineare Komplexität in Raum und Zeit für sowohl Inferenz als auch Training. Ein Erzeugen der Pfade vor dem Training führt zu künstlichen neuronalen Netzwerken, die von Grund auf spärlich sind. Der Aufbau spärlicher künstlicher neuronaler Netzwerke mit linearer Komplexität birgt das Potenzial künstlicher neuronaler Netzwerke ohne Max-Pooling, d.h. ohne Auflösungsreduktion, und damit mehr Präzision.
  • 11 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1100 zum Erzeugen von Pfaden zum Verbinden einer Reihe von neuronalen Einheiten innerhalb eines künstlichen neuronalen Netzwerks gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1100 im Zusammenhang mit einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1100 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. Beispielsweise kann das Verfahren 1100 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit), einem FPGA (Field Programmable Gate Array) oder einem beliebigen Prozessor oder rekonfigurierbaren Prozessor, der die Auswertung und/oder das Training von ANNs durchführen kann, ausgeführt werden. Ferner versteht sich für den Fachmann, dass jedes System, das das Verfahren 1100 durchführt, innerhalb des Schutzumfang und des Rahmens der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1102 gezeigt ist, wird für ein künstliches neuronales Netzwerk eine Anzahl L ∈ ℕ von Schichten ausgewählt.
  • Darüber hinaus werden, wie in Operation 1104 gezeigt ist, für jede Schicht l ∈ {0, ..., L - 1} eine Anzahl nl ∈ ℕ von neuronalen Einheiten al,j ausgewählt, worin 0 ≤ j < nl.
  • Ferner werden, wie in Operation 1106 gezeigt ist, eine Anzahl von Pfaden n und eine L-dimensionale Sequenz xi = (xi,0, ... xi,L-1), die auf [0, 1)L gleichmäßig verteilt ist, ausgewählt.
  • Außerdem ferner sind, wie in Operation 1108 gezeigt ist, für jedes i ∈ {0,..., n - 1} neuronale Einheiten a l , i , l n l  und  a l , i , l n l + 1 n l + 1
    Figure DE102019106996A1_0029
    verbunden, um die Pfade zum Verbinden des Satzes von neuronalen Einheiten innerhalb des künstlichen neuronalen Netzwerks zu erzeugen.
  • Auf diese Weise sind die Pfade, die erzeugt werden, um den Satz neuronaler Einheiten innerhalb des künstlichen neuronalen Netzwerks zu verbinden, zufällige Wege innerhalb des künstlichen neuronalen Netzwerks, die durch eine deterministische Sequenz mit geringer Diskrepanz erzeugt werden.
  • 12 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1200 zum Komprimieren eines künstlichen neuronalen Netzwerks gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1200 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1200 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. Beispielsweise kann das Verfahren 1200 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit), einem FPGA (Field Programmable Gate Array) oder einem beliebigen Prozessor oder rekonfigurierbaren Prozessor, der die Auswertung und/oder das Training von ANNs durchführen kann, ausgeführt werden. Darüber hinaus versteht sich für den Fachmann, dass jedes System, das das Verfahren 1200 durchführt, innerhalb des Schutzumfangs und des Rahmens der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1202 gezeigt ist, wird ein künstliches neuronales Netzwerk (ANN) durch Unterabtastung einer Vielzahl von Kanten, die jeweils eine gewichtete Verbindung innerhalb des ANN darstellen, komprimiert. In einem Ausführungsbeispiel kann das ANN Schichten beinhalten, die vollständig verbunden sind. In einem weiteren Ausführungsbeispiel kann das ANN Schichten beinhalten, die faltend sind. In einem nochmals weiteren Ausführungsbeispiel kann jede der Vielzahl von Kanten durch Durchführen einer oder mehrerer von zufälligen Abtastungen, pseudozufälligen Abtastungen und quasizufälligen Abtastungen unterabgetastet werden.
  • Beispielsweise kann ein ANN eine Vielzahl von Schichten beinhalten, wobei jede Schicht eine Gruppierung von neuronalen Einheiten beinhaltet. Falls das ANN vollständig verbunden ist, ist jede neuronale Einheit innerhalb einer Schicht (über eine Kante) mit allen neuronalen Einheiten einer vorangehenden Schicht sowie allen neuronalen Einheiten einer nachfolgenden Schicht innerhalb des ANN verbunden. Diese Verbindungen werden als Kanten bezeichnet. Auf diese Weise sind alle neuronalen Einheiten eines vollständig verbundenen ANNs entweder direkt oder indirekt miteinander verbunden.
  • Darüber hinaus kann das ANN durch Abtasten (beispielsweise Auswählen usw.) einer Teilmenge aller Verbindungen (Kanten) zwischen den Schichten neuronaler Einheiten komprimiert werden. In einem Ausführungsbeispiel können die Kanten zufällig abgetastet werden. In einem weiteren Ausführungsbeispiel können die Kanten pseudozufällig abgetastet werden. In einem nochmals weiteren Ausführungsbeispiel können die Kanten quasizufällig abgetastet werden. Ergebnisse der Abtastung können ein komprimiertes ANN beinhalten, das eine oder mehrere der abgetasteten Kanten, der den abgetasteten Kanten zugeordneten neuronalen Einheiten und eines oder mehrerer Pfade, die unter Verwendung der einen oder mehreren abgetasteten Kanten erstellt wurden, beinhaltet.
  • 13 veranschaulicht ein Ablaufdiagramm eines Verfahrens 1300 zum Durchführen einer Netzwerknormalisierung gemäß einem Ausführungsbeispiel. Obwohl das Verfahren 1300 im Kontext einer Verarbeitungseinheit beschrieben wird, kann das Verfahren 1300 auch durch ein Programm, eine benutzerdefinierte Schaltungsanordnung oder durch eine Kombination aus einer benutzerdefinierten Schaltungsanordnung und einem Programm durchgeführt werden. Beispielsweise kann das Verfahren 1300 von einer GPU (Grafikverarbeitungseinheit), einer CPU (Zentralverarbeitungseinheit), einem FPGA (Field Programmable Gate Array) oder einem beliebigen Prozessor oder rekonfigurierbaren Prozessor, der die Auswertung und/oder das Training von ANNs durchführen kann, ausgeführt werden. Darüber hinaus versteht sich für den Fachmann, dass jedes System, das das Verfahren 1300 durchführt, innerhalb des Schutzumfangs und des Rahmens der Ausführungsbeispiele der Erfindung liegt.
  • Wie in Operation 1302 gezeigt ist, wird die Netzwerknormalisierung durch Normalisieren einer Vielzahl von Gewichten einer ersten Schicht eines künstlichen neuronalen Netzwerks (ANN) mit einem Linearfaktor durchgeführt. Darüber hinaus wird, wie in Operation 1304 gezeigt ist, die normierte Vielzahl von Gewichten durch Multiplizieren von Gewichten der nachfolgenden Schichten mit dem Linearfaktor auf nachfolgende Schichten des ANN propagiert. Ferner speichert eine letzte Schicht des ANN resultierende Gewichte zum Skalieren von Ausgaben des ANN. In einem Ausführungsbeispiel beinhaltet das ANN eine oder mehrere einer ReLU-Aktivierungsfunktion, einer Leaky ReLU-Aktivierungsfunktion, einer Maxpool-Aktivierungsfunktion und einer Absolutwertaktivierungsfunktion.
  • Während vorstehend verschiedene Ausführungsbeispiele beschrieben wurden, versteht sich, dass diese nur beispielhaft und nicht beschränkend präsentiert wurden. Daher sind die Breite und der Schutzumfang eines bevorzugten Ausführungsbeispiels nicht durch irgendeines der vorstehend beschriebenen beispielhaften Ausführungsbeispiele zu beschränken, sondern nur in Übereinstimmung mit den nachfolgenden Ansprüchen und deren Äquivalenten zu definieren.

Claims (28)

  1. Verfahren, umfassend: Erzeugen eines künstlichen neuronalen Netzwerks, ANN, repräsentiert durch eine Vielzahl von Pfaden, die jeweils zumindest einen Eingang des ANN mit zumindest einem Ausgang des ANN verbinden, wobei jeder der Vielzahl von Pfaden eine Vielzahl von Knoten, die jeweils eine neuronale Einheit innerhalb des ANN repräsentieren, und eine Vielzahl von Kanten, die jeweils eine gewichtete Verbindung innerhalb des ANN repräsentieren, beinhaltet.
  2. Verfahren nach Anspruch 1, wobei jeder der Vielzahl von Pfaden eine Sequenz von Pfaden beinhaltet.
  3. Verfahren nach Anspruch 2, wobei die Sequenz von Pfaden in eine Vielzahl von zusammenhängenden Blöcken partitioniert ist, um eine Reihe von künstlichen neuronalen Netzwerken zu erzeugen, die durch die Sequenz von Pfaden repräsentiert werden.
  4. Verfahren nach einem vorangehenden Ansprüche, wobei jeder der Vielzahl von Pfaden erzeugt wird durch Durchführen eines oder mehrerer eines: Zufälligen Abtastens, pseudozufälligen Abtastens, und quasizufälligen Abtastens.
  5. Verfahren nach Anspruch 4, wobei das pseudozufällige Sampling und das quasizufällige Sampling in Hardware durchgeführt werden.
  6. Verfahren nach einem der vorangehenden Ansprüche, wobei das ANN durch einheitliches Abtasten von Pfaden unter Verwendung eines beliebigen Netzwerkgraphen erzeugt wird.
  7. Verfahren nach einem der vorangehenden Ansprüche, wobei die gewichteten Verbindungen deterministisch initialisiert werden.
  8. Verfahren nach Anspruch 7, wobei die gewichteten Verbindungen mit einer Zahl initialisiert werden, die einen Wert einer Sequenz mit geringer Abweichung oder einen konstanten Wert aufweist.
  9. Verfahren nach einem der vorangehenden Ansprüche, wobei das ANN durch Abtasten der Vielzahl von Pfaden erzeugt wird, die proportional zu einer Vielzahl von gegebenen Gewichten von Schichten des ANN sind.
  10. Verfahren nach Anspruch 9, wobei das Abtasten der Vielzahl von Pfaden ein Unterabtasten von Faltungsgewichten beinhaltet.
  11. Verfahren nach Anspruch 10, wobei Faltungsgewichte einzeln pro Filter oder in ihrer Gesamtheit unterabgetastet werden.
  12. Verfahren nach einem der Ansprüche 9 bis 11, wobei die Vielzahl von Pfaden ausgewählt wird, ohne Multiplikationen mit Gewichten durchzuführen.
  13. Verfahren nach einem der vorangehenden Ansprüche, wobei das ANN durch Abtasten der Vielzahl von Pfaden proportional zu einer Vielzahl von gegebenen Aktivierungen von Schichten des ANN erzeugt wird.
  14. Verfahren nach Anspruch 13, wobei die Vielzahl von Pfaden proportional zu der Vielzahl von gegebenen Aktivierungen während zumindest einem eines Trainings des ANN und einer unter Verwendung des ANN durchgeführten Inferenz ausgewählt wird.
  15. Verfahren nach Anspruch 13 oder 14, ferner umfassend ein Auswählen der Vielzahl von Pfaden in einer Weise proportional zu einem Fehler während der Rückpropagierung.
  16. Verfahren nach einem der Ansprüche 13 bis 15, wobei die Vielzahl von Pfaden ausgewählt wird, ohne Multiplikationen durch Aktivierungen durchzuführen.
  17. Verfahren nach einem der vorangehenden Ansprüche, wobei das ANN durch Abtasten der Vielzahl von Pfaden proportional sowohl zu einer Vielzahl von gegebenen Gewichten als auch zu einer Vielzahl von gegebenen Aktivierungen von Schichten des ANN erzeugt wird.
  18. Verfahren nach einem der vorangehenden Ansprüche, wobei das ANN ein rekurrentes Netzwerk ist.
  19. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend ein Trainieren des ANN unter Verwendung von markierten Eingangstrainingsdaten.
  20. Verfahren nach Anspruch 19, wobei das Training halbüberwacht wird.
  21. Verfahren nach Anspruch 19, wobei das Training unbeaufsichtigt ist.
  22. Verfahren nach einem der vorangehenden Ansprüche, ferner umfassend ein Verarbeiten von Eingangsdaten durch das ANN zum Erzeugen von Ausgangsdaten, wobei die Eingangsdaten eines oder mehrere von Bilddaten, Textdaten, Audiodaten und Videodaten, Zufallszahlen, Pseudozufallszahlen oder Quasizufallszahlen beinhalten, und die Ausgangsdaten eines oder mehrere einer Klassifizierung, einer Kategorisierung, einer Regression, einer Funktionsapproximation, einer Wahrscheinlichkeit und Abtastungen von Daten in Übereinstimmung mit einer gelernten Verteilung beinhalten.
  23. Verfahren, umfassend: Komprimieren eines künstlichen neuronalen Netzwerks (ANN) durch Unterabtasten einer Vielzahl von Kanten, die jeweils eine gewichtete Verbindung innerhalb des ANN repräsentieren.
  24. Verfahren nach Anspruch 23, wobei Schichten des ANN vollständig verbunden sind.
  25. Verfahren nach Anspruch 23 oder 24, wobei Schichten des ANN faltend sind.
  26. Verfahren nach einem der Ansprüche 23 bis 25, wobei jede der Vielzahl von Kanten unterabgetastet wird durch Ausführen eines oder mehrerer eines: Zufälligen Abtastens, pseudozufälligen Abtastens, und quasizufälligen Abtastens.
  27. Verfahren, umfassend: Durchführen der Netzwerknormalisierung durch: Normalisieren einer Vielzahl von Gewichten einer ersten Schicht eines künstlichen neuronalen Netzwerks (ANN) mit einem Linearfaktor; und Propagieren der normierten Vielzahl von Gewichten auf aufeinanderfolgende Schichten des ANN durch Multiplizieren von Gewichten der aufeinanderfolgenden Schichten mit dem Linearfaktor; wobei eine letzte Schicht des ANN resultierende Gewichte speichert, um die Ausgaben des ANN zu skalieren.
  28. Verfahren nach Anspruch 27, wobei das ANN eine oder mehrere einer ReLU-Aktivierungsfunktion, einer Leaky ReLU-Aktivierungsfunktion, einer Maxpool-Aktivierungsfunktion und einer Absolutwert-Aktivierungsfunktion beinhaltet.
DE102019106996.3A 2018-03-26 2019-03-19 Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks Pending DE102019106996A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862648263P 2018-03-26 2018-03-26
US62/648,263 2018-03-26
US16/352,596 2019-03-13
US16/352,596 US11507846B2 (en) 2018-03-26 2019-03-13 Representing a neural network utilizing paths within the network to improve a performance of the neural network

Publications (1)

Publication Number Publication Date
DE102019106996A1 true DE102019106996A1 (de) 2019-09-26

Family

ID=67847998

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019106996.3A Pending DE102019106996A1 (de) 2018-03-26 2019-03-19 Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks

Country Status (2)

Country Link
US (1) US11972354B2 (de)
DE (1) DE102019106996A1 (de)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112036445A (zh) * 2020-08-06 2020-12-04 中国人民解放军战略支援部队信息工程大学 基于神经张量网络的跨社交网络用户身份识别方法
DE102020100565A1 (de) 2020-01-13 2021-07-15 Aixtron Se Verfahren zum Abscheiden von Schichten
US20220172074A1 (en) * 2020-11-30 2022-06-02 Industrial Technology Research Institute Verification system and verification method for neural network accelerator hardware

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836635B2 (en) 2019-05-31 2023-12-05 Apple Inc. Mutable parameters for machine learning models during runtime
US11687789B2 (en) * 2019-05-31 2023-06-27 Apple Inc. Decomposition of machine learning operations
US20240135166A1 (en) * 2022-10-20 2024-04-25 International Business Machines Corporation Dnn training algorithm with dynamically computed zero-reference

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE503270C2 (sv) 1994-08-22 1996-04-29 Harry Wexell Kvarn, förfarande för tillverkning av bentransplantationsmaterial och användning av kvarn för sådan tillverkning
JP2005267407A (ja) * 2004-03-19 2005-09-29 Canon Inc パターン識別方法及びパターン識別装置
TWI559156B (zh) 2010-10-27 2016-11-21 索力托自動化設計股份有限公司 識別稀有事件故障率的方法與系統
US8589855B1 (en) 2012-05-30 2013-11-19 International Business Machines Corporation Machine-learning based datapath extraction
US10467528B2 (en) * 2015-08-11 2019-11-05 Oracle International Corporation Accelerated TR-L-BFGS algorithm for neural network
US10831444B2 (en) 2016-04-04 2020-11-10 Technion Research & Development Foundation Limited Quantized neural network training and inference
CN106650922B (zh) 2016-09-29 2019-05-03 清华大学 硬件神经网络转换方法、计算装置、软硬件协作系统
US11790223B2 (en) 2017-04-07 2023-10-17 Intel Corporation Methods and systems for boosting deep neural networks for deep learning
CA3085897C (en) * 2017-12-13 2023-03-14 Cognizant Technology Solutions U.S. Corporation Evolutionary architectures for evolution of deep neural networks
KR20190099927A (ko) 2018-02-20 2019-08-28 삼성전자주식회사 심층 신경망의 학습을 수행시키는 방법 및 그에 대한 장치
US11507846B2 (en) 2018-03-26 2022-11-22 Nvidia Corporation Representing a neural network utilizing paths within the network to improve a performance of the neural network

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102020100565A1 (de) 2020-01-13 2021-07-15 Aixtron Se Verfahren zum Abscheiden von Schichten
CN112036445A (zh) * 2020-08-06 2020-12-04 中国人民解放军战略支援部队信息工程大学 基于神经张量网络的跨社交网络用户身份识别方法
CN112036445B (zh) * 2020-08-06 2023-05-26 中国人民解放军战略支援部队信息工程大学 基于神经张量网络的跨社交网络用户身份识别方法
US20220172074A1 (en) * 2020-11-30 2022-06-02 Industrial Technology Research Institute Verification system and verification method for neural network accelerator hardware

Also Published As

Publication number Publication date
US11972354B2 (en) 2024-04-30
US20220172072A1 (en) 2022-06-02

Similar Documents

Publication Publication Date Title
US11507846B2 (en) Representing a neural network utilizing paths within the network to improve a performance of the neural network
DE102018121282A1 (de) Differenzierbare rendering-pipeline für inverse graphik
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE102019102279A1 (de) Erzeugung von synthetischen Bildern zum Trainieren eines Neuronal-Netzwerkmodells
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102018132069A1 (de) Äquivariante Orientierungspunkt-Transformation für Orientierungspunkt-Lokalisierung
DE102019106996A1 (de) Darstellen eines neuronalen netzwerks unter verwendung von pfaden innerhalb des netzwerks zum verbessern der leistung des neuronalen netzwerks
DE102019133028A1 (de) Für neuronale netzwerke geeignetes effizientes matrixformat
DE102018009315A1 (de) Verfahren tiefgehenden Lernens zum Trennen von Reflexions- und Übertragungsbildern, die an einer halbreflektierenden Oberfläche in einem Computerbild einer Realweltszene sichtbar sind
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102018113845A1 (de) Systeme und Verfahren zum Trainieren von neuronalen Netzwerken mit dünnbesetzten Daten
DE102019106123A1 (de) Dreidimensionale (3D) Posenschätzung von Seiten einer monokularen Kamera
DE102021120605A1 (de) Effiziente softmax-berechnung
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
CN109936745A (zh) 用于改善原始视频数据的解压的方法和系统
DE102019130311A1 (de) Transponierte schwachbesetzte matrix multipliziert mit dichtbesetzter matrix für ein training neuronaler netzwerke
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102021121109A1 (de) Wiederherstellung dreidimensionaler modelle aus zweidimensionalen bildern
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE112019001978T5 (de) Verbesserung des realismus von szenen mit wasseroberflächen beim rendern
DE102019103319A1 (de) Stochastisches runden von zahlenwerten
DE102018114799A1 (de) Halbüberwachtes lernen zur orientierungspunktlokalisierung
DE102019108733A1 (de) Schnelle mehrskalige Punktwolkenregistrierung mit einer hierarchischen Gauß-Mischung

Legal Events

Date Code Title Description
R012 Request for examination validly filed