DE102022105808A1 - Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen - Google Patents

Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen Download PDF

Info

Publication number
DE102022105808A1
DE102022105808A1 DE102022105808.5A DE102022105808A DE102022105808A1 DE 102022105808 A1 DE102022105808 A1 DE 102022105808A1 DE 102022105808 A DE102022105808 A DE 102022105808A DE 102022105808 A1 DE102022105808 A1 DE 102022105808A1
Authority
DE
Germany
Prior art keywords
input data
mlm
data
values
range
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
DE102022105808.5A
Other languages
English (en)
Inventor
Ashutosh Pandey
Kaiping Li
Vikram Kumar Ramanna
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.)
Cypress Semiconductor Corp
Original Assignee
Cypress Semiconductor 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
Application filed by Cypress Semiconductor Corp filed Critical Cypress Semiconductor Corp
Publication of DE102022105808A1 publication Critical patent/DE102022105808A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/213Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
    • G06F18/2137Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods based on criteria of topology preservation, e.g. multidimensional scaling or self-organising maps
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/243Classification techniques relating to the number of classes
    • G06F18/2431Multiple classes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Medical Informatics (AREA)
  • Image Analysis (AREA)
  • Machine Translation (AREA)

Abstract

Offenbarte Implementierungen beschreiben Verfahren und Systeme zum Durchführen der Verfahren zum Bereitstellen und Ausführen von maschinellen Lernmodellen auf zielspezifischen Rechenplattformen. Optimierungstechniken weisen eine Ausrichtung von Kernel-Operationen auf Hardwareanweisungen einer Zielverarbeitungsvorrichtung auf, eine Reduzierung von Kernel-Dimensionen nahe an Datengrenzen, eine effiziente Wiederverwendung einer kleinen Anzahl von Speicherkomponenten während neuronaler Netzwerkoperationen, eine Laufzeitquantisierung von Daten und neuronalen Netzwerkparametern, und andere Verfahren auf, sind aber nicht darauf beschränkt.

Description

  • Diese Anmeldung beansprucht den Vorteil der vorläufigen US-Anmeldung Nr. 63/160,072 , eingereicht am 12. März 2021, deren gesamter Inhalt hiermit durch Bezugnahme hierin aufgenommen wird.
  • Die vorliegende Offenbarung betrifft eine Bereitstellung einer effizienten rechnerischen Unterstützung von maschinellen Lernmodellen; genauer gesagt, um die Verwendung von Speicher- und Rechenressourcen für eine effiziente Bereitstellung von maschinellen Lernmodellen auf Vorrichtungen mit bestimmten Hardwarekonfigurationen zu optimieren.
  • Edge-Computing ist eine Art von verteiltem Computing in einer cloudbasierten oder serverbasierten Rechenumgebung, wo zumindest ein Teil der Datenverarbeitung näher an einer Peripherie der Umgebung stattfindet, in der das Sammeln oder der Verbrauch von Daten stattfindet. Eine Edge-Vorrichtung kann eine Rechenvorrichtung mit relativ bescheidenen Verarbeitungs- und Speicherkapazitäten sein und kann Zugriff auf lokale Daten (z.B. über verbundene sensorische Vorrichtungen, ein Internet-der-Dinge- oder IoT-Netzwerk) und auf einen Cloud-Dienst haben. Anstatt lokale Daten als Eingabe in den Cloud-Dienst hochzuladen und dann eine Verarbeitungsausgabe von dem Cloud-Dienst zu empfangen, kann die Edge-Vorrichtung in einigen Fällen die lokalen Daten unter Verwendung ihrer eigenen Prozessor- und Speicherressourcen verarbeiten. Auch wenn der Cloud-Dienst in der Lage sein kann, die lokalen Daten schneller zu verarbeiten als die Edge-Vorrichtungen, können Beschränkungen der Netzwerkbandbreite die Vorteile der Cloud-Verarbeitung zunichtemachen. Die lokale Verarbeitung kann zusätzliche Vorteile mit sich bringen, wie etwa eine Reaktion in Echtzeit auf sich ändernde Bedingungen, eine Reduzierung der Rechenlast des Cloud-Dienstes, eine Verringerung des Netzwerkverkehrs, eine Vermeidung einer Gefährdung sensibler Daten durch gegnerische Angriffe, und so weiter.
  • Eine Aufgabe besteht darin, bekannte Ansätze zu verbessern.
  • Diese Aufgabe wird gemäß den Merkmalen der unabhängigen Ansprüche gelöst. Bevorzugte Ausführungsformen sind insbesondere den abhängigen Ansprüchen entnehmbar.
  • Diese hierin vorgeschlagenen Beispiele können insbesondere auf zumindest einer der nachfolgenden Lösungen basieren. Insbesondere können Kombinationen der nachfolgenden Merkmale eingesetzt werden, um ein gewünschtes Ergebnis zu erreichen. Die Merkmale des Verfahrens können mit (einem) beliebigen Merkmal(en) der Vorrichtung oder Systems oder umgekehrt kombiniert werden.
  • Es wird ein Verfahren vorgeschlagen zur Bereitstellung eines trainierten Modells für maschinelles Lernen, MLM, auf einer Edge-Rechenvorrichtung, wobei das Verfahren umfasst:
    • - Erhalten von ersten Eingabedaten in das MLM;
    • - Identifizieren eines ersten Wertebereichs, der den ersten Eingabedaten zugeordnet ist;
    • - Identifizieren eines zweiten Wertebereichs, der einem Ganzzahlenformat zugeordnet ist;
    • - Erhalten von ersten neuskalierten Eingabedaten durch Neuskalieren der ersten Eingabedaten basierend auf einer Abbildung des ersten Wertebereichs auf den zweiten Wertebereich;
    • - Verarbeiten der ersten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM, um erste Zwischendaten zu erhalten;
    • - Erhalten einer ersten Inferenzausgabe des MLM unter Verwendung der ersten Zwischendaten, wobei die erste Inferenzausgabe eine erste Klassifikation der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass der erste Wertebereich einen Minimalwert der ersten Eingabedaten und einen Maximalwert der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass der erste Wertebereich einen vorbestimmten Teil der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass der vorbestimmte Teil der ersten Eingabedaten eine vorbestimmte Menge von Standardabweichungen einer Verteilung der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass das Ganzzahlenformat entweder ein 8-Bit-Ganzzahlenformat oder ein 16-Bit-Ganzzahlenformat ist.
  • Es ist eine Weiterbildung, dass das Ganzzahlenformat ein Format ist, das verwendet wird, um Gewichte der ersten Neuronenschicht des MLM zu speichern.
  • Es ist eine Weiterbildung, dass das Erhalten der ersten Inferenzausgabe des MLM umfasst:
    • - Identifizieren eines dritten Wertebereichs, der den ersten Zwischendaten zugeordnet ist;
    • - Identifizieren eines vierten Wertebereichs, der einem Ganzzahlenformat der ersten Zwischendaten zugeordnet ist;
    • - Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der ersten Zwischendaten basierend auf einer Abbildung des dritten Wertebereichs auf den vierten Wertebereich;
    • - Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung der zweiten Neuronenschicht des MLM, um zweite Zwischendaten zu erhalten;
    • - Erhalten der ersten Inferenzausgabe des MLM unter Verwendung der zweiten Zwischendaten.
  • Es ist eine Weiterbildung, dass die ersten Eingabedaten in einem Fließkommazahlenformat vorliegen.
  • Es ist eine Weiterbildung, dass die ersten Eingabedaten eine digitale Darstellung von Schall umfassen.
  • Es ist eine Weiterbildung, dass das Verfahren ferner umfasst:
    • - Erhalten von zweiten Eingabedaten in das MLM;
    • - Identifizieren eines dritten Wertebereichs, der den zweiten Eingabedaten zugeordnet ist;
    • - Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der zweiten Eingabedaten basierend auf einer Abbildung des dritten Wertebereichs auf den zweiten Wertebereich;
    • - Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM, um zweite Zwischendaten zu erhalten;
    • - Erhalten einer zweiten Inferenzausgabe des MLM unter Verwendung der ersten Zwischendaten, wobei die erste Inferenzausgabe eine zweite Klassifikation der zweiten Eingabedaten umfasst.
  • Ferner wird ein Verfahren angegeben, umfassend:
    • - Erhalten einer Vielzahl von Eingabedaten in ein Modell für maschinelles Lernen, MLM, wobei das MLM Parameter umfasst, die in einem ersten Ganzzahlenformat gespeichert sind;
    • - Verarbeiten der Vielzahl der Eingabedaten, um eine Vielzahl jeweiliger Klassifikationen der Eingabedaten zu erhalten, wobei das Verarbeiten jeder der Vielzahl der Eingabedaten umfasst:
    • - Identifizieren eines Wertebereichs, der entsprechenden Eingabedaten zugeordnet ist;
    • - Erhalten neuskalierter Eingabedaten durch Neuskalieren der entsprechenden Eingabedaten basierend auf einer Abbildung des identifizierten Wertebereichs auf ein zweites Ganzzahlenformat;
    • - Erhalten, unter Verwendung der neuskalierten Eingabedaten, einer Inferenzausgabe, die eine Klassifikation der entsprechenden Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass die in dem ersten Ganzzahlenformat gespeicherten Parameter Gewichte einer ersten Neuronenschicht des MLM umfassen, und das erste Ganzzahlenformat dasselbe ist wie das zweite Ganzzahlenformat.
  • Es ist eine Weiterbildung, dass alle der mehreren Eingabedaten in einem Fließkommazahlenformat vorliegen.
  • Es ist eine Weiterbildung, dass jede der mehreren Eingabedaten eine digitale Darstellung von Schall umfasst.
  • Auch wird ein System vorgeschlagen, umfassend:
    • - ein Speichersubsystem;
    • - eine Verarbeitungsvorrichtung, die kommunikativ mit dem Speichersubsystem gekoppelt ist, wobei die Verarbeitungsvorrichtung eingerichtet ist zum
    • - Erhalten von ersten Eingabedaten in ein Modell für maschinelles Lernen, MLM;
    • - Identifizieren eines ersten Wertebereichs, der den ersten Eingabedaten zugeordnet ist;
    • - Identifizieren eines zweiten Wertebereichs, der einem Ganzzahlenformat zugeordnet ist;
    • - Erhalten von ersten neuskalierten Eingabedaten durch Neuskalieren der ersten Eingabedaten basierend auf einer Abbildung des ersten Wertebereichs auf den zweiten Wertebereich;
    • - Verarbeiten der ersten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM, um erste Zwischendaten zu erhalten;
    • - Erhalten, unter Verwendung der ersten Zwischendaten, einer ersten Inferenzausgabe des MLM, wobei die erste Inferenzausgabe eine erste Klassifikation der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass der erste Wertebereich einen vorbestimmten Teil der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass der vorbestimmte Teil der ersten Eingabedaten eine vorbestimmte Menge von Standardabweichungen einer Verteilung der ersten Eingabedaten umfasst.
  • Es ist eine Weiterbildung, dass das Ganzzahlenformat entweder ein 8-Bit-Ganzzahlenformat oder ein 16-Bit-Ganzzahlenformat ist.
  • Es ist eine Weiterbildung, dass das Ganzzahlenformat ein Format ist, das verwendet wird, um Gewichte der ersten Neuronenschicht des MLM zu speichern.
  • Es ist eine Weiterbildung, dass zum Erhalten der ersten Inferenzausgabe des MLM die Verarbeitungsvorrichtung eingerichtet ist zum
    • - Identifizieren eines dritten Wertebereichs, der den ersten Zwischendaten zugeordnet ist;
    • - Identifizieren eines vierten Wertebereichs, der einem Ganzzahlenformat der ersten Zwischendaten zugeordnet ist;
    • - Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der ersten Zwischendaten basierend auf einer Abbildung des dritten Wertebereichs auf den vierten Wertebereich;
    • - Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung der zweiten Neuronenschicht des MLM, um zweite Zwischendaten zu erhalten;
    • - Erhalten der ersten Inferenzausgabe des MLM unter Verwendung der zweiten Zwischendaten.
  • Die oben beschriebenen Eigenschaften, Merkmale und Vorteile sowie die Art und Weise, wie diese erreicht werden, werden weiter ausgeführt im Zusammenhang mit der folgenden schematischen Beschreibung von Ausführungsbeispielen, die im Zusammenhang mit den Zeichnungen näher erläutert werden. Dabei können zur Übersichtlichkeit gleiche oder gleichwirkende Elemente mit gleichen Bezugszeichen versehen sein.
    • 1A ist ein Blockdiagramm einer beispielhaften Architektur einer Datenverarbeitungsumgebung, die ein Analysieren, Optimieren und Bereitstellen von einem oder mehreren maschinellen Lernmodellen auf zielspezifischen Plattformen unterstützt, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 1B veranschaulicht Operationen einer Optimierungs-Engine und eines Compilers der beispielhaften Architektur von 1A, gemäß einigen Implementierungen der vorliegenden Offenbarung
    • 2 ist eine schematische Darstellung einer Kernel-Reduzierung zur optimierten Ausführung von maschinellen Lernmodellen auf zielspezifischen Plattformen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 3A ist eine schematische Darstellung einer beispielhaften Speichernutzung zur optimierten Ausführung lokaler maschineller Lernoperationen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 3B ist eine schematische Darstellung einer beispielhaften Zwischenausgabe-Scratch-Speichernutzung für eine optimierte Ausführung von maschinellen Lernoperationen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 3C ist eine schematische Darstellung einer anderen beispielhaften Zwischenausgabe-Scratch-Speichernutzung zur optimierten Ausführung von maschinellen Lernoperationen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 4A ist eine schematische Darstellung einer beispielhaften Faktorisierung von maschinellen Lernoperationen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 4B ist eine schematische Darstellung einer beispielhaften Faktorisierung von Operationen einer neuronalen Netzwerkschicht, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 4C ist eine schematische Darstellung einer beispielhaften mehrstufigen Faktorisierung von Operationen einer neuronalen Netzwerkschicht, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 5 ist eine schematische Darstellung einer beispielhaften Quantisierung von maschinellen Lernberechnungen, die auf Edge-Rechenvorrichtungen durchgeführt werden, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 6 ist ein Flussdiagramm eines beispielhaften Verfahrens zur Bereitstellung eines oder mehrerer maschineller Lernmodelle auf zielspezifischen Plattformen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 7 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Ausführen eines oder mehrerer maschineller Lernmodelle auf zielspezifischen Plattformen, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 8 ist ein Flussdiagramm eines beispielhaften Verfahrens zur Optimierung der Speichernutzung während einer Ausführung eines oder mehrerer maschineller Lernmodelle, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 9 ist ein Flussdiagramm eines anderen beispielhaften Verfahrens zur Optimierung der Speichernutzung während einer Ausführung eines oder mehrerer maschineller Lernmodelle, gemäß einigen Implementierungen der vorliegenden Offenbarung.
    • 10 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Durchführen einer Laufzeitquantisierung von Daten, die von einem oder mehreren maschinellen Lernmodellen verarbeitet werden, gemäß einigen Implementierungen der vorliegenden Offenbarung.
  • Moderne Netzwerke können Rechenvorrichtungen mit sehr unterschiedlichen Verarbeitungsfähigkeiten miteinander verbinden. Beispielsweise kann eine technologische (z.B. Fertigungs-) Linie Hunderte (oder mehr) von drahtlosen Sensoren aufweisen, die mit einem lokalen Netzwerk (LAN) und/oder einem persönlichen Netzwerk (PAN) verbunden sind. Gruppen von Sensoren können von einer lokalen (Edge-) Verarbeitungsvorrichtung, wie etwa einer Mikrocontrollereinheit (MCU), bedient werden. Mehrere MCUs können mit einer lokalen Verarbeitungsvorrichtung verbunden sein, z.B. mit einer Workstation, die wiederum mit einem Unternehmensrechenzentrum und/oder einem Cloud-Dienst kommunizieren kann, der von einer Super-Computing-Einrichtung unterstützt wird. In einigen Fällen können eine oder mehrere Verarbeitungsvorrichtungen in dieser Verarbeitungshierarchie maschinelle Lernalgorithmen ausführen, z.B. als Teil einer Umgebungsüberwachung, Qualitätskontrolle von Eingabematerialien, Qualitätskontrolle von Produktionsergebnissen, und so weiter. Modelle für maschinelles Lernen (MLMs) können auf einer Art von Rechenvorrichtungen (z.B. Hochleistungscomputern) entwickelt und trainiert werden, aber auf einer unterschiedlichen Art von Rechenvorrichtungen (z.B. MCUs mit geringem Stromverbrauch) eingesetzt werden.
  • Eine Edge-Vorrichtung kann eine begrenzte Speichermenge zum Speichern trainierter MLMs und einen Prozessor mit begrenzter Geschwindigkeit zum Ausführen gespeicherter MLMs aufweisen. Ein trainiertes MLM, wie etwa ein neuronales Netz (NN), kann eine große Anzahl von Neuronen aufweisen, die in Schichten angeordnet sind, wobei jedes Neuron einem Satz von Gewichten und einem Bias zugeordnet ist. Gewichte und Bias eines NN können zusammen mit den Eingabedaten, Zwischendaten (Ausgaben verschiedener Neuronenschichten), Ausgabedaten und dergleichen im Speicher gespeichert werden. Der Prozessor einer Edge-Vorrichtung kann in der Lage sein, eine begrenzte Anzahl von Threads und Operationen pro Zeiteinheit auszuführen. Infolgedessen kann die Ausführung eines auf einer High-End-Verarbeitungsvorrichtung trainierten NN suboptimal sein, wenn es auf einem Edge-Vorrichtung ausgeführt wird.
  • Aspekte und Implementierungen der vorliegenden Offenbarung behandeln diese und andere Einschränkungen der bestehenden Technologie, indem Systeme und Verfahren ermöglicht werden, die den Einsatz von maschinellen Lernmodellen auf Verarbeitungsvorrichtungen mit spezifischen Rechenressourcen erleichtern, einschließlich, aber nicht beschränkt auf Edge-Vorrichtungen. Der Kürze halber wird eine Bereitstellungsplattform hierin oft als Edge-Vorrichtung bezeichnet, aber es versteht sich, dass verschiedene hierin offenbarte Implementierungen und Optimierungstechniken auf Computern verwendet werden können, die über erhebliche Verarbeitungs- und Speicherressourcen verfügen, einschließlich Server-Rechenvorrichtungen, Cloud-Rechenvorrichtungen und dergleichen. Offenbarte Implementierungen ermöglichen den Einsatz von MLMs auf vorrichtungsspezifischen Zielplattformen. Offenbarte Implementierungen umfassen eine Optimierungs-Engine (OE), die eine Architektur eines einzusetzenden NN analysiert, hierin als ein NN-Graph bezeichnet, eine optimierte Art und Weise bestimmt, in der das NN unter Verwendung vorrichtungsspezifischer Rechenressourcen ausgeführt werden soll, und ausführbare Dateien für die Bereitstellung des NN auf der Zielplattform erstellt. In einigen Implementierungen kann die OE die ausführbaren Dateien im Hinblick auf verschiedene hierin beschriebene Optimierungen auf niedriger Ebene erstellen.
  • In einem Fall können die Optimierungen auf niedriger Ebene Optimierungen von Berechnungszyklen aufweisen. Beispielsweise kann die OE eine plattformspezifische Befehlssatzarchitektur (ISA) identifizieren, die vektorisierte Anweisungen (VIs) aufweisen kann, die von einem Prozessor (z.B., MCU) der Edge-Vorrichtung unterstützt werden, und verschiedene NN-Kerne (Filter) so modifizieren, dass sie eine Größe haben, die der Größe von VIs entspricht. Wenn beispielsweise ein erster Kernel eine Größe hat, die kleiner ist als die Größe der VIs, kann der erste Kernel aufgefüllt werden (z.B. mit Nullen), um die ISA der Edge-Vorrichtung zu nutzen. Wenn ein zweiter Kernel eine Größe hat, die die Größe der VIs überschreitet, kann der zweite Kernel auf ähnliche Weise zwischen zwei (oder mehr) VIs aufgeteilt werden, wobei in einem (oder mehreren) der geteilten Kernel je nach Bedarf Fülldaten hinzugefügt werden, um den zweiten Kernel in eine ganze Zahl von VIs einzupassen. In einigen Fällen, z.B. wenn der letzte geteilte Kernel nur wenige Operationen hat, kann die OE das Auffüllen des letzten geteilten Kernels nicht durchführen, falls dies mehr Zyklen erfordern würde, als zum Berechnen des nicht aufgefüllten Kernels benötigt werden. Die Optimierung von Berechnungszyklen kann ferner ein Reduzieren der Größe von Kerneln aufweisen, wobei die Kernel mit Eingaben einer reduzierten Anzahl von Eingabewerten arbeiten. Beispielsweise kann ein Kernel, der nahe einer Grenze des NN-Graphen arbeitet, für schnellere Berechnungen in einen partiellen Kernel transformiert werden.
  • In einem anderen Fall kann die Optimierung auf niedriger Ebene eine Optimierung der Speichernutzung aufweisen. Beispielsweise kann ein Teil des Speichers zugewiesen werden zum Speichern von Zwischenausgaben von NN-Schichten und kann ferner in einen ersten Teil und einen zweiten Teil aufgeteilt werden. Ein erster Teil kann Zwischenausgaben einer ersten Schicht, einer dritten Schicht und anderer ungeradzahliger Schichten des NN speichern. Ein zweiter Teil kann Zwischenausgaben einer zweiten Schicht, einer vierten Schicht und anderer geradzahliger Schichten des NN speichern. Wenn sich die Verarbeitung zu einer Schicht einer anderen Parität bewegt (z.B. von ungerade zu gerade und zurück zu ungerade), werden Zwischenausgaben in einem entsprechenden (ersten oder zweiten) Teil gespeichert, während der andere Teil (zweiter oder erster) als Eingabedaten verwendet wird. Als weiteres Beispiel kann ein einzelner Teil des Speichers verwendet werden, der groß genug ist, um Zwischenausgaben von zwei aufeinanderfolgenden NN-Schichten zu speichern, wobei unterschiedliche Bereiche des Teils Ausgaben der zwei NN-Schichten speichern und mit Daten von nachfolgenden Schichten überschrieben werden, wenn Ausgaben der früheren Runden nicht mehr benötigt werden. Als weiteres Beispiel können Ausgaben von Schichten, die eine lokale Verarbeitung implementieren, z.B. Pooling-Schichten, Faltungsschichten, in Teilen des Speichers gespeichert werden, die überschrieben werden, sobald ein Eingabeelement an einer relevanten Stelle verarbeitet wurde.
  • In einem anderen Fall kann ein NN, das zu groß ist, um in den verfügbaren Cache-Speicher zu passen, in eine Anzahl kleinerer Bereiche partitioniert werden, wobei NN-Parameter (z.B. Gewichte, Bias, Aktivierungsfunktionen) eines bestimmten Bereichs, die für die Bereichsverarbeitung in den Cache-Speicher geladen wurden, der durch NN-Parameter des nächsten Bereichs ersetzt werden (z.B. auf kontinuierliche Basis), sobald bestimmte NN-Parameter der aktuellen Bereiche nicht länger benötigt werden.
  • In einem anderen Fall können einige der Optimierungsoperationen während der Echtzeit-Inferenzverarbeitung auf der Edge-Vorrichtung durchgeführt werden. Beispielsweise kann eine Quantisierung (z.B. Neuskalierung auf ganzzahlige Werte) von Eingabedaten und NN-Parametern für eine effiziente Verarbeitung dynamisch implementiert werden, z.B. als Reaktion auf eine Echtzeiterfassung von Statistiken für die Eingabedaten. Verschiedene andere Optimierungstechniken und Variationen der obigen Techniken werden hierin offenbart.
  • 1A ist ein Blockdiagramm einer beispielhaften Architektur einer Datenverarbeitungsumgebung 100, die ein Analysieren, Optimieren und Bereitstellen von einem oder mehreren maschinellen Lernmodellen auf zielspezifischen Plattformen unterstützt, gemäß einigen Implementierungen der vorliegenden Offenbarung. Wie in 1A gezeigt, kann die Datenverarbeitungsumgebung 100 eine Host-Rechenvorrichtung 102 aufweisen. Die Host-Rechenvorrichtung 102 ist als ein einzelner Block dargestellt, aber es versteht sich, dass beliebige Komponenten der Host-Rechenvorrichtung 102 auf einer beliebigen Anzahl von Rechenvorrichtung und/oder in einer Cloud implementiert werden (oder diese gemeinsam nutzen) können. Die Host-Rechenvorrichtung 102 kann ein Desktop-Computer, ein Laptop-Computer, ein Smartphone, ein Tablet-Computer, ein Server, eine Rechenvorrichtung, die auf einen entfernten Server zugreift, eine Rechenvorrichtung, die eine virtualisierte Rechenumgebung verwendet, eine Spielkonsole, ein tragbarer Computer, ein Smart-TV und so weiter sein. Ein Benutzer der Host-Rechenvorrichtung 102 kann einen lokalen oder entfernten Zugriff (z.B. über ein Netzwerk) auf die Host-Rechenvorrichtung 102 haben. Die Host-Rechenvorrichtung 102 kann (in 1A nicht gezeigt) eine beliebige Anzahl von zentralen Verarbeitungseinheiten (CPUs) und grafische Verarbeitungseinheiten (GPUs) haben, einschließlich virtueller CPUs und/oder virtueller GPUs, oder beliebige andere geeignete Verarbeitungsvorrichtungen, die dazu in der Lage sind, die hierin beschriebenen Techniken auszuführen. Die Host-Rechenvorrichtung 102 kann ferner (in 1A nicht gezeigt) eine beliebige Anzahl von Speichervorrichtungen, Netzwerkcontrollern, Peripherievorrichtungen und dergleichen aufweisen. Peripheriegeräte können verschiedene Erfassungsvorrichtungen, Fotokameras, Videokameras, Mikrofone, Scanner oder beliebige andere Vorrichtungen zur Datenaufnahme aufweisen. Die Rechenumgebung 100 kann auch ein Edge-Rechenvorrichtung 130 aufweisen, das interaktiv mit der Host-Rechenvorrichtung 102 gekoppelt ist, z.B. über ein Netzwerk 140 oder eine direkte Verbindung 141. Die Edge-Rechenvorrichtung 130 kann einen oder mehrere MLM implementieren, die durch die Host-Rechenvorrichtung 102 optimiert werden können.
  • In einigen Implementierungen kann eine Host-Rechenvorrichtung 102 eine Anzahl von Engines und Komponenten für eine effiziente MLM-Optimierung und -Bereitstellung umfassen. Die Interaktion der Host-Rechenvorrichtung 102 mit der Edge-Rechenvorrichtung 130 kann durch eine optimierende Anwendungsprogrammierschnittstelle (API) 104 erleichtert werden, die das Sammeln von Edge-Vorrichtungs-Metriken 106, die der Edge-Rechenvorrichtung 130 zugeordnet sind, erleichtern kann. Gesammelte Edge-Vorrichtungs-Metriken 106 können verschiedene Daten aufweisen, die Rechenressourcen der Edge-Rechenvorrichtung 130 charakterisieren, wie etwa eine Anzahl und Typ(en) von CPU(s) 132, Taktrate(n) von CPU(s), Anzahl von Hardware-Threads pro CPU 132, Größe von Datenoperanden, die durch verschiedene Hardware-Threads der CPU 132 verarbeitet werden können, Größe des verfügbaren Speichers 134, Cache (Hochgeschwindigkeitsspeicher) 136, und dergleichen. In einigen Implementierungen können Verarbeitungs- und Speicherressourcen der Edge-Rechenvorrichtung 130 auf zwei oder mehr getrennte Vorrichtungen verteilt sein, die über ein lokales Netzwerk (nicht gezeigt) verbunden sind. In solchen Fällen können die Edge-Vorrichtungs-Metriken 106 ferner die Netzwerkbandbreite des lokalen Netzwerks, Durchsatz, Latenz, Paketverlustrate, und so weiter umfassen.
  • Die Optimierungs-Engine (OE) 110 kann einen Graph-Decodierer 112, einen Zyklus-Optimierer 114, einen Speicher-Optimierer 118 und einen Kernel-Optimierer 116 aufweisen. Die OE 110 kann Zugriff auf Edge-Vorrichtungs-Metriken 106 und auf eine oder mehrere trainierte MLMs 108 haben. Wie weiter unten ausführlicher beschrieben wird, kann die Ausgabe der OE 110 von einem Compiler 120 verwendet werden, um einen ausführbaren Code und Bibliotheken 122 für eine zielspezifische Ausführung eines MLM 108 zu erstellen. Die OE kann auch Edge-Vorrichtungs-Konfigurationsdatei(en) 124 erzeugen. 1B veranschaulicht Operationen 101 der OE 110 und des Compilers 120 der beispielhaften Architektur 100 von 1A, gemäß einigen Implementierungen der vorliegenden Offenbarung. Wie in 1B gezeigt wird, kann der Graph-Decodierer 112, wenn ein Modell 108-1 für den Einsatz auf der Edge-Rechenvorrichtung 130 evaluiert wird, auf die Architektur und die Parameter des Modells 108-1 (z.B. eines der trainierten MLMs 108) zugreifen. Beispielsweise kann der Graph-Decodierer 112 eine Anzahl von neuronalen Schichten und eine Anzahl von Neuronen (Rechenknoten) des Modells 108-1, eine Anzahl von eingehenden/ausgehenden neuronalen Verbindungen (Kanten) für jeden Knoten, jeder Kante zugeordnete Gewichte, Bias, und bestimmen Aktivierungsfunktionen, die jedem Knoten zugeordnet sind, und so weiter, bestimmen. Eine Schicht sollte als jede Menge von Operationen verstanden werden, die parallel ausgeführt werden können. Beispielsweise können Operationen, die an einem Satz von Eingabedaten von verschiedenen Neuronen durchgeführt werden (die z.B. aufgeteilt auf mehrere Neuronen sind), eine Schicht darstellen, Operationen, die an der Ausgabe dieser Schicht durchgeführt werden, können eine andere Schicht darstellen, und so weiter. Ein Neuron kann einen beliebigen Satz von Berechnungen darstellen, der zwei oder mehr Eingabezahlen nimmt und eine Ausgabezahl erzeugt (z.B. über Gewichtsmultiplikation, Bias-Addition, Anwendung einer Aktivierungsfunktion usw.).
  • Die Graph-Informationen können an den Graph-Decodierer 112 in einer beliebigen geeigneten Form geliefert werden, z.B. als eine oder mehrere Tabellen, ein oder mehrere Graphen, Arrays von Werten, und dergleichen, oder eine beliebige Kombination davon. In einigen Implementierungen können NN-Graph-Informationen eine Matrix M̂ von NN Parametern aufweisen, wobei die Matrix M̂ Matrixelemente Mjk. aufweist. Die Dimension der Matrix M̂ kann N × N sein, wobei N die Gesamtzahl von Knoten in dem Netzwerk ist. Ein nicht-diagonales Matrixelement Mjk ungleich Null kann ein Gewicht einer neuronalen Verbindung angeben, die von Knoten j zu Knoten k gerichtet ist. Entsprechend kann das transponierte NN-Matrixelement Mkj ein Gewicht einer inversen Verbindung von Knoten k zu Knoten j anzeigen. Neuronale Vorwärtskopplungs-Netze können daher mindestens N(N - 1)/2 Nullmatrixelemente haben. Das Diagonalmatrixelement Mjj kann einen Bias-Wert bj angeben, der dem Knoten j zugeordnet ist. Beispielsweise kann ein in 1B gezeigtes neuronales Netz mit 5 Knoten mit der folgenden Matrix M̂ beschrieben werden: M ^ = ( b 1 0 0 1.5 0 5.2 0 b 2 0 2.0 0.7 0 0 0 b 3 4.2 0.09 0 0 0 0 b 4 0 3.7 0 0 0 0 b 5 1.1 0 0 0 0 0 b 6 ) ,
    Figure DE102022105808A1_0001
    wobei nicht-diagonale Elemente der j-ten Spalte Gewichte von Kanten darstellen, die in den j-ten Knoten führen, und nicht-diagonale Elemente der j-ten Zeile Gewichte von Kanten auflisten, die den jeweiligen Knoten verlassen. In einigen Implementierungen kann eine spärliche Darstellung der Matrix M̂ verwendet werden, in der nur Gewichte ungleich Null und Bias aufgelistet sind. Zusätzlich können NN-Graph-Informationen Auflistungen von Aktivierungsfunktionen jedes Modus und, falls anwendbar, Parameter der Aktivierungsfunktionen umfassen.
  • Basierend auf der Matrix M̂ von NN Parametern kann der Graph-Decodierer 112 eine Anzahl von Berechnungszyklen auswerten, die durchzuführen sind, um Inferenzdaten durch das Modell 108-1 zu verarbeiten und die Datenflüsse durch das Modell 108-1 zu schätzen. Wenn beispielsweise eine Zwischenausgabe des Knotens j Oj ist, kann der k-te Knoten eine Operation ausführen, um eine Zwischenausgabe zu erzeugen, die gleich Ok = Σj≠k Oj · Mjk + bk ist. Basierend auf der Topologie des Modells 108-1, wie es z.B. durch eine Matrix von NN-Parametern dargestellt wird, kann die Graph-Decodierung 112 eine Anzahl von Berechnungszyklen identifizieren, die erforderlich sein können, um jede Schicht von Neuronenverbindungen zu verarbeiten. Die Graph-Decodierung 112 kann auch eine Anzahl von Speicheroperationen (Lese- und Schreiboperation) identifizieren, die benötigt werden, um alle Zwischenneuronenausgaben und den Typ von Speicheradressen zum Speichern von Informationen (z.B. Fließkomma, Integer, einfache Genauigkeit, doppelte Genauigkeit, und dergleichen) zu verarbeiten.
  • Die Graph-Decodierung 112 kann ferner bestimmen, z.B. basierend auf der Matrix von NN-Parametern oder beliebigen anderen geeigneten NN-Graph-Informationen, dass zumindest einige der Operationen des Modells 108-1 unter Verwendung eines oder mehrerer Kernel (Filter) durchzuführen sind. Genauer gesagt kann ein Kernel eine Untermatrix m̂ von Gewichten (der größeren Matrix M̂) mit fester Größe sein, die wiederholt (z.B. gleitend) auf mehrere Ausgaben einer Neuronenschicht (oder Eingabedaten) angewendet wird. Mehrere Kernel können verwendet werden, um Kontextinformationen zu sammeln, die von verschiedenen Neuronenschichten ausgegeben werden. Beispielsweise kann ein zur Objekterkennung verwendetes MLM mehrere Eingabepixel verarbeiten, wobei jedem Pixel ein Intensitätswert (z.B. Schwarz/Weiß) und/oder mehrere Farbintensitätswerte (z.B. Rot/Grün/Blau) zugeordnet sind. Eine erste Neuronenschicht kann einen 3 × 3-Kernel (oder 5 × 5-Kernel oder jeden anderen anwendbaren Kernel) anwenden, um eine gewichtete Faltung von Eingabepixelwerten zu berechnen und Kontextinformationen für einen bestimmten Ort der Eingabepixelwerte zu sammeln. In einigen Implementierungen können mehrere Kernel innerhalb einer gegebenen Schicht von Neuronen angewendet werden, wobei einer oder mehrere Kernel unterschiedlicher Größe Faltungen für unterschiedliche Orte der Eingabedaten berechnen. Beispielsweise kann ein erster Kernel mit Dimensionen von 4 × 4 Pixeln und ein zweiter Kernel mit Dimensionen von 8 × 8 Pixeln auf Intensitätspixelwerte angewendet werden. Zusätzliche Kernel (z.B. 16 × 16-Pixel-Kernel) können auf Ähnliche Weise auf Farbpixelwerte angewendet werden, und so weiter. Nachfolgende (z.B. zweite, dritte usw.) Schichten von Neuronen können zusätzliche Kerne aufweisen, die auf Ausgaben von vorherigen Neuronenschichten (hier als Zwischenausgaben bezeichnet) operieren. Während einige Kernel Dimensionen von Zwischenausgaben beibehalten können, können andere Kernel die Dimension der Zwischenausgaben reduzieren (oder erhöhen). Beispielsweise kann ein maximaler (oder ein durchschnittlicher) Pooling-Kernel mit einer Dimension von k × l einen maximalen (oder einen durchschnittlichen) Wert an einer Stelle von k × l-Werten bestimmen, die von der vorhergehenden Schicht ausgegeben werden. Der Graph-Decodierer 112 kann alle solche Kernel identifizieren und eine Anzahl von Rechenressourcen (Prozessorzyklen, Speichergröße und eine Anzahl von Speicheroperationen) auswerten, die benötigt werden, um eine Instanz (z.B. Verarbeitung eines Satzes von Inferenzdaten) des Modells 108-1 auszuführen.
  • Wie in 1B gezeigt wird, kann die Ausgabe der Graph-Decodierung 112 von einem Zyklus-Optimierer 114 verwendet werden, der ein Format von Hardwareanweisungen identifizieren kann, bei denen ein Prozessor oder Mikrocontroller (Beschleuniger, Coprozessor usw.) der Edge-Rechenvorrichtung 130 in der Lage sein kann, diese auszuführen. Beispielsweise kann der Zyklus-Optimierer 114 identifizieren, dass die CPU 132 in der Lage ist, vektorisierte Anweisungen (VIs) auszuführen, z.B. als Teil der darauf implementierten Befehlssatzarchitektur (ISA). VIs oder beliebige andere geeignete Hardwareanweisungen, die von der CPU 132 erkannt werden, können eine schnelle parallele Verarbeitung von Operationen des Modells 108-1, z.B. eine SIMD-Verarbeitung (Single Instruction, Multiple Data), ermöglichen. Im Gegensatz zu einem herkömmlichen Compiler, der ein Datenformat (z.B. 8-Bit-Zeichen, 16-Bit-Integer, 32-Bit einfache Genauigkeit, 64-Bit doppelte Genauigkeit, usw.) vorschreibt, das von einer Anwendung, die das Modells 108-1 verwendet, bestimmt wird, kann der Zyklus-Optimierer 114 erzwingen, dass das Datenformat mit dem Format von VIs (oder beliebigen anderen geeigneten Hardwareanweisungen), die von der CPU 132 erkannt werden, abgeglichen wird.
  • Insbesondere kann der Compiler 120 unter Verwendung des Zyklus-Optimierers 114 einen Code 122-1 zur Ausführung des Modells 108-1 auf der Edge-Rechenvorrichtung 130 generieren und kann ferner eine oder mehrere Bibliotheksdateien 122-2 generieren, mit Speichernutzung in Code 122-1 und Bibliotheksdateien 122-2, die mit ISA der CPU 132 ausgerichtet sind. Beispielsweise können Hardwareanweisungen, die eine Parallelverarbeitung auf der CPU 132 implementieren, auf 32-Bit-Eingaben (Operanden) arbeiten. Der Code 122-1 kann daher Eingabedaten-Startspeicheradressen zuweisen, wie sie von Hardwareanweisungen der CPU 132 verwendet werden. Wenn beispielsweise Eingabedaten in einem 8-Bit-Zeichenformat vorliegen, kann der Code 122-1 dazu konfiguriert werden, Datenstartadressen an eine 32-Bit-Adresse, die von VIs der CPU 132 erkannt wird, zuzuweisen.
  • In einigen Implementierungen kann der Zyklus-Optimierer 114 den Compiler 120 veranlassen, ein Format einiger oder aller Eingabedaten zu ändern. Beispielsweise können Eingabedaten in einem CHW-Format (z.B. Farbe, Höhe, Breite) vorliegen, wohingegen die Hardwareanweisung durch die CPU 132 Daten in einem modifizierten HWC-Format (Höhe, Breite, Farbe) effizienter handhaben kann.
  • In ähnlicher Weise kann der Compiler 120 unter Verwendung des Kernel-Optimierers 116 die Ausführung eines Modells 108-1 optimieren, das darauf trainiert ist, Kernel mit Dimensionen zu verwenden, die möglicherweise nicht mit einer Anzahl von Hardware-Threads der CPU 132 ausgerichtet sind. Beispielsweise können Hardware-Anweisungen der CPU 132 (oder jeder anderen geeigneten Verarbeitungseinheit, die nicht in 1A gezeigt ist, wie etwa eine Grafikverarbeitungseinheit oder GPU) es ermöglichen, dass sechzehn Multiplikationen parallel durchgeführt werden. Ein erster von dem Modell 108-1 eingesetzter Kernel kann ein 4 × 3-Kernel sein. Die Ausführung des ersten Kernels kann daher ein Berechnen von zwölf Multiplikationen umfassen, die Teile von Eingabedaten (oder Zwischenausgaben aus vorherigen Neuronenschichten) und zwölf Gewichte des ersten Kernels umfassen. Um die Kernel-Dimension mit den Dimensionen der Parallelverarbeitung der CPU 132 abzugleichen, kann der Code 122-1 Auffülloperationen aufweisen, um den 4 × 3-Kernel in einen 4 × 4-Kernel zu transformieren, z.B. durch Hinzufügen einer weiteren Spalte mit Nullgewichten zu dem Kernel. Als weiteres Beispiel kann ein vom Modell 108-1 eingesetzter zweiter Kernel ein 6 × 4 -Kernel sein, der vierundzwanzig Multiplikationen hat. Um mit den Hardwareanweisungen der CPU 132 ausgerichtet zu sein, kann der Kernel auf die 8 × 4-Größe aufgefüllt werden (z.B. durch Hinzufügen von zwei Zeilen mit Nullgewichten) und eine Anwendung des Kernels über zwei aufeinanderfolgende Hardwareanweisungen implementieren, die jeweils sechzehn parallele Multiplikationen durchführen.
  • In einigen Fällen kann der Compiler 120, anstatt Kernel auf höhere Dimensionen aufzufüllen, den Kernel-Optimierer 116 verwenden, um die Dimensionen einiger Kernel zu reduzieren, z.B. Instanzen von Kerneln, die nahe einer Kante des Modells 108 angewendet werden, wie nachstehend in Verbindung mit 2 ausführlicher beschrieben wird.
  • Unter Verwendung des Speicher-Optimierers 118 kann der Compiler 120 die Speichernutzung während der Ausführung des Modells 108-1 auf der Edge-Rechenvorrichtung 130 optimieren, wie nachstehend in Verbindung mit den 3A-C und 4 ausführlicher beschrieben wird. Speicheroptimierungen können umfassen (aber sind nicht beschränkt auf): Zuweisen von Speicherpuffern mit einer Größe, die ausreichend ist, um Ausgaben von einer oder zwei aufeinanderfolgenden Neuronenschichten zu speichern, Wiederverwenden von Teilen des Speichers, sobald darin gespeicherte Werte verarbeitet wurden, Partitionieren eines NN in eine Anzahl kleinerer Bereichen, mit den zugeordneten NN-Parametern, die sequentiell in den Cache 136 geladen werden, und so weiter.
  • Wie in 1B gezeigt wird, kann die Ausgabe des Compilers 120 einen Code 122-1 und eine Bibliothek 122-2 aufweisen. In einigen Implementierungen kann eine Bibliothek 122-2 eine Sammlung von Routinen und Daten sein, die nicht plattformspezifisch ist. Die von der OE 110 generierte(n) Konfigurationsdatei(en) 124 können Einstellungen und Vorlagen aufweisen, die für die Edge-Rechenvorrichtung 130 spezifisch sind. Die Konfigurationsdatei(en) 124 können bestimmen, wie die Ausführung des Codes 122-1 auf der Edge-Rechenvorrichtung 130 zu implementieren ist. Wieder unter Bezugnahme auf 1A, können der Code 122-1, die Bibliothek 122-2 und die Konfigurationsdatei(en) 124 an die Edge-Rechenvorrichtung 130 zur Ausführung durch die Inferenz-Engine 150 weitergeleitet werden. In einigen Implementierungen kann die Konfigurationsdatei 124 für einen Benutzer (z.B. einen Entwickler) über die Optimierungs-API 104 verfügbar gemacht werden. Die Optimierungs-API 104 kann Konfigurationen des kompilierten Modells 108 in einem Format darstellen, das für den Benutzer zugänglich ist. In einigen Fällen kann die Optimierungs-API 104 anzeigen, dass die Ausführung des Modells 108-1 auf der Edge-Rechenvorrichtung 130 suboptimal sein kann. Der Benutzer kann dann die Architektur des Modells 108-1 ändern und/oder ein erneutes Training des Modells 108-1 einleiten. Beispielsweise kann die Optimierungs-API 104 dem Benutzer anzeigen, dass ein NN mit einer bestimmten Anzahl von verborgenen Schichten nicht in der Lage sein wird, eine Objekterkennung in Echtzeit durchzuführen. Als Reaktion darauf kann der Benutzer (Entwickler) die Anzahl von verborgenen Schichten (und/oder eine Anzahl von Neuronen in verschiedenen Schichten) reduzieren und das Modell 108-1 in der neuen Konfiguration neu trainieren.
  • Das Training (und erneute Training) der Modelle 108 kann von einem Trainingsserver 162 durchgeführt werden. In einigen Implementierungen kann der Trainingsserver 162 ein Teil der Host-Rechenvorrichtung 102 sein. In anderen Implementierungen kann der Trainingsserver 162 direkt oder über das Netzwerk 140 kommunikativ mit der Host-Rechenvorrichtung 102 gekoppelt sein. Der Trainingsserver 162 kann ein Rack Mount-Server, ein Router-Computer, ein Personal Computer, ein Laptop-Computer, ein Tablet-Computer, ein Desktop-Computer, ein Mediencenter, oder eine beliebige Kombination davon sein (und/oder umfassen). Der Trainingsserver 162 kann eine Trainings-Engine 160 aufweisen. Während des Trainings (oder erneuten Trainings) kann die Trainings-Engine 160 eines oder mehrere MLMs 108 generieren und konfigurieren. Die MLMs 108 können Regressionsalgorithmen, Entscheidungsbäume, Support-Vektor-Engines, K-Means-Clustering-Modelle, neuronale Netze oder andere maschinelle Lernalgorithmen aufweisen. Neuronale Netzwerk-MLMs können faltende, rekurrente, vollständig verbundene, Long-Short-Term-Memory-Modelle, Hopfield-, Boltzmann- oder beliebige andere Arten von neuronalen Netzen aufweisen. Das Generieren von MLMs kann das Einrichten eines MLM-Typs (z.B. eines neuronalen Netzes), einer Architektur, einer Anzahl von Schichten von Neuronen, Arten von Verbindungen zwischen den Schichten (z.B. vollständig verbunden, faltend, entfaltend usw.), einer Anzahl von Knoten innerhalb jeder Schicht, Arten von Aktivierungsfunktionen, die in verschiedenen Schichten/Knoten des Netzwerks verwendet werden, Arten von Verlustfunktionen, die beim Training des Netzwerks verwendet werden, und so weiter, aufweisen. Das Generieren von MLMs 108 kann das Einstellen (z.B. zufällig) von Anfangsparametern (Gewichte, Bias) verschiedener Knoten der Netzwerke aufweisen. Die generierten MLMs können durch die Trainings-Engine 160 unter Verwendung von Trainingsdaten trainiert werden, die Trainingseingabe(n) 165 und entsprechende Zielausgabe(n) 167 aufweisen können. Die Zuordnung von Trainingseingabe(n) 165 zu korrekten Zielausgabe(n) 167 kann durch Abbildungsdaten 166 identifiziert werden. Während des Trainings der MLMs 108 kann die Trainings-Engine 160 Muster in Trainingseingabe(n) 165 basierend auf gewünschten Zielausgabe(n) 167 identifizieren und die jeweiligen MLMs trainieren, um die gewünschten Aufgaben auszuführen. Die trainierten MLMs 108 können dann unter Verwendung zusätzlicher Trainings-(Validierungs-)Eingabe-/Zielausgabezuordnungen validiert werden, die die MLMs 108 zuvor nicht gesehen haben.
  • Trainierte (und neu trainierte) MLMs 108 können in einem Repository 142 für trainierte Modelle, auf den die Host-Rechenvorrichtung 102 und die Edge-Rechenvorrichtung 130 zugreifen können, gespeichert werden. In einigen Implementierungen kann, nachdem die Optimierung und Erstellung des Modells 108 für die Edge-Rechenvorrichtung 130 durchgeführt wurde (z.B. durch die Host-Rechenvorrichtung 102), der entsprechende Code 122-1, die Bibliotheken 122-2 und die Konfigurationsdatei(en) 124 in einem Repository für trainierte Modelle gespeichert und bei oder vor dem Ausführen eines oder mehrerer MLMs 108 durch die Edge-Rechenvorrichtung 130 aufgerufen (z.B. heruntergeladen) werden. Trainierte Modellparameter (Gewichte und Bias) können in ein anderes Datenformat (z.B. quantisiertes Festkommaformat) umgewandelt oder transformiert werden und können innerhalb der Edge-Rechenvorrichtung 130 gespeichert werden. Das Repository 142 für trainierte Modelle kann ein persistenter Speicher sein, der trainierte MLMs 108 speichern kann. Das Repository 142 für trainierte Modelle kann von einer oder mehreren Speichervorrichtungen, wie etwa einem Hauptspeicher, Magnet- oder optische Speicherplatten, Bänder oder Festplatten, NAS, SAN, und so weiter, gehostet werden. Obwohl es als getrennt von dem Trainingsserver 162 dargestellt wird, kann das Repository 142 für trainierte Modelle in einigen Implementierungen ein Teil des Trainingsservers 162 sein. In einigen Implementierungen kann das Repository 142 für trainierte Modelle ein an das Netzwerk angeschlossener Dateiserver sein, während in anderen Implementierungen das Repository 142 für trainierte Modelle eine andere Art von dauerhaftem Speicher sein kann, wie etwa eine objektorientierte Datenbank, eine relationale Datenbank usw., die von einer Servermaschine oder einer oder mehreren anderen Maschinen, auf die der Trainingsserver 162 über das Netzwerk 140 zugreifen kann, gehostet werden kann.
  • In einem beispielhaften Bereitstellungsszenario können eines oder mehrere MLMs 108 (z.B. das Modell 108-1) auf dem Trainingsserver 162 trainiert und der Host-Rechenvorrichtung 102 zur Optimierung und Erstellung für eine zielspezifische Plattform, z.B. für die Edge-Rechenvorrichtung 130, bereitgestellt werden. Trainierte Modellparameter, Code 122-1, Bibliotheken 122-2 und Konfigurationsdatei(en) 124 können dann der Edge-Rechenvorrichtung 130 bereitgestellt werden. Eine Inferenz-Engine 150 auf der Edge-Rechenvorrichtung 130 kann auf Konfigurationsdatei(en) 124 zugreifen und die Ausführung des Codes 122-1 unter Verwendung von Konfigurationseinstellungen in der/den Konfigurationsdatei(en) 124 konfigurieren. Konfigurationseinstellungen können eine Größe der bei der Ausführung des Modells 108 zu verwendenden Speicheradresse, eine Größe der durch die CPU 132 zu verarbeitenden Datenoperanden, Kemelmodifikationen (z.B. Auffüllen und/oder Verkleinerung), Handhabung von Speicherspeicher- und Leseoperationen, und verschiedene andere Optimierungen, die gemäß der vorliegenden Offenbarung arbeiten werden, spezifizieren. Einige der Optimierungen, z.B. die Laufzeitdatenoptimierung (Quantisierung) und Kemelmodifikation, können durch die Laufzeit-OE 138 durchgeführt werden, die auf der Edge-Rechenvorrichtung 130 arbeitet. Das eingesetzte und optimierte Modell 108-1 kann von der Inferenz-Engine 150 verwendet werden, um anwendungsspezifische (Inferenz-) Daten 152 zu verarbeiten und eine Inferenzausgabe 154 zu erzeugen. Die Inferenzausgabe 154 kann eine beliebige Klassifikationsausgabe des Modells 108 aufweisen, z.B. eine Objekterkennungsausgabe, eine Objekttypklassifikationsausgabe, eine Stimmenerkennungsausgabe, eine Spracherkennungsausgabe, eine technologische Steuerungsausgabe, eine Sicherheitsausgabe, eine Datenverarbeitungsausgabe oder jede andere anwendbare Ausgabe.
  • Verschiedene Optimierungen, die beim Bereitstellen und Ausführen des Modells 108-1 verwendet werden können, werden nun weiter unten in Bezug auf die 2-4 ausführlich beschrieben. Obwohl aus Gründen der Spezifität die Optimierungen so beschrieben werden können, dass sie auf der Edge-Rechenvorrichtung 130 durchgeführt werden, können dieselben oder ähnliche Techniken auch zur Optimierung der MLM-Bereitstellung auf beliebigen anderen Rechenvorrichtungen verwendet werden, einschließlich Workstations, Servern, Cloud-Computern und jeder anderen Datenverarbeitungsvorrichtungen.
  • 2 ist eine schematische Darstellung einer Kernelreduktion 200 zur optimierten Ausführung von maschinellen Lernmodellen auf zielspezifischen Plattformen gemäß einigen Implementierungen der vorliegenden Offenbarung. Eingabedaten in eine Schicht eines NN-Modells werden schematisch über ein Datengitter 202 dargestellt, wobei jede Zelle des Gitters ein Datenelement darstellt. Obwohl aus Gründen der Spezifität ein rechteckiges Gitter gezeigt ist, kann jedes andere Gitter von Eingabedaten ähnlich verarbeitet werden. Die Eingabedaten können sich auf einen Teil von Daten 152 beziehen, die in ein MLM-Modell eingegeben werden, oder auf einen beliebigen Teil von Zwischenausgaben vorangehender Schichten von Neuronen. Das Datengitter 202 kann mit dem Kernel 204 verarbeitet werden, der durch eine Matrix von Elementen Kjk dargestellt werden kann. Gezeigt ist eine 3 × 3-Matrix, aber es kann auch Matrix mit beliebigen anderen Dimensionen verwendet werden, abhängig von spezifischen Einstellungen einer bestimmten Neuronenschicht. Wenn der Kernel 204 auf eine Stelle des Datengitters 202 angewendet wird, werden die Kernel-Elemente Kjk auf die jeweiligen Elemente des Datengitters 202 angewendet (z.B. damit multipliziert) und aufaddiert, und die Summe wird verwendet, um (vorbehaltlich des Hinzufügens eines Bias und einer Aktivierungsfunktion) ein Element der Ausgabe der Neuronenschicht zu erzeugen. In einigen Fällen, z.B. wenn die Dimension der Schichtausgabe die gleiche ist wie die Dimension der Schichteingabe, kann der Kernel 204 an einer Stelle des Gitters 202 angewendet werden, dessen Größe kleiner als die Größe des Kernels 204 ist, z.B. an einem Punkt in der Nähe einer Grenze des Datengitters 202. Ein herkömmlicher Weg zum Anwenden des Kernels 204 auf eine Umgebung eines Randgitterelements 206 besteht darin, die Eingabedaten zu modifizieren, z.B. durch Auffüllen mit Nullen, indem die Eingabedaten über das Datengitter 202 hinaus erweitert werden, und dann den Kernel 204 auf das erweiterte Gitter anzuwenden. Ein derartiges Auffüllen erhöht eine Anzahl von Multiplikationen, die durchgeführt werden müssen, um den Kernel 204 anzuwenden, und erhöht ferner eine Speichermenge, die zum Speichern des Datengitters 202 benötigt wird.
  • In einigen Implementierungen dieser Offenbarung wird eine Kernel-Reduktion für Instanzen einer Kernel-Anwendung in der Nähe einer Grenze (z.B. einer Kante oder Ecke) des Eingabedatengitters (oder eines beliebiges Zwischendatengitters) durchgeführt. Genauer gesagt kann, wenn der Kernel 204 in den Großteil des Gitters 202 angewendet wird, z.B. in der Nähe des Gitterelements 208, wo der Kernel 204 keine Grenze des Gitters 202 kreuzt, ein vollständiger (unmodifizierter) Kernel 210 verwendet werden. Wenn der Kernel 204 die Grenze überschreitet, kann die Größe des Kernels reduziert werden, um die Notwendigkeit zum Speichern von Fülldaten zu vermeiden und die entsprechenden Multiplikationsoperationen zu eliminieren. Wenn beispielsweise der Kernel 204 in der Nähe eines Kantenelements 212 angewendet wird, kann ein partieller (Kanten-) Kernel 214 mit eliminierter Spalte ganz rechts auf die entsprechende Stelle des Kantenelements 212 angewendet werden. Auf ähnliche Weise kann, wenn der Kernel 204 in der Nähe eines Eckelements 216 angewendet wird, ein partieller (Eck-)Kernel 218, mit der Spalte ganz rechts und der obersten Zeile eliminiert, auf die entsprechende Stelle des Eckelements 216 angewendet werden. Eine solche KernelModifikation verringert eine Anzahl von Rechenzyklen, die zur Verarbeitung des Datengitter 202 verwendet werden, und die Größe von Speicherregistern (z.B. Cache oder interner SRAM), die zum Speichern des Datengitters 202 benötigt werden. Die beschriebenen Techniken können auf Gitter einer beliebigen Topologie (z.B. anders als rechteckig) und Kernel beliebiger Größe und Art angewendet werden, z.B. auf Faltungskernel, entfaltende Kernel, Pooling-Kernel, und so weiter. In einigen Implementierungen kann die Kernel-Reduktion durch den Kernel-Optimierer 116 und den Compiler 120 in den Code 122-1 integriert werden. In einigen Implementierungen kann die Kernel-Reduktion durch die Laufzeit-OE 138 durchgeführt werden, die die Größe einer Daten-Stelle verfolgt, auf die der a Kernel angewendet wird, und einen entsprechenden Teil des Kernels zur Anwendung auf die Daten auswählt. In einigen Implementierungen können alle reduzierten (z.B. Kanten- und/oder Ecken-) Kernel zuerst als Stapel unter Verwendung einer reduzierten Anzahl von Verarbeitungsoperationen angewendet werden, gefolgt von der Anwendung vollständiger Kernel auf den Rest des Eingabedatengitters.
  • 3A ist eine schematische Darstellung einer beispielhaften Speichernutzung 300 zur optimierten Ausführung von lokalen maschinellen Lernoperationen gemäß einigen Implementierungen der vorliegenden Offenbarung. Operationen von Faltungs- und Pooling-Schichten weisen häufig Kernel-Multiplikationen auf, die in ihrer Beschaffenheit lokal sind. Wenn beispielsweise ein 3 × 3 -Faltungskernel angewendet wird, kann ein oberes linkes Element eines Eingabedatengitters die ersten zwei Ausgabeelemente der oberen Zeile und die ersten zwei Ausgaben der zweiten Zeile beeinflussen, aber andere Ausgabeelemente nicht beeinflussen. Ein herkömmlicher Weg zum Speichern von Daten während der NN-Verarbeitung besteht darin, einen Speicherpuffer einer Dateneingabe in eine NN-Schicht und einen separaten Puffer eine Ausgabe der NN-Schicht zuzuweisen. Eine Vor-Ort-Datenspeicherung, wie sie in 3A veranschaulicht wird, vermeidet die Notwendigkeit des zweiten Puffers und überschreibt Speicheradressen, sobald ein Eingabeelement nicht länger in anderen Operationen verwendet werden soll. In 3A ist beispielsweise eine beispielhafte maximale Pooling-Operation gezeigt, die unter Verwendung eines 2 × 2-Pooling-Kernels durchgeführt wird. Es wird ein Bereich 302 des Eingabedatengitters gezeigt. Ein Ergebnis der Verarbeitung eines n × m Eingabedatenrasters kann ein Ausgabedatenraster mit einer Größe von n/2 × m/2 sein. Das Eingabedatenraster kann zeilenweise in einem Puffer 304 gespeichert werden. Wenn der obere linke 2 × 2-Bereich des Eingabedatenrasters verarbeitet wird und der Maximalwert 6 durch einen Prozessor bestimmt wird, werden die Elemente 1, 5, 6, und 2 des oberen linken Teils für nachfolgende Operationen nicht mehr benötigt. Der Prozessor kann daher eines der Eingabeelemente (z.B. das erste Element) mit dem neuen Wert 6 in der ersten Speicheradresse überschreiben, während der Rest der Speicheradressen (die derzeit die Werte 5, 6 und 2 speichern) als verfügbar markiert wird, um neue Daten (z.B. durch Setzen eines „frei“-Attributs für jede der jeweiligen Adressen) oder die Ausgaben der aktuellen Pooling-Operation (z.B. in sequentieller Weise) zu akzeptieren. Der Prozess kann für den Rest des Datengitters fortgesetzt werden, bis der Puffer 304 (n/2) × (m/2) Elemente des Ausgabedatengitters speichert. Als Ergebnis werden sowohl die Eingabeals auch die Ausgabedatenelemente in demselben Puffer gespeichert, und der Speicherbedarf der NN-Ausführung wird erheblich reduziert. Obwohl in 3A die maximale Pooling-Operation gezeigt wird, können die gleichen oder ähnliche Techniken in durchschnittlichen Pooling-Operationen, Faltungsoperationen oder beliebigen anderen Operationen verwendet werden, in denen ein gegebenes Eingabeelement eine begrenzte Anzahl von Ausgabeelementen anstatt alle Ausgabeelemente (wie es bei einer vollständig verbundene Schicht sein würde) beeinflusst.
  • 3B ist eine schematische Darstellung einer beispielhaften Zwischenausgabe-Arbeitsspeichernutzung 310 für eine optimierte Ausführung von maschinellen Lernoperationen gemäß einigen Implementierungen der vorliegenden Offenbarung. In NNs, in denen unterschiedliche Speicherkomponenten oder Abschnitte (z.B. Puffer) verwendet werden, um Ausgaben verschiedener Neuronenschichten zu speichern, kann eine Anzahl von Puffern minimiert werden, indem getrennte Puffer alternierenden Neuronenschichten zugewiesen werden. Beispielsweise kann ein erster Puffer 311 zugewiesen werden, um Eingaben (oder Ausgaben von) ungeradzahligen Neuronenschichten (z.B. den Schichten 313 und 315) zu halten, und ein zweiter Puffer 312 kann zugewiesen werden, um Eingaben (oder Ausgaben von) geraden Neuronenschichten (z.B. den Schichten 314 und 316) zu halten. Die Puffer müssen nicht die gleiche Größe haben. In einigen Implementierungen kann die Größe des ersten Puffers 311 einer maximalen Größe der ungeradzahligen Neuronenschichten entsprechen, und die Größe des zweiten Puffers 312 kann einer maximalen Größe der geraden Neuronenschichten entsprechen. In einigen Implementierungen, in denen eine Neuronenschicht, z.B. Schicht 315, Eingaben nicht nur von der vorhergehenden Schicht 314, sondern auch von früheren Schichten, z.B. Schicht 313, annehmen kann, können mehr als zwei Puffer verwendet werden; beispielsweise kann ein dritter Puffer verwendet werden, um Ausgaben zu halten, die von weiteren stromabwärtigen Schichten verwendet werden. Ebenso kann der dritte Puffer überschrieben werden, sobald die in dem dritten Puffer gespeicherten Elemente nicht länger als Eingaben in die verbleibenden Knotenoperationen verwendet werden sollen.
  • 3C ist eine schematische Darstellung einer anderen beispielhaften Zwischenausgabe-Scratch-Speichernutzung 320 zur optimierten Ausführung von maschinellen Lernoperationen gemäß einigen Implementierungen der vorliegenden Offenbarung. Wie in 3C gezeigt wird, kann in einigen Fällen ein einzelner Speicherpuffer 321 verwendet werden, um Ausgaben von zwei aufeinanderfolgenden Neuronenschichten zu speichern. Beispielsweise kann eine Ausgabe der Schicht 331 im Puffer 321 gespeichert werden, wie durch die durchgehende Schattierung sowohl der Neuronen der Schicht 331 als auch der jeweiligen Adressen (Quadrate) des Puffers 321 angezeigt wird. Während der Operationen der Schicht 332 können die Ausgabedaten in einem weißen Teil des Puffers 321 gespeichert werden, der durch die Datenausgabe der Schicht 331 nicht besetzt ist. (eine gepunktete Schattierung zeigt Neuronen der Schicht 332 und ihre im Puffer 321 gespeicherten Ausgaben an.) Als Ergebnis sind die Ausgaben der Schicht 331 verfügbar, bis alle Operationen der Schicht 332 abgeschlossen sind. Während der Operationen der Schicht 333 werden die Ausgabedaten der Schicht 331 nicht länger benötigt und können mit den Ausgabedaten der Schicht 333 (die mit einer schachbrettartigen Schattierung gezeigt wird) überschrieben werden. Wenn die Ausgabe der Schicht 332 größer als die Ausgabe der Schicht 331 ist, können einige zusätzliche Adressen des Puffers 321 verwendet werden, um die Ausgabe der Schicht 332 zu speichern, wie schematisch mit einem schachbrettartigen Quadrat dargestellt wird, das eine der zuvor verfügbaren (weißen) Adressen belegt. Als Ergebnis sind die Ausgaben der Schicht 332 verfügbar, bis alle Operationen der Schicht 333 abgeschlossen sind. In ähnlicher Weise kann die Operation zusätzlicher Schichten (z.B. Schicht 334) durchgeführt werden, wobei neue Daten über einen Teil des Puffers 321 geschrieben werden, der verwendet wird, um frühere Ausgabedaten zu speichern (z.B. die Ausgabe der Schicht 334, angegeben durch weiße Knoten und weiße Quadrate, die die Ausgabe der Schicht 332 überschreibt). In einigen Implementierungen kann die Größe des Puffers 321 ausreichend groß gewählt werden, um Ausgaben von zwei aufeinanderfolgenden Schichten zu speichern, die eine kombinierte maximale Ausgabe haben, im Vergleich zu anderen Paaren aufeinanderfolgender Schichten. Beispielsweise haben die Schichten 333 und 334, wie in 3C dargestellt, eine maximale kombinierte Ausgabe, die ebenfalls gleich der Größe des Puffers 321 ist.
  • 4A ist eine schematische Darstellung einer beispielhaften Faktorisierung 400 von maschinellen Lernoperationen gemäß einigen Implementierungen der vorliegenden Offenbarung. In einigen Fällen können ein Modell 108 und/oder Eingabedaten in das Modell 108 zu groß sein, um in den Hochgeschwindigkeits-Cache 136 (oder eine beliebigen anderen internen Speicher) der Edge-Rechenvorrichtung 130 zu passen. Ein herkömmlicher Ansatz zur Durchführung von MLM-Operationen in besteht solchen Fällen darin, Netzwerkparameter (z.B. Gewichte und Bias) zu laden und/oder Daten aus dem Speicher 134 in den Cache 136 einzugeben, bevor Berechnungen durchgeführt werden, bei denen solche Parameter und/oder Eingabedaten verwendet werden. Parameter und/oder Eingabedaten werden dann in der nächsten Iteration überschrieben, bis alle Operationen abgeschlossen sind. Da dieselben Daten in mehreren Berechnungen verwendet werden können, ist es nicht ungewöhnlich, dieselben Parameter und/oder Eingabedaten mehrmals in den Cache 136 zu laden. Wie in 4A schematisch gezeigt wird, kann in einigen Implementierungen der vorliegenden Offenbarung ein MLM in zwei oder mehr Abschnitte einer solchen Größe faktorisiert werden, dass die Netzwerkparameter und/oder Eingabedaten jedes Abschnitts in den Cache 136 passen.
  • Beispielsweise wird eine Eingabe in eine Neuronenschicht (z.B. eine erste Neuronenschicht oder eine beliebige verborgene Neuronenschicht) als ein Eingabedatengitter 402 dargestellt, wobei jede Zelle ein Datenelement darstellt. Obwohl aus Gründen der Spezifität ein rechteckiges Gitter dargestellt ist, kann jedes andere Gitter von Eingabedaten ähnlich verarbeitet werden. Ein Neuron 404 der nächsten Neuronenschicht nimmt eine Anzahl von Werten aus dem Datengitter 402 (wie mit drei ankommenden durchgezogenen Pfeilen dargestellt wird), wendet Gewichte Wij, Bias b, und eine Aktivierungsfunktion (nicht dargestellt) an, und erzeugt einen Wert, der durch den ausgehenden Pfeil innerhalb eines Ausgabedatengitters 406 angezeigt wird. In einigen Implementierungen der vorliegenden Offenbarung werden Neuronenoperationen des MLM in zwei oder mehr Abschnitte A, B, C usw. faktorisiert. Beispielsweise können Netzwerkparameter in den Cache-Speicher hineinpassen, aber die Eingabedaten können zu groß sein, um sie sofort zu laden. In solchen Fällen können die Eingabedaten in kleinere Abschnitte faktorisiert werden, die in den Cache-Speicher geladen werden können. Der Abschnitt A kann Operationen aufweisen, die Eingabedaten A 410 verwenden, um Ausgabedaten A 411 zu berechnen (z.B. einen ersten Teil des Ausgabedatengitters 406), und Abschnitt(e) B (C, usw.) können Operationen aufweisen, die Eingabedaten B 420 verwenden, um Ausgabedaten B 421 (Ausgabedaten C 431, usw.) zu berechnen. Nachdem die Eingabedaten A 410 in den Cache 136 geladen wurden und die Ausgabedaten A 411 berechnet wurden, können die Eingabedaten B 420 (und in ähnlicher Weise, Eingabedaten in nachfolgende Abschnitte) in den Cache 136 geladen werden, und die Ausgabedaten B 421 können berechnet werden. In einigen Implementierungen können Netzwerkparameter des Neurons 404 (und anderer Neuronen, die nicht explizit gezeigt sind) ähnlich in Abschnitte partitioniert und zusammen mit den Eingaben der entsprechenden Abschnitte in den Cache 136 geladen werden.
  • In einigen Implementierungen können die Eingabedaten A 410 und die Eingabedaten B 420 eine teilweise Überlappung (z.B. in den Fällen von faltendenden Neuronenschichten) oder sogar eine vollständige Überlappung (z.B. in den Fällen von vollständig verbundenen Neuronenschichten) aufweisen. In einigen Fällen können vollständig verbundene Schichten in nicht überlappende Abschnitte faktorisiert werden. In solchen Fällen können die überlappenden Segmente von Eingabedaten (dargestellt als schattierte Streifen, die von den Eingabedaten A 410 und den Eingabedaten B 420 und den Eingabedaten B 420 und den Eingabedaten C 430 gemeinsam genutzt werden) in dem Cache 136 gehalten werden, wenn ein neuer Teil der Eingabedaten geladen wird. Dementsprechend können nicht überlappende Datensegmente überschrieben werden. Obwohl 4A die Segmentierung einer einzelnen Schicht von Neuronen Teile, die in den Cache passen, veranschaulicht, können in einigen Implementierungen sich die Teile über mehrere Schichten von Neuronen erstrecken.
  • 4B ist eine schematische Darstellung einer beispielhaften Faktorisierung 450 von Operationen einer neuronalen Netzwerkschicht gemäß einigen Implementierungen der vorliegenden Offenbarung. Der Konkretheit halber ist in 4B die Neuronenoperation einer vollständig verbundenen Schicht gezeigt, aber es sollte verstanden werden, dass alle Arten von Neuronenschichten (z.B. faltende Neuronenschichten, entfaltenden Neuronenschichten, rekurrente Neuronenschichten usw.) auf ähnliche Weise faktorisiert werden können. Jedes von N Neuronen einer Eingabeschicht kann einen Eingabewert Ij (wobei 1 ≤ j ≤ N) empfangen. Eine Ausgabe der Eingabeschicht kann M Ausgabewerte Oi aufweisen (wobei 1 ≤ i ≤ M). Jeder Ausgabewert Oi kann erhalten werden, indem die Eingabewerte (z.B. einige der Eingabewerte, oder alle Eingabewerte in den Fällen von vollständig verbundenen Schichten) als gewichtete Summe unter Verwendung von Gewichten Wij addiert werden und auch ein möglicher Bias-Wert Bi hinzugefügt wird: O i = B i + j = 1 N W i j I j .
    Figure DE102022105808A1_0002
  • In einigen Implementierungen ist der Wert Oi ein Zwischenwert, auf den eine Aktivierungsfunktion angewendet wird, um den endgültigen Ausgabewert zu erhalten. Um alle diese Berechnungen durchzuführen und M Ausgabewerte zu bestimmen, muss eine Verarbeitungsvorrichtung möglicherweise N × M Gewichte, M Bias und N Eingabewerte laden. Selbst für neuronale Netze von bescheidener Größe kann N mehrere tausend (oder mehr) und M mehrere hundert (oder mehr) betragen. Das gleichzeitige Laden aller N × M + M + N Werte aus dem Systemspeicher in den Hochgeschwindigkeits-Cache (z.B. Puffer) kann eine Kapazität des Cache überschreiten. 4B zeigt eine effiziente Faktorisierung des Ladens und Verarbeitens von Daten in den Fällen, in denen ein Puffer in der Lage ist, mindestens N Werte zu speichern. Der Eingabepuffer 452 kann alle N Eingabewerte {Ij} speichern, die während Zyklus 1 von Operationen mit direktem Speicherzugriff (DMA) aus einem Systemspeicher 460 geladen werden. In ähnlicher Weise können während Zyklus 1 N Werte {W1j} der Gewichte (die den ersten Ausgabewert O1 bestimmen) aus dem Systemspeicher 460 in den Gewichtspuffer 454 geladen werden. Zusätzlich können während Zyklus 1 M Pufferwerte {Bi} aus dem Systemspeicher 460 in den Ausgabepuffer 456 geladen werden, der schließlich die Ausgabewerte {Oi} speichert.
  • Nachdem die oben beschriebenen Ladeoperationen durchgeführt wurden, kann eine Rechenlogik (z.B. eine Arithmetik-Logik-Einheit oder ALU) 458 die Berechnung des Zyklus 1 durchführen: O 1 = B 1 + j = 1 N W 1 j I j ,
    Figure DE102022105808A1_0003
    woraufhin der (nicht mehr benötigte) Wert B1 durch den berechneten Ausgabewert O1 ersetzt werden kann. (Die Berechnungen können auch das Anwenden einer Aktivierungsfunktion auf O1 aufweisen.) In einigen Implementierungen kann das System mindestens zwei Gewichtspuffer 454 haben. Während die Berechnungen von Zyklus 1 durchgeführt werden und Gewichte {W1j} aus einem der Gewichtspuffer 454, z.B. dem Gewichtspuffer 454-A, abgerufen werden, kann der nächste Satz von Gewichten {W2j} aus dem Systemspeicher in den anderen Gewichtspuffer 454, z.B. den Gewichtspuffer 454-B, geladen werden. In ähnlicher Weise werden während eines beliebigen Zyklus i N Gewichte {Wij} in den Gewichtspuffer, der aktuell nicht verwendet wird, geladen, um Daten an die Berechnungslogik 458 bereitzustellen. Beispielsweise kann der Gewichtspuffer 454-A während ungerader Zyklen Gewichte empfangen, während der Gewichtspuffer 454-B zuvor empfangene Gewichte an die Berechnungslogik 458 bereitstellt. In ähnlicher Weise kann der Gewichtspuffer 454-B während gerader Zyklen Gewichte empfangen, während der Gewichtspuffer 454-A der Berechnungslogik 458 zuvor empfangene Gewichte bereitstellt. Während des Zyklus i wird eine Speicheradresse (in dem Ausgabepuffer 456), die den Bias-Wert Bi speichert, als ein Akkumulator für Oi verwendet und speichert den endgültigen Ausgabewert Oi nach Beendigung des Zyklus i. Nach M Zyklen werden alle M Werte {Oi} in dem Ausgabepuffer 456 gespeichert.
  • Als Ergebnis können nur drei Puffer (ein Eingabepuffer 452 und zwei Gewichtspuffer 454, die in der Lage sind, insgesamt 3N Werte zu speichern) benötigt werden, um alle Berechnungen der ersten Schicht durchzuführen. In einigen Implementierungen kann ein zweiter Eingabepuffer verwendet werden, um den nächsten Satz der Eingabewerte {Ij} (z.B. den nächsten Teil der Inferenzdaten) zu akzeptieren, während der aktuelle Satz der Eingabewerte verarbeitet wird.
  • In einigen Implementierungen können die Eingabepuffer 452 und die Gewichtspuffer 454 möglicherweise nicht in der Lage sein, N Werte zu speichern (z.B. N Eingabewerte {Ij} oder N Gewichtswerte von {W1j}, {W2j} ... usw.). 4C ist eine schematische Darstellung einer beispielhaften mehrstufigen Faktorisierung 451 von Operationen einer neuronalen Netzwerkschicht gemäß einigen Implementierungen der vorliegenden Offenbarung. Wenn die Eingabepuffer 452 und die Gewichtspuffer 454 in der Lage sind, N/n Werte zu speichern, wobei n = n = 2,4,8 oder eine beliebige andere Zahl ist, kann die Faktorisierung in n Stufen durchgeführt werden, wie in 4C dargestellt wird. Genauer gesagt kann jeder Ausgabewert Oi unter Verwendung der folgenden Darstellung erhalten werden: O i = k = 1 n O i ( k ) ,   O i ( k ) = B i δ 1, k + j = ( k 1 ) N / n + 1 k N / n W i j I j .
    Figure DE102022105808A1_0004
    wobei O i ( k )
    Figure DE102022105808A1_0005
    ein k-ter Teil der i-ten Ausgabe Oi ist (δ1,k ist das Kronecker-Delta). Der Teil O i ( k )
    Figure DE102022105808A1_0006
    der i-ten Ausgabe wird unter Verwendung des k-ten Teils der Eingabewerte berechnet, in 4C als {Ij}(k) bezeichnet, der Werte Ij aufweist, mit j innerhalb des Intervalls (k - 1)N/n + 1 ≤ j ≤ kN/n. Darüber hinaus wird der Teil O i ( k )
    Figure DE102022105808A1_0007
    der i-ten Ausgabe unter Verwendung des k-ten Teils der Gewichte berechnet, in 4C als {Wij}(k) bezeichnet, der Werte Wij, mit j innerhalb des Intervalls (k - 1)N In + 1 ≤ j ≤ kN/n und festem i, aufweist.
  • Die Berechnungen können über zwei Schleifen durchgeführt werden. Die äußere Schleife führt n Stufen durch (nummeriert mit dem Index k), und die innere Schleife führt M Zyklen durch, einen Zyklus für jeden Ausgabewert Oi. Während des Zyklus 1 wird ein Teil {Ij}(1) von N/n Eingabewerten aus dem Systemspeicher in den Eingabepuffer 452 geladen. In ähnlicher Weise wird ein Teil {W1j}(1) von N/n Gewichten, die den ersten Teil O 1 ( 1 )
    Figure DE102022105808A1_0008
    des ersten Ausgabewerts O1 bestimmen, wird aus dem Systemspeicher 460 in den Gewichtspuffer 454 geladen. Zusätzlich können während Zyklus 1 alle M Bias-Werte {Bi} aus dem Systemspeicher 460 in den Ausgabepuffer 456 geladen werden. (Bei Implementierungen, in denen die Anzahl M von Pufferwerten {Bi} die Anzahl übersteigt, die innerhalb eines Zyklus geladen werden kann, kann das Laden von Bias-Werten {Bi} über mehrere Zyklen ausgedehnt werden, z.B. über Zyklus 2, Zyklus 3 usw.) Die Bias-Werte (Bi} dienen somit als Seeds für die jeweiligen Ausgabewerte (Oi}. Die Berechnungslogik 458 kann dann die Berechnung von Zyklus 1 durchführen: O 1 ( 1 ) = B 1 + j = 1 N / n W 1 j I j ,
    Figure DE102022105808A1_0009
    wobei der Teil O 1 ( 1 )
    Figure DE102022105808A1_0010
    den Wert B1 im Ausgabepuffer 456 ersetzt. Die verbleibenden Zyklen 2 bis M der Stufe 1 können ähnlich durchgeführt werden, wobei der Bias-Wert Bi und der erste Teil {Wij}(1) der Gewichte verwendet werden, um den ersten Teil O i ( 1 )
    Figure DE102022105808A1_0011
    des Ausgabewerts Oi zu berechnen.
  • Während nachfolgender Stufen werden zusätzliche Teile der Eingabewerte und die entsprechenden Gewichtungsteile verwendet, um zusätzliche Teile der Ausgabewerte zu berechnen. Beispielsweise wird während des ersten Zyklus der Stufe k (Zyklus (k - 1)M + 1) der k-te Teil der Eingabewerte {Ij}(k) in den Eingabepuffer 452 geladen wird und der k-Teil der Gewichte {W1j}(k) in den Gewichtspuffer 454 geladen wird. Die Berechnungslogik 458 berechnet dann den Teil O 1 ( k )
    Figure DE102022105808A1_0012
    des Ausgabewerts O1 durch Addieren von O 1 ( k )
    Figure DE102022105808A1_0013
    zu dem Akkumulator, der die zuvor berechnete Summe O 1 ( 1 ) + O 1 ( 2 ) + + O 1 ( k 1 )
    Figure DE102022105808A1_0014
     
    Figure DE102022105808A1_0015
    speichert. Während nachfolgender Zyklen der Stufe k werden weitere Teile von Gewichten {Wij}(k) in den Gewichtspuffer 454 geladen, und neue Teile O i ( k )
    Figure DE102022105808A1_0016
    der Ausgabewerte Oi werden berechnet. Nach Abschluss aller n Stufen werden M Endwerte {Oi} im Ausgabepuffer 456 gespeichert.
  • Wie oben in Bezug auf 4B beschrieben, kann das System in einigen Implementierungen mindestens zwei Gewichtspuffer 454 (z.B. den Gewichtspuffer 454-A und den Gewichtspuffer 454-B) aufweisen, und kann ein gestaffeltes Laden von Gewichten in den Gewichtspuffer während aufeinanderfolgender Zyklen durchführen, z.B. kann, während Gewichte {Wij}(k) aus dem Gewichtspuffer 454-A abgerufen werden, der nächste Satz von Gewichten {Wi+1,j}(k) aus dem Systemspeicher 460 in den Gewichtspuffer 454-B geladen werden, und so weiter. Als Ergebnis der beschriebenen Operationen können drei Puffer (ein Eingabepuffer 452 und zwei Gewichtspuffer 454, die insgesamt 3N/n Werte speichern können) ausreichend sein, um alle Berechnungen der ersten Schicht durchzuführen. In einigen Implementierungen kann das System mindestens zwei Eingabepuffer 452 (z.B. die Eingabepuffer 452-A und 452-B) aufweisen, und kann ein gestaffeltes Laden von Eingabewerten in die Eingabepuffer während aufeinanderfolgender Zyklen durchführen. Beispielsweise kann, Eingabewerte {Ij}(k), die zuvor in den Eingabepuffer 452-A geladen wurden, während der k-ten Stufe von der Berechnungslogik 458 verwendet werden, der nächste Satz von Eingabewerten {Ij}(k+1) aus dem Systemspeicher 460 in den Eingabepuffer 454-B geladen werden und, so weiter.
  • Operationen nachfolgender (verborgener und Ausgabe-) Schichten können ähnlich wie die in Verbindung mit 4B und/oder 4C beschriebenen Operationen durchgeführt werden. Beispielsweise kann eine verborgene Schicht eine vollständig verbundene Schicht mit M Eingaben und M Ausgaben sein. Operationen dieser verborgenen Schicht können ähnlich wie die in Verbindung mit 4B beschriebene Operation durchgeführt werden, unter der Voraussetzung, dass M kleiner (oder gleich) der Anzahl von Werten ist, die in einem Puffer (z.B. Gewichtspuffer und/oder Eingabepuffer) gespeichert werden können. In solchen Implementierungen kann eine einstufige Verarbeitung verwendet werden, da alle Eingabewerte {Ij} in die verborgene Schicht während des Zyklus 1 in den Eingabepuffer 452 geladen werden können, und alle Gewichte (Wij) (für ein gegebenes i) während des Zyklus i geladen werden können. Daher kann der gesamte Ausgabewert Oi während des Zyklus i bestimmt werden. Bei diesen Implementierungen, bei denen M größer als die Anzahl von Werten ist, die in einem Puffer gespeichert werden können, z.B. größer als die Anzahl N/n, in der Notation der Beschreibung von 4C, kann die Verarbeitung aller Ausgabewerte {Oj} der verborgenen Schicht unter Verwendung von m = Mn/N Stufen oder m = Mn/N1 Stufen durchgeführt werden, wobei N1 von N verschieden sein kann. (Wenn Mn/N1 nicht ganzzahlig ist, bestimmt die nächste ganz Zahl die Anzahl der Stufen, die zum Ausführen aller Operationen der verborgenen Schicht verwendet werden.)
  • Da die Ausgabewerte {Oi} einer gegebenen Schicht von Neuronen auch die Eingabewerte {Ij} in die nächste Schicht von Neuronen sind, müssen die Eingabewerte in die verborgenen Schichten (und/oder in die letzte Ausgabeschicht des Netzwerks) nicht wieder geladen werden. Wie in Verbindung mit 3B beschrieben, kann nun der Ausgabepuffer 456 (der die Ausgabewerte der vorherigen Schicht speichert) als neuer Eingabepuffer 452 bezeichnet werden, während der Eingabepuffer 452 als neuer Ausgabepuffer 456 bezeichnet werden kann (die Puffer-Austausch-Operation). Der neue Eingabepuffer kann dann mit Bias-Werten {Bi} der nächsten Schicht geseeded werden und als ein Akkumulator für die Ausgabewerte {Oi} der nächsten Schicht verwendet werden.
  • Der Begriff „Zyklus“, wie er hier verwendet wird, sollte als irgendeine Verarbeitungseinheit verstanden werden, z.B. eine Iteration, die aus einer Anzahl von Abruf- und Ausführungsoperationen besteht. Die Bedeutung von „Zyklus“ kann daher implementierungsabhängig sein. Was beispielsweise eine einzelne Abruf- und Ausführungsoperation sein kann, wenn sie auf einer Rechenvorrichtung (z.B. einem speziell entworfenen Hardwarebeschleuniger, einem Server oder einer Workstation) ausgeführt wird, kann auf einer anderen Rechenvorrichtung (z.B. einer Mikrocontrollereinheit) mehrere Operationen erfordern.
  • 5 ist eine schematische Darstellung einer beispielhaften Quantisierung 500 von maschinellen Lernberechnungen, die auf Edge-Rechenvorrichtungen durchgeführt werden, gemäß einigen Implementierungen der vorliegenden Offenbarung. MLMs werden häufig mit Trainingsdaten trainiert, die im Gleitkommaformat (FP) digitalisiert sind, und haben Netzwerkparameter (Gewichte und Bias), die mit FP-Zahlen ähnlich dargestellt werden. Die FP-Darstellung ermöglicht eine sehr hohe Genauigkeit, erfordert jedoch möglicherweise mehr Speicherbandbreite und erhebliche Verarbeitungsressourcen, um eine schnelle Inferenzausführung zu erreichen. Um die Verarbeitungslasten zu reduzieren, können trainierte MLMs einer Reihe von Modifikationen unterzogen werden, wie z.B. einem Aussondern von Neuronen, deren Beiträge entfernt werden (z.B. aufgrund kleiner Gewichte und Bias). Trainierte MLMs können ferner einer Quantisierung unterzogen werden. Die Quantisierung bezieht sich auf die Darstellung von Netzwerkparametern und Daten, die über Formate mit geringer Genauigkeit durch die Neuronenschichten fließen. Die Quantisierung kann Kalibrierungseingaben 502 verwenden, die ähnlich zu Trainingseingaben, die beim Training des MLM verwendet werden, oder sogar eine Teilmenge von Trainingseingaben (z.B. Eingaben, die zuvor nicht von dem MLM gesehen wurden) sein können.
  • Insbesondere können Netzwerkparameter und Daten des trainierten MLM 504 von der FP-Darstellung in eine ganzzahlige N-Bit-Darstellung transformiert (quantisiert) werden. Beispielsweise kann die Kalibrierungseingabe 502 in das trainierte MLM 504 Werte Ij im FP-Format enthalten, die zwischen -1000 und 1000 liegen, z.B. kann einer der Eingabewerte I1 = 473.932 sein. Die Eingabewerte können quantisiert werden: neu skaliert von dem [-1000,1000) FP-Intervall auf ein Intervall von ganzzahligen Werten, wie etwa [-32.768, 32768), z.B. unter Verwendung einer Multiplikation I1 × 32768/1000 = 15529.804, woraufhin der ganzzahliger Teil (Rundung) des Produkts genommen wird: 15529.804 → 15530. Als Ergebnis kann ein gewisser Fehler eingeführt werden (z.B. etwa 0,27 % in diesem Beispiel), was gleichwohl ein akzeptabler Kompromiss zum Reduzieren der Speicherbandbreite und Beschleunigen der Berechnungen des trainierten MLM 504 sein kann. Der Skalierungsfaktor S = 1000/32768 = 0.03052 (oder der inverse Skalierungsfaktor S-1 = 32.768) können für die nachfolgende Berechnung und Umwandlung von Daten (z.B. Ausgaben von Neuronenoperationen) aus dem Ganzzahlenformat zurück in das FP-Format gespeichert werden (z.B. in einem Festkommaformat). In einigen Implementierungen kann der Skalierungsfaktor S mit einem Zweierpotenz-Skalierungsfaktor angenähert werden, z.B. 2-5, so dass die Multiplikation mit dem Skalierungsfaktor als eine Bitverschiebung (z.B. eine Verschiebung um 5 Bit nach rechts) implementiert werden kann. Gewichte (und/oder Bias) können andere Skalierungsfaktoren verwenden als die Skalierungsfaktoren, die für die Quantisierung der Eingabedaten verwendet werden. Unterschiedliche Schichten können in ähnlicher Weise unterschiedliche Sätze von Skalierungsfaktoren verwenden.
  • Die Ausgabe der ersten Schicht kann eine Multiplikation der Eingabewerte Ij mit Gewichten Wj aufweisen (sowie das Hinzufügen von Bias). Die Gewichte der ersten Schicht des trainierten MLM 504 können in ähnlicher Weise auf das gleiche (oder unterschiedliche) Intervall von Werten quantisiert werden. Die Ausgabe der ersten Schicht kann in einem Akkumulatorpuffer gespeichert werden, dessen Größe doppelt so groß ist wie die Eingabedaten (in diesem Beispiel z.B. 32 Bit). Die Ausgaben der ersten Schicht können auch weiter quantisiert werden, z.B. durch Neuskalieren auf ein anderes Intervall von Werten oder auf dasselbe Intervall [32.768, 32.768] wie es für die Eingabewerte verwendet wird. (In einigen Fällen können unterschiedliche Werteintervalle für unterschiedliche Schichten verwendet werden.) Dieser Prozess kann für jede der Schichten (einschließlich verborgener Schichten und der Ausgabeschicht) fortgesetzt werden, bis die Ausgabe 506 erhalten wird, die das gleiche Werteintervall sein kann, wie sie für einige oder alle Ausgaben der Zwischenschicht verwendet werden, oder einige andere Intervalle von Werten.
  • In einigen Implementierungen kann die Quantisierung durch ein Kalibrierungsstatistikmodul 508 unterstützt werden. Genauer gesagt, Eingabe- oder Ausgabewerte der Schichten des trainierten MLM 504 sind möglicherweise nicht gleichmäßig über ein FP-Intervall oder ein ganzzahliges Intervall von Werten verteilt. Beispielsweise kann das Kalibrierungsstatistikmodul 508 bestimmen, dass 90 % (oder ein beliebiger anderer Zielanteil) der Werte der Kalibrierungseingabe 502 innerhalb eines Intervalls zwischen Ilower = 150.000 und Iupper = 840.000 liegen. Das Kalibrierungsstatistikmodul 508 kann die Grenzen Ilower und Iupper basierend auf Statistiken bestimmen, die für mehrere Kalibrierungseingaben 502 gesammelt wurden. Dementsprechend kann das Kalibrierungsstatistikmodul 508 bestimmen, dass die Eingabewerte außerhalb dieses Intervalls verworfen werden können, während die Werte innerhalb des reduzierten Intervalls [150.000,840.000) auf das ganzzahlige Intervall [-32.768, 32.767], Ij → IQ neuskaliert werden, z.B. mit I Q = C l i p ( [ S 1 I j ] + z ) ,
    Figure DE102022105808A1_0017
    wobei z ein konstanter Nullpunktwert sein kann, [.] die Rundungsfunktion (auf die nächste ganze Zahl) ist, und Clip(.) eine Funktion ist, die das Argument auf das ganzzahlige Intervall [-32.768, 32.767] beschneidet. Die Beziehung zwischen den ganzzahligen Werten IQ und den Gleitkommawerten Ij ist gegeben durch die inverse Transformation I j = S ( I Q z ) .
    Figure DE102022105808A1_0018
  • Diejenigen Eingabewerte Ij, die unter Ilower liegen, können mit dem ganzzahligen Minimalwert dargestellt werden, z.B. -32.768, und diejenigen, die über Iupper liegen, können mit dem ganzzahligen Maximalwert dargestellt werden, z.B. 32.767. Eine solche Neuskalierung kann das verfügbare ganzzahlige Intervall effizienter nutzen, um das wichtigste Werteintervall zwischen Ilower und Iupper darzustellen. Die beschriebene Quantisierungstransformation kann sowohl für die Eingabewerte (Ausgabewerte) als auch die Modellparameter (z.B. Gewichte und Bias) des trainierten MLM 504 durchgeführt werden. Die durch das Kalibrierungsstatistikmodul 508 identifizierte Quantisierungstransformation kann durch eine Quantisierungs-Engine (QE) 510 implementiert werden. Der beschriebene Prozess kann für jede Schicht des trainierten MLM 504 wiederholt werden, bis ein quantisiertes Modell 540 generiert ist, in dem die Modellparameter einschließlich Zwischenschichtausgaben quantisiert sind.
  • Das obige Beispiel soll der Veranschaulichung dienen. In einigen Implementierungen kann die QE 510 eine beliebige lineare Transformation durchführen, die zu einer Verschiebung und Neuskalierung des Intervalls von Werten [Ilower, Iupper] auf ein Zielintervall von ganzzahligen Werten [-Z, Z - 1] führt, was als ganzzahliger N-BitWert (mit N = 8,16, usw.) z.B. in einem Eingabe- oder Ausgabepuffer gespeichert werden kann. In einigen Implementierungen können nichtlineare Transformationen verwendet werden. Einige der oben beschriebenen Operationen können auf dem Trainingsserver 162 und/oder der Host-Rechenvorrichtung 102 durchgeführt werden.
  • Das quantisierte Modell kann an eine Edge-Rechenvorrichtung 530 (die die Edge-Rechenvorrichtung 130 oder irgendeine andere Vorrichtung sein kann) bereitgestellt werden. In einigen Implementierungen können die Eingaben in das quantisierte Modell 540 während der Inferenz auf der Edge-Rechenvorrichtung 530 erheblich variieren. Beispielsweise kann sich in Stimmenerkennungsanwendungen oder Spracherkennungsanwendungen die Intensität der erkannten Schalls erheblich ändern, da einige Personen möglicherweise leiser sprechen als andere, und sogar dieselben Personen bei manchen Gelegenheiten laut und bei anderen Gelegenheiten leise sprechen können, oder diese in unterschiedlichen Abständen von dem/den Mikrofon(en) positioniert sein können, und so weiter. Dies kann zu einer starken Schwankung der Eingabewerte führen. In einigen Anwendungen wird ein MLM von einem Drittanbieter vortrainiert, und Eingabedaten, die für das Training verwendet werden, sind nicht verfügbar. Infolgedessen können die Gewichte und Bias des MLM quantisiert und optimiert werden, aber es sind keine Daten verfügbar, um eine Kalibrierung und Quantisierung der Ein- und Ausgabe des MLM durchzuführen (einschließlich der Ausgaben von Neuronen der verborgenen Schicht). Um diese und andere technologische Herausforderungen anzugehen, kann die Edge-Rechenvorrichtung 530 eine zusätzliche Laufzeitquantisierung des quantisierten Modells 540 durchführen. In einigen Implementierungen kann das quantisierte Modell 540 zuvor auf dem Trainingsserver 162 oder der Host-Rechenvorrichtung 102 quantisiert werden, wie oben beschrieben wurde, z.B. mit quantisierten Gewichten und Bias, wobei aber Eingabedaten (sowie Ausgaben aller Neuronenschichten) während der Laufzeitausführung auf der Edge-Rechenvorrichtung 530 quantisiert werden.
  • Eingabedaten (z.B. eine bestimmte Anzahl von Millisekunden Sprache) können in einem Eingabedatenpuffer 532 gespeichert werden, z.B. in einem FP-Format. Daten im Eingabedatenpuffer 532 können von einem Laufzeitstatistikmodul 538 analysiert werden, das z.B. ähnlich wie das Kalibrierungsstatistikmodul auf dem Trainingsserver 162 arbeitet. In einigen Implementierungen kann das Laufzeitstatistikmodul 538 eine Prozessor- (Mikrocontroller, oder eine speziell entworfene Hardware) Anweisung verwenden, die einen Bereich (z.B. eine Anzahl ganzzahliger Bits und/oder eine Anzahl von nichtganzzahligen Bits) der im Eingabedatenpuffer 532 gespeicherten Daten erkennt. Verschiedene Metriken über die Eingabedaten können durch das Laufzeitstatistikmodul 538 analysiert werden, und ein relevantestes Intervall [Ilower, Iupper] für die Eingabedaten kann identifiziert werden. Das Laufzeitstatistikmodul 538 kann die Parameter der identifizierten Intervalle an eine Laufzeit-QE 534-1 liefern, die ähnlich wie die QE 510 auf dem Trainingsserver 162 arbeiten kann. Die QE 534-1 kann eine Quantisierungstransformation an der Eingabedaten in die erste Schicht 542 implementieren. Die quantisierten Eingabedaten können in einem Puffer 536 für quantisierte Daten gespeichert werden, bevor sie in die erste Schicht 542 eingegeben werden. Die Ausgabe der ersten Schicht 542 kann in einem Ausgabepuffer 544 gespeichert werden, der ein temporärer Puffer sein kann, der für jede andere Datenspeicherung verwendet wird, sobald die Daten im Ausgabepuffer 544 quantisiert (und in den Puffer 546 verschoben) sind. Die Daten im Ausgabepuffer 544 können durch das Laufzeitstatistikmodul 538 analysiert werden.
  • Genauer gesagt können verschiedene Metriken über die im Ausgabepuffer 544 gespeicherten Daten durch das Laufzeitstatistikmodul 538 analysiert werden, und die Zielintervalle für die Ausgabedaten können identifiziert werden. Das Laufzeitstatistikmodul 538 kann die Parameter der identifizierten Intervalle an die Laufzeit-QE 534-2 liefern. Die QE 534-2 kann über Schaltungen implementiert werden, die von Schaltungen von QE 534-1 getrennt sind. In einigen Implementierungen kann die QE 534-2 einige oder alle Schaltungen mit der QE 534-1 teilen. Die QE 534-2 kann eine Quantisierungstransformation an den von der ersten Schicht ausgegebenen Daten implementieren, und das quantisierte Ergebnis kann in einem quantisierten Eingabepuffer 546 gespeichert werden. Die in dem quantisierten Eingabepuffer 546 gespeicherten Daten können dann der zweiten Schicht 548 zugeführt werden. Ein ähnlicher Prozess kann für jede der verbleibenden Schichten des quantisierten Modells 540 fortgesetzt werden. Die Ausgabe des quantisierten Modells 540 kann in dem Ausgabedatenpuffer 550 gespeichert werden.
  • In einigen Implementierungen kann die Größe des Intervalls für unterschiedliche Schichten unterschiedlich sein. Beispielsweise können Eingabedaten in die erste Schicht 542 auf 16-Bit-Ganzzahlen quantisiert werden, Eingabedaten in die zweite Schicht 548 können auf 12-Bit-Ganzzahlen quantisiert werden, Eingabedaten in eine dritte Schicht können auf 10-Bit-Ganzzahlen quantisiert werden, und so weiter. Zusätzlich zur Größe der Intervalle kann die Laufzeitquantisierung die Skalierungsfaktoren für Eingabedaten, Gewichte, Bias, Aktivierungsfunktionen verfolgen, die ferner für unterschiedliche Schichten unterschiedlich sein können. Jeder der Skalierungsfaktoren kann während der Laufzeit basierend auf den Statistiken über die Eingabedaten und Zwischendaten bestimmt werden. In einigen Implementierungen kann eine Bitlänge von Daten (z.B. Ganzzahl oder Festkomma) wie oben beschrieben variiert und optimiert werden. In einigen Implementierungen kann eine Bitlänge aus einer Anzahl verfügbarer Formate ausgewählt werden, die von einer CPU der Edge-Rechenvorrichtung erkannt werden (wie etwa 32 Bit, 16 Bit, 8 Bit, und dergleichen). Wenn beispielsweise nur die 8-Bit-Speicheradressen verfügbar sind, können Skalierungsfaktoren für jede Schicht der neuronalen Netzwerkoperationen optimiert werden. Die beschriebenen Laufzeit-Quantisierungsoperationen können für jedes von der Edge-Rechenvorrichtung 530 empfangene Eingabedatenpaket, für jeden von der Edge-Rechenvorrichtung 530 empfangenen Stapel von Paketen, und so weiter, durchgeführt werden.
  • Verschiedene andere Optimierungen können auf der Edge-Rechenvorrichtung 130 für eine effizientere Laufzeit-Inferenz durchgeführt werden. In einigen Implementierungen kann eine der Neuronenschichten eine oder mehrere Softmax-Operationen aufweisen. Beispielsweise kann eine Eingabe in eine Schicht eines NN M Werte xj aufweisen (die eine Ausgabe von M Neuronen der vorhergehenden Schicht sein können). Die Ausgabe der Schicht kann Wahrscheinlichkeiten wj (z.B. Klassifikationswahrscheinlichkeiten) aufweisen die unter Verwendung der Softmax-Funktion berechnet wurden, w j = e x j k = 1 M e x k .
    Figure DE102022105808A1_0019
  • Eine Wahrscheinlichkeit wj kann angeben, wie wahrscheinlich ein bestimmtes Interferenzergebnis ist, z.B. wie wahrscheinlich es ist, dass ein handgeschriebener Text ein bestimmtes Wort oder einen bestimmten Satz enthält, wie wahrscheinlich es ist, dass ein bestimmtes Bild eine Darstellung eines Menschen enthält, wie wahrscheinlich es ist, dass eine Menge von Daten auf einen Fehler in einem technologischen Prozess hinweist, und so weiter. Das Berechnen der Softmax-Funktion kann eine kostspielige Operation sein, die beträchtliche Verarbeitungs- und Speicherressourcen erfordert. Beispielsweise kann das Berechnen jeder Exponentialfunktion exk eine beträchtliche Anzahl von Zyklen erfordern, die Multiplikations- und Additionsoperationen, Verweise auf Nachschlagetabellen und dergleichen aufweisen. In einigen Implementierungen, in denen z.B. ein MLM auf einer Edge-Rechenvorrichtung eingesetzt wird, kann die Schicht (oder der Klassifikator), die Wahrscheinlichkeiten Wj berechnet, durch eine Schicht ersetzt werden, die einen Maximalwert xj identifiziert. Der jeweilige Knoten j kann der wahrscheinlichsten Klassifikation der Eingabedaten entsprechen, z.B. als Geräusch (j = 1), Stimme einer Person A (j = 2), Stimme einer Person B (j = 3), ein bestimmtes Wort, oder eine Folge von gesprochenen Wörtern, und so weiter. Nachdem der Maximalwert xj der Ausgabeschicht identifiziert wurde, kann eine Verarbeitungsvorrichtung, die das MLM ausführt, die entsprechende Klassifikation j ausgeben.
  • Die 6 bis 9 veranschaulichen beispielhafte Verfahren 600-900 und ihre möglichen Variationen des optimierten Einsatzes von MLMs auf zielspezifischen Plattformen für eine maximale Nutzung verfügbarer Rechenressourcen. Die Verfahren 600-900 und/oder jede ihrer individuellen Funktionen, Routinen, Subroutinen oder Operationen können von einer oder mehreren Verarbeitungseinheiten (CPUs, GPUs, feldprogrammierbaren Gate-Arrays oder FPGA usw.) und Speichervorrichtungen, die kommunikativ mit Verarbeitungseinheiten der Host-Rechenvorrichtung 102, der Edge-Rechenvorrichtung 130 gekoppelt sind, oder jeder anderen geeigneten Verarbeitungsvorrichtung durchgeführt werden. In bestimmten Implementierungen kann ein einzelner Verarbeitungs-Thread die Verfahren 600-900 ausführen. Alternativ können zwei oder mehr Verarbeitungs-Threads die Verfahren 600-900 ausführen, wobei jeder Thread eine oder mehrere einzelne Funktionen, Routinen, Subroutinen oder Operationen der Verfahren ausführt. In einem veranschaulichenden Beispiel können die Verarbeitungs-Threads, die die Verfahren 600-900 implementieren, synchronisiert werden (z.B. unter Verwendung von Semaphoren, kritischen Sektionen und/oder anderen Thread-Synchronisierungsmechanismen). Alternativ können die Verarbeitungs-Threads, die die Verfahren 600-900 implementieren, asynchron zueinander ausgeführt werden. Verschiedene Operationen der Verfahren 600-900 können in einer anderen Reihenfolge im Vergleich zu der in den 6-9 gezeigten Reihenfolge durchgeführt werden. Einige Operationen der Verfahren 600-900 können gleichzeitig mit anderen Operationen durchgeführt werden. Einige Operationen können optional sein.
  • 6 ist ein Flussdiagramm eines beispielhaften Verfahrens 600 zur Bereitstellung eines oder mehrerer maschineller Lernmodelle auf zielspezifischen Plattformen gemäß einigen Implementierungen der vorliegenden Offenbarung. Das Verfahren 600 kann verwendet werden, um sicherzustellen, dass MLMs, die auf einer Plattform trainiert wurden, auf einer anderen Plattform effizient eingesetzt und ausgeführt werden. Bei Block 610 kann das Verfahren 600 Erhalten von Konfigurationseinstellungen eines vorab trainierten MLM (z.B. eines auf der Host-Rechenvorrichtung 102 trainierten MLM) aufweisen. Die Konfigurationseinstellungen des MLM können Informationen aufweisen, die einen mit dem MLM zugeordneten Datenfluss charakterisieren, z.B. eine Karte von Datenflüssen zwischen unterschiedlichen Knoten (z.B. Neuronen) des MLM, die Art des MLM (z.B. neuronales Netz, Entscheidungsbaum, usw.), eine Architektur des MLM (z.B. faltendes NN, Boltzmann-Zustandsmaschine, usw.). Die Konfigurationseinstellungen können ferner Parameter von Rechenoperationen aufweisen, die dem MLM zugeordnet sind. Solche Parameter können Gewichte, Bias und Aktivierungsfunktionen verschiedener Neuronen des MLM, Klassifikatoren, die von verschiedenen (z.B. letzten) Schichten von Neuronen des MLM verwendet werden, und so weiter, aufweisen.
  • Bei Block 620 kann das Verfahren 600 damit fortfahren, dass die Verarbeitungsvorrichtung eine Hardwarekonfiguration einer Zielrechenvorrichtung (z.B. Edge-Rechenvorrichtung 130) erhält. Die Hardwarekonfiguration kann Eigenschaften eines Prozessors auf der Zielrechenvorrichtung aufweisen, wie etwa CPU/GPU-Typ, Anzahl von CPU/GPU-Hardware-Threads, CPU/GPU-Taktrate, ISA der CPU/GPU, und dergleichen. Die Hardwarekonfiguration kann ferner Eigenschaften einer Speichervorrichtung der Zielrechenvorrichtung aufweisen, wie etwa eine Speichergröße, den Speichertyp, eine Speicherzugriffsgeschwindigkeit, eine Größe der Speicheradresse, und dergleichen.
  • Bei Block 630 kann das Verfahren 600 damit fortfahren, dass die Verarbeitungsvorrichtung im Hinblick auf die Konfigurationseinstellungen des MLM und die Hardwarekonfiguration der Zielrechenvorrichtung ein Ausführungspaket erstellt, das zum Ausführen des MLM auf der Zielrechenvorrichtung konfiguriert ist. Das Ausführungspaket kann einen Quellcode aufweisen, der dazu konfiguriert ist, das MLM auf der Zielrechenvorrichtung auszuführen, und eine Konfigurationsdatei, die mit dem Quellcode verknüpft ist und die Ausführung einer oder mehrerer Operationen des Quellcodes definiert.
  • Wie mit einem Detailanschnitt in 6 gezeigt wird, kann das Erstellen einer Ausführung eine Anzahl von Operationen beinhalten. Beispielsweise kann die Verarbeitungsvorrichtung bei Block 632 ein Format von vektorisierten Anweisungen des Prozessors der Zielrechenvorrichtung identifizieren. Bei Block 634 kann die Verarbeitungsvorrichtung identifizieren, dass einer oder mehrere Kernel des MLM eine Dimension aufweisen, die sich von einer Dimension der vektorisierten Anweisungen des Prozessors der Zielrechenvorrichtung unterscheidet. Bei Block 636 kann die Verarbeitungsvorrichtung den einen oder die mehreren Kerne des MLM modifizieren, um die Dimension jedes (oder einiger) des einen oder der mehreren Kerne mit der Dimension der vektorisierten Anweisungen auszurichten. Die Kernelmodifikation kann durchgeführt werden, indem Kernel bis zur Dimension der vektorisierten Anweisungen aufgefüllt werden, indem ein Kernel in zwei oder mehr Kernel aufgeteilt wird, wobei jeder abgeteilte Teil die Dimension der vektorisierten Anweisungen hat, oder durch eine beliebige Kombination davon. Bei Block 638 kann die Verarbeitungsvorrichtung angesichts des identifizierten Formats der vektorisierten Anweisungen einen Quellcode generieren, der zum Ausführen des MLM auf der Zielrechenvorrichtung konfiguriert ist.
  • Im optionalen (wie durch das gestrichelte Kästchen angezeigt) Block 640 kann das Verfahren 600 ein Bereitstellen mindestens eines Teils des Ausführungspakets, z.B. der Konfigurationsdatei, für einen Benutzer (z.B. einen Entwickler) aufweisen. In einigen Implementierungen kann der Benutzer über eine API auf die Konfigurationsdatei zugreifen, die dem Benutzer in einem grafischen, formelhaften, oder einem anderen geeigneten benutzerlesbaren Format mitteilt, wie das MLM auf der Zielrechenvorrichtung ausgeführt werden soll. Beim optionalen Block 650 kann das Verfahren 600 ein Empfangen aktualisierter Konfigurationseinstellungen des MLM von dem Benutzer aufweisen. In einigen Implementierungen kann der Block 630 als Reaktion auf die empfangenen aktualisierten Konfigurationseinstellungen wiederholt werden, und ein neues Ausführungspaket kann erstellt werden. Bei Block 660 kann die Verarbeitungsvorrichtung das Ausführungspaket an die Zielrechenvorrichtung kommunizieren.
  • 7 ist ein Flussdiagramm eines beispielhaften Verfahrens 700 zum Ausführen eines oder mehrerer maschineller Lernmodelle auf zielspezifischen Plattformen gemäß einigen Implementierungen der vorliegenden Offenbarung. In einigen Implementierungen kann das Verfahren 700 von einer Verarbeitungsvorrichtung einer Edge-Rechenvorrichtung (ECD) ausgeführt werden, um darauf ein MLM auszuführen. In einigen Implementierungen kann eine ECD eine Mikrocontrollereinheit mit einer Prozessorgeschwindigkeit von weniger als 2,0 DMIPS/MHz, wie etwa eine ARM® Cortex®-M4, oder eine ähnliche Verarbeitungsvorrichtung aufweisen. In einigen Implementierungen kann die Verarbeitungsvorrichtung der ECD ein 32-Bit-Prozessor mit einer Gleitkomma-Unterstützungseinheit sein. Bei Block 710 kann die Verarbeitungsvorrichtung der ECD auf der ECD das MLM unter Verwendung eines Ausführungspakets instanziieren, das im Hinblick auf eine Hardwarekonfiguration der ECD kompiliert wurde. In einigen Implementierungen kann das Ausführungspaket, wie oben in Verbindung mit dem Verfahren 600 und 6 beschrieben, erstellt werden. Die Hardwarekonfiguration kann mindestens eines von Merkmalen des Prozessors der ECD oder Merkmalen einer ersten Speichervorrichtung der ECD aufweisen. Beispielsweise kann die erste Speichervorrichtung ein Cache sein (z.B. ein Hochgeschwindigkeitsspeicher auf dem Prozessorchip).
  • Das Verfahren 700 kann damit fortfahren, dass die Verarbeitungsvorrichtung der ECD Inferenzdaten unter Verwendung des instanziierten MLM verarbeitet, um eine Inferenzausgabe zu erhalten. In einigen Implementierungen kann die Verarbeitung der Inferenzdaten Operationen der Blöcke 720-760 aufweisen. Genauer gesagt kann das Verfahren 700 bei Block 720 ein Laden eines ersten Teils des MLM, wobei der erste Teil eine erste Vielzahl von Parametern des MLM aufweist, in die erste Speichervorrichtung der ECD (z.B. einen oder mehrere Speicherpuffer) von einer zweiten Speichervorrichtung der ECD (z.B. einem Systemspeicher, der ein Speicher mit wahlfreiem Zugriff usw. sein kann) aufweisen. Die Parameter des MLM können Gewichte, Bias, Aktivierungsfunktionen, Klassifikatoren und so weiter aufweisen. In einigen Implementierungen kann die zweite Speichervorrichtung ein Speicher mit wahlfreiem Zugriff sein, der durch eine Busverbindung mit dem Prozessor verbunden ist. In einer anderen Implementierung kann sich die zweite Speichervorrichtung außerhalb der ECD befinden (z.B. in einem netzwerkbasierten Speicher), kann aber kommunikativ mit der ECD gekoppelt sein. Der erste Teil des MLM kann Parameter einer oder mehrerer Neuronenschichten oder Teile einer oder mehrerer Schichten aufweisen, wie z.B. in Verbindung mit 4A-C beschrieben wird. Der erste Teil des MLM kann eine ganze Neuronenschicht, mehr als eine Neuronenschicht, einen Bruchteil einer Neuronenschicht, oder einen Bruchteil von mehr als einer Neuronenschicht aufweisen. Bei Block 730 kann das Verfahren 700 damit fortfahren, dass die Verarbeitungsvorrichtung eine erste Vielzahl von Operationen des MLM unter Verwendung der geladenen ersten Vielzahl von Parametern des MLM durchführt.
  • Bei Block 740 kann das Verfahren 700 mit dem Laden eines zweiten Teils des MLM in die erste Speichervorrichtung der ECD fortfahren. Der zweite Teil kann eine zweite Vielzahl von Parametern des MLM aufweisen. Das Laden des zweiten Teils des MLM kann durchgeführt werden, indem in der zweiten Speichervorrichtung der ECD mindestens eine Teilmenge der ersten Vielzahl von Parametern der MLM durch eine Teilmenge der zweiten Vielzahl von Parametern der MLM ersetzt wird. Genauer gesagt können einige der ersten Vielzahl von Parametern des MLM überschrieben werden, während einige der ersten Vielzahl von Parametern für eine spätere Verwendung beibehalten werden können. In einigen Implementierungen können alle Parameter der ersten Vielzahl ersetzt werden. Bei Block 750 kann das Verfahren 700 damit fortfahren, dass die Verarbeitungsvorrichtung eine zweite Vielzahl von Operationen des MLM unter Verwendung der zweiten Vielzahl von Parametern des MLM durchführt. Bei Block 760 kann die Verarbeitungsvorrichtung, die das Verfahren 700 durchführt, eine Inferenzausgabe des MLM unter Verwendung einer ersten Ausgabe der ersten Vielzahl von Operationen des MLM und einer zweiten Ausgabe der zweiten Vielzahl von Operationen des MLM erhalten. In einigen Implementierungen können die erste Ausgabe und/oder die zweite Ausgabe als Eingabe in zusätzliche neuronale Operationen verwendet werden (z.B. als Eingabe in eine oder mehrere zusätzliche Neuronenschichten). Parameter zusätzlicher neuronaler Operationen können in ähnlicher Weise geladen werden, indem zumindest einige der zuvor geladenen Parameter ersetzt werden.
  • In einigen Implementierungen kann das Verarbeiten der Inferenzdaten Anwenden unterschiedlicher Kernel auf unterschiedliche Teile der Inferenzdaten oder auf unterschiedliche Teile von Zwischendaten aufweisen, die durch Verarbeitung der Inferenzdaten erhalten werden. Beispielsweise kann ein erster Kernel auf einen ersten Teil der Daten angewendet werden, während ein zweiter Kernel auf einen zweiten Teil der Daten angewendet werden kann. Der zweite Kernel kann erhalten werden, indem der erste Kernel auf eine Größe des zweiten Teils der Daten gekürzt wird, wie z.B. in Verbindung mit 2 beschrieben wurde. Beispielsweise kann der zweite Teil der Daten an eine Grenze der Daten angrenzen, so dass sich eine Anwendung des ersten Kernels über die Grenze der Daten hinaus erstrecken würde. In solchen Fällen kann der erste Kernel reduziert werden (z.B. durch Eliminieren einiger Elemente des Kernels), um den zweiten Kernel zu erhalten, dessen Größe der Größe der Daten nahe der Grenze entspricht. Der zweite Kernel kann eine andere Form (und andere Kernelwerte) aufweisen, je nachdem, an welche Grenze (z.B. links, oben, usw.) die Daten stoßen.
  • In einigen Implementierungen kann das Verarbeiten der Inferenzdaten Anwenden eines oder mehrerer Kernel des MLM aufweisen, wobei der Kernel bzw. die Kernel eine Dimension aufweisen, die mit einer Dimension von vektorisierten Anweisungen eines Prozessors der ECD ausgerichtet wurden. Genauer gesagt kann ein erster Kernel (zweiter Kernel, usw.) des MLM eine Auffüllung aufweisen; eine Anzahl von Bits der Auffüllung kann bestimmt werden, um eine Dimension der ersten Auffüllung mit der Dimension der vektorisierten Anweisungen auszurichten. In einigen Implementierungen kann das Auffüllen des ersten (zweiten, usw.) Kernels während der Erstellung des Ausführungspakets durchgeführt werden (z.B. auf einer Host-Rechenvorrichtung oder auf einem Trainingsserver oder auf der ECD), während die aufgefüllten Kernel auf die ECD angewendet werden können.
  • 8 ist ein Flussdiagramm eines beispielhaften Verfahrens 800 zur Optimierung einer Speichernutzung während der Ausführung eines oder mehrerer maschineller Lernmodelle gemäß einigen Implementierungen der vorliegenden Offenbarung. In einigen Implementierungen kann das Verfahren 800 von einer Verarbeitungsvorrichtung einer Edge-Rechenvorrichtung (ECD) ausgeführt werden, um darauf ein MLM einzusetzen. In einigen Implementierungen kann eine ECD eine Mikrocontrollereinheit mit einer Prozessorgeschwindigkeit von weniger als 2,0 DMIPS/MHz aufweisen, wie etwa eine ARM® Cortex®-M4, oder eine ähnliche Verarbeitungsvorrichtung. In einigen Implementierungen kann die Verarbeitungsvorrichtung der ECD ein 32-Bit-Prozessor mit einer Gleitkomma-Unterstützungseinheit sein. In einigen Implementierungen kann das Verfahren 800 von einer Verarbeitungsvorrichtung eines beliebigen Computers ausgeführt werden, der ein MLM anwendet, einschließlich eines Desktop-Computers, eines Server-Computers, eines Cloud-Computers, und so weiter. Bei Block 810 kann eine Verarbeitungsvorrichtung, die das Verfahren 800 durchführt, eine erste Ausgabe einer ersten Neuronenschicht des MLM berechnen. Die Begriffe „erster“, „zweiter“ und „dritter“ sind als Identifikatoren zu verstehen und setzen keine starre Reihenfolge voraus. Beispielsweise kann die erste Schicht eine beliebige Neuronenschicht des MLM sein, einschließlich der Eingabeneuronenschicht, oder eine beliebige der verborgenen Schichten des MLM.
  • Bei Block 820 kann das Verfahren 800 damit fortfahren, dass die Verarbeitungsvorrichtung die erste Ausgabe in einer ersten Vielzahl von Speicherstellen speichert. Die erste Ausgabe kann mehrere Zahlen aufweisen, die von verschiedenen Neuronen der ersten Neuronenschicht ausgegeben werden. Speicherorte können sich auf beliebige Speichereinheiten beziehen, die mit Speicheradressen identifiziert werden und in der Lage sind, beliebige ganze Zahlen oder Gleitkommazahlen zu speichern. Die erste Vielzahl von Speicherstellen kann sich in einer/einem einzelnen Speicherkomponente oder -abschnitt befinden, z.B. in einem Speicherpuffer oder -register. Bei Block 830 kann die Verarbeitungsvorrichtung, die das Verfahren 800 durchführt, eine zweite Ausgabe einer zweiten Neuronenschicht des MLM berechnen. Beispielsweise kann eine Eingabe in die zweite Neuronenschicht des MLM die erste Ausgabe (Ausgabe der ersten Neuronenschicht) aufweisen. Bei Block 840 kann das Verfahren 800 damit fortfahren, dass die Verarbeitungsvorrichtung die zweite Ausgabe an einer zweiten Vielzahl von Speicherstellen speichert. In einigen Implementierungen, wie in 3B gezeigt wird, befinden sich die erste Vielzahl von Speicherstellen in einem ersten Speicherpuffer (z.B. dem ersten Puffer 311) und die zweite Vielzahl von Speicherstellen in einem zweiten Speicherpuffer (z.B. dem zweiten Puffer 312), der sich von dem ersten Speicherpuffer unterscheidet. In einigen Implementierungen, wie in 3C gezeigt wird, befinden sich die erste Vielzahl von Speicherstellen und die zweite Vielzahl von Speicherstellen in demselben Speicherpuffer (z.B. dem Puffer 321).
  • Bei Block 850 kann die Verarbeitungsvorrichtung, die das Verfahren 800 durchführt, eine dritte Ausgabe einer dritten Neuronenschicht des MLM berechnen. Beispielsweise kann eine Eingabe in die dritte Neuronenschicht des MLM die zweite Ausgabe (Ausgabe der zweiten Neuronenschicht) aufweisen. Bei Block 860 kann das Verfahren 800 damit fortfahren, dass die Verarbeitungsvorrichtung die dritte Ausgabe in der ersten Vielzahl von Speicherstellen speichert. In einigen Implementierungen werden bei Block 860 zumindest einige der ersten Vielzahl von Speicherstellen überschrieben, um Daten zu speichern, die in nachfolgenden Operationen des MLM nicht mehr verwendet werden sollen. Bei solchen Implementierungen, bei denen zwei Speicherpuffer verwendet werden, kann eine Größe des ersten Speicherpuffers ausreichend sein, um eine Ausgabe einer beliebigen der ungeradzahligen Neuronenschichten des MLM zu speichern, wobei die ungeradzahligen Schichten des MLM die erste Neuronenschicht, die dritte Neuronenschicht, und so weiter, aufweisen. In ähnlicher Weise kann eine Größe des zweiten Speicherpuffers ausreichend sein, um eine Ausgabe einer beliebigen der geradzahligen Neuronenschichten des MLM zu speichern, wobei die geradzahligen Neuronenschichten des MLM die zweite Neuronenschicht, die vierte Neuronenschicht (falls vorhanden) usw. aufweisen. Bei solchen Implementierungen, bei denen ein einzelner Speicherpuffer verwendet wird, kann eine Größe des einzelnen Speicherpuffers ausreichen, um Ausgaben von beliebigen zwei aufeinanderfolgenden Neuronenschichten des MLM zu speichern. In jeder der beschriebenen Implementierungen kann jeder der Speicherpuffer ein Cache-Puffer sein, der sich auf einem Prozessorchip der Verarbeitungsvorrichtung befindet (für eine schnellere Ausführung von Lese- und/oder Schreiboperationen). Die oben für drei Neuronenschichten beschriebene Abfolge der Berechnen-und-Speichern-Operationen kann für eine beliebige Anzahl von Neuronenschichten des MLM fortgesetzt werden.
  • 9 ist ein Flussdiagramm eines anderen beispielhaften Verfahrens 900 zur Optimierung der Speichernutzung während der Ausführung eines oder mehrerer maschineller Lernmodelle gemäß einigen Implementierungen der vorliegenden Offenbarung. In einigen Implementierungen kann das Verfahren 900 von einer Verarbeitungsvorrichtung einer Edge-Rechenvorrichtung (ECD) ausgeführt werden, um darauf ein MLM einzusetzen. In einigen Implementierungen kann eine ECD eine Mikrocontrollereinheit mit einer Prozessorgeschwindigkeit von weniger als 2,0 DMIPS/MHz, wie etwa eine ARM® Cortex®-M4 oder eine ähnliche Verarbeitungsvorrichtung. In einigen Implementierungen kann die Verarbeitungsvorrichtung der ECD ein 32-Bit-Prozessor mit einer Gleitkomma-Unterstützungseinheit sein. In einigen Implementierungen kann das Verfahren 900 von einer Verarbeitungsvorrichtung eines beliebigen Computers ausgeführt werden, der ein MLM anwendet, einschließlich eines Desktop-Computers, eines Server-Computers, eines Cloud-Computers, und so weiter. Als Teil der MLM-Verarbeitung, z.B. als Teil von Operationen einer der Neuronenschichten, kann eine Verarbeitungsvorrichtung, die das Verfahren 900 durchführt, einen Kernel identifizieren und den Kernel auf Daten anwenden. Die Daten können Eingabedaten (z.B. Daten, die von einer Eingabeneuronenschicht des MLM verarbeitet werden) oder beliebige Zwischendaten (z.B. Daten, die zuvor von einer oder mehreren Neuronenschichten des MLM verarbeitet wurden) sein.
  • Auf die Daten kann eine Vielzahl von Kernoperationen angewendet werden. Genauer gesagt kann der Kernel auf mehrere Teile der Daten angewendet werden, z.B. in einer gleitenden Weise, wobei jeder geeignete Schritt eine Verschiebung des Kernels relativ zu den Daten identifiziert. Genauer gesagt kann jede der Vielzahl von Kernel-Operationen eine Anwendung des Kernels auf einen jeweiligen Teil von Daten aufweisen. Wie beispielsweise in 3A gezeigt wird, kann der Kernel ein Pooling-Kernel sein, der auf nicht überlappende Teile der Daten angewendet wird (z.B. ein Stride gleich der Größe des Kernels), wobei die erste Kernel-Operation auf den oberen linken Teil des Bereichs 302 der Daten angewendet wird, die zweite Kernel-Operation auf den oberen rechten Teil des Bereichs 302 der Daten angewendet wird, und so weiter. In einigen Implementierungen kann der Kernel ein Faltungskernel sein, der auf überlappende Teile der Daten angewendet wird (z.B. ein Stride kleiner als die Größe des Kernels).
  • Bei Block 910 kann eine Verarbeitungsvorrichtung, die das Verfahren 900 durchführt, eine erste Kernel-Operation der Vielzahl von Kernel-Operationen eines maschinellen Lernmodells durchführen, z.B. durch Anwenden des Kernels auf einen ersten Teil der Vielzahl von Teilen der Daten. Vor der Anwendung des Kernels kann der erste Teil der Daten in einem ersten Satz von Speicherstellen gespeichert werden. Wieder unter Bezugnahme auf 3A, kann der obere linke Teil des Bereichs 302 in dem ersten, zweiten, fünften und sechsten Element des Puffers 304 gespeichert werden. Bei Block 920 kann das Verfahren 900 damit fortfahren, dass die Verarbeitungsvorrichtung eine Teilmenge des ersten Satzes von Speicherstellen auswählt, an denen Werte der Daten gespeichert werden, die in nachfolgenden Kernel-Operationen nicht verwendet werden. Beispielsweise kann die Verarbeitungsvorrichtung nach dem Berechnen einer Ausgabe der ersten Kernel-Operation (z.B. Auswählen von 6 als maximales Element des oberen linken Teils der Daten) das erste Element des Puffers 304 auswählen, einen Wert zu speichern (z.B. 1), die nicht in nachfolgenden Kernel- (oder anderen) Operationen des MLM verwendet werden soll. Bei Block 930 kann das Verfahren 900 damit fortfahren, dass die Verarbeitungsvorrichtung die Ausgabe der ersten Kernel-Operation in der ausgewählten Teilmenge des ersten Satzes von Speicherstellen speichert. In ähnlicher Weise kann der Speicher in Verbindung mit einer zweiten Kernel-Operation (z.B. Anwendung des Kernels auf den oberen rechten Teil des Bereichs 302), einer dritten Kernel-Operation, und so weiter, wiederverwendet werden.
  • Mehrere Variationen des Verfahrens 900 sind möglich. Obwohl oben ein Maximum-Pooling-Kernel verwendet wird, um die Leistung von Operationen des Verfahrens 900 zu veranschaulichen, kann stattdessen ein Kernel verwendet werden, der einen Durchschnittswert innerhalb eines jeweiligen Teils von Daten berechnet, oder ein Kernel, der eine Faltung des jeweiligen Teils von Daten berechnet. In ähnlicher Weise kann eine Speicheroptimierung mit jedem Kernel erreicht werden, der Daten ausgibt, deren Größe kleiner ist als die Größe der Eingabe in den Kernel. In jeder der beschriebenen Implementierungen kann sich der erste (zweite, dritte usw.) Satz von Speicherstellen in einem Cache-Puffer befinden, der sich auf einem Prozessorchip der Verarbeitungsvorrichtung befindet, die das Verfahren 900 durchführt.
  • 10 ist ein Flussdiagramm eines beispielhaften Verfahrens 1000 zum Durchführen einer Laufzeitquantisierung von Daten, die von einem oder mehreren maschinellen Lernmodellen verarbeitet werden, gemäß einigen Implementierungen der vorliegenden Offenbarung. In einigen Implementierungen kann das Verfahren 1000 von einer Verarbeitungsvorrichtung einer Edge-Rechenvorrichtung (ECD) ausgeführt werden, die ein MLM einsetzt. Die ECD kann ein Mikrocontroller sein, der eine Ganzzahlenarithmetik und/oder Gleitkommaarithmetik unterstützt. In einigen Implementierungen kann das Verfahren 1000 von einer Verarbeitungsvorrichtung eines beliebigen geeigneten Computers durchgeführt werden, der das MLM anwendet. Das Verfahren 1000 kann dazu verwendet werden, ein zuvor trainiertes und quantisiertes MLM einzusetzen. Die durchgeführte (z.B. durch einen Trainingsserver) Quantisierung kann das Ändern von Parametern des trainierten MLM (z.B. Gewichte, Bias, Aktivierungsfunktionen usw.) von dem Gleitkommazahlenformat in ein Ganzzahlenformat aufweisen. Unterschiedliche Ganzzahlenformate (z.B. ein 4-Bit-Format, ein 8-Bit-Format, ein 16-Bit-Format usw.) können für Netzwerkparameter unterschiedlicher Schichten von Neuronen des MLM verwendet werden. In einigen Implementierungen können die Netzwerkparameter aller Schichten von Neuronen das gleiche Format haben.
  • Bei Block 1010 kann das Verfahren 1000 aufweisen, dass die Verarbeitungsvorrichtung erste Eingabedaten in das MLM erhält. Die ersten Eingabedaten können ein Teil einer Vielzahl von Eingabedaten sein, die eine beliebige Anzahl von Eingabedaten enthalten. „Zuerst“ wird hierin als bloßer Identifikator einiger spezifischer Eingabedaten aus der Vielzahl der Eingabedaten verwendet und setzt keine starre Reihenfolge voraus. In einigen Implementierungen sind die ersten (oder irgendwelche anderen) Eingabedaten in einem Fließkommazahlenformat. In einigen Implementierungen haben die ersten (oder irgendwelche anderen) Eingabedaten ein Ganzzahlenformat. In einigen Implementierungen weisen die ersten (oder irgendwelche anderen) Eingabedaten eine digitale Darstellung von Schall auf, z.B. eine Folge von Bits, die ein Segment einer menschlichen Stimme und/oder Sprache oder beliebigen anderen Schall darstellt.
  • Bei Block 1020 kann das Verfahren 1000 damit fortfahren, dass die Verarbeitungsvorrichtung einen ersten Wertebereich identifiziert, der den ersten Eingabedaten zugeordnet ist, z.B. [Ilower, Iupper]. Beispielsweise kann der erste Wertebereich [Ilower, Iupper] einen Minimalwert Imin der ersten Eingabedaten (so dass Ilower ≤ Imin) und einen Maximalwert Imax der ersten Eingabedaten (so dass Imax ≤ Iupper) aufweisen. In einigen Implementierungen kann der erste Wertbereich [Ilower, Iupper] einen vorbestimmten Teil der ersten Eingabedaten aufweisen. Beispielsweise kann der vorbestimmte Teil basierend auf einer Standardabweichung σ einer Verteilung der ersten Eingabedaten bestimmt werden, und kann eine vorbestimmte Menge, z.B. n, der Standardabweichung σ aufweisen, so dass Iupper - Ilower ≥ nσ, wobei n sein kann ein beliebiger ganzzahliger Wert (z.B. n = 3, 4, 5, usw.) oder ein nichtganzzahliger Wert (z.B. n = 3,5, 4,4, usw.) sein.
  • Bei Block 1030 kann das Verfahren 1000 damit fortfahren, dass die Verarbeitungsvorrichtung einen zweiten Wertebereich identifiziert, der einem Ganzzahlenformat zugeordnet ist. Der zweite Wertebereich kann ein Zielwertebereich [I1, I2] sein, der zum Speichern der ersten Eingabedaten verwendet werden soll. Beispielsweise kann der zweite Wertebereich mit einem 8-Bit-Ganzzahlenformat (z.B. dem Zielbereich von [0,255] oder [-128,127] und dergleichen) oder einem 16-Bit-Ganzzahlenformat (z.B. einem Zielbereich [0,65536] oder [-32768,32767] und dergleichen) zugeordnet werden. In einigen Implementierungen kann das ganzzahlige Zielformat ein Format sein, das verwendet wird, um Gewichte der ersten Neuronenschicht des MLM zu speichern (z.B. das Format von Gewichten, die für das MLM während der Quantisierung des MLM ausgewählt werden, die durch den Trainingsserver durchgeführt wird).
  • Bei Block 1040 kann die Verarbeitungsvorrichtung, die das Verfahren 1000 durchführt, einen Skalierungsfaktor für die Eingabedaten bestimmen und erste neuskalierte Eingabedaten durch Neuskalieren der ersten Eingabedaten basierend auf einer Abbildung des ersten Wertebereichs auf den zweiten Wertebereich erhalten. Beispielsweise kann die Abbildung die Endpunkte gemäß Ilower → I1 und Iupper → I2 transformieren und kann andere Punkte entsprechend transformieren (z.B. auf proportionale Weise). Der Skalierungsfaktor (oder der inverse Skalierungsfaktor) kann zur späteren Verwendung gespeichert werden. Bei Block 1050 kann das Verfahren 1000 mit dem Verarbeiten der ersten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM fortfahren, um erste Zwischendaten (z.B. eine Ausgabe der ersten Schicht) zu erhalten. Bei Block 1060 kann das Verfahren 1000 das Erhalten einer ersten Inferenzausgabe des MLM unter Verwendung der ersten Zwischendaten aufweisen. Die erste Inferenzausgabe kann eine erste Klassifikation der ersten Eingabedaten aufweisen. Beispielsweise kann die erste Klassifikation die Identifizierung einer Person aufweisen, deren Stimme durch die ersten Eingabedaten dargestellt wird (in den Fällen der Stimmenerkennung), die Identifizierung von von einer Person gesprochenen Wörtern (in den Fällen der Spracherkennung), die Erkennung eines Objekts (im Fall der Objektidentifikation), und dergleichen.
  • Wie mit einem Detailausschnitt in 10 gezeigt wird, kann das Erhalten der ersten Inferenzausgabe des MLM zusätzliche Operationen beinhalten, einschließlich, aber nicht beschränkt auf die Verarbeitung der Ausgabe der ersten Schicht von Neuronen (der ersten Zwischenausgabe) durch zusätzliche Schichten von Neuronen. Genauer gesagt kann das Verfahren 1000 bei Block 1062 ein Identifizieren eines dritten Wertebereichs aufweisen, der der ersten Zwischendaten zugeordnet ist, z.B. der Wertebereich [Jlower, Jupper], der ähnlich wie der Wertebereich [Ilower, Iupper] den ersten Eingabedaten (Dateneingabe in die erste Schicht von Neuronen) zugeordnet ist. Bei Block 1064 kann das Verfahren 1000 Identifizieren eines vierten Wertebereichs aufweisen, der einem Ganzzahlenformat der ersten Zwischendaten zugeordnet ist. Beispielsweise kann der vierte Wertebereich ein weiterer Zielwertebereich [J1, J2] sein. In einigen Implementierungen kann der Zielbereich von Werten [J1, J2] einem Ganzzahlenformat zugeordnet sein, das verwendet wird, um Gewichte der zweiten Neuronenschicht des MLM zu speichern, z.B. dem Format der Gewichte der zweiten Neuronenschicht, für die das MLM während der Quantisierung des MLM ausgewählt wurde, die durch den Trainingsserver durchgeführt wird. Der Wertebereich [J1, J2] kann derselbe wie der Wertebereich [I1, I2] sein. In einigen Implementierungen kann sich der Wertebereich [J1, J2] von dem Wertebereich [I1, I2] unterscheiden.
  • Bei Block 1066 kann das Verfahren 1000 Bestimmen eines zweiten Skalierungsfaktors für die ersten Zwischendaten und Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der ersten Zwischendaten basierend auf einer Abbildung des dritten Wertebereichs auf den vierten Wertebereich aufweisen (z.B. unter Verwendung von Jlower → J1 und Jupper → J2). Bei Block 1068 kann das Verfahren 1000 Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung der zweiten Neuronenschicht des MLM, um zweite Zwischendaten (z.B. eine Ausgabe der zweiten Neuronenschicht) zu erhalten, aufweisen. Dieser Prozess kann damit fortgesetzt werden, dass die Verarbeitungsvorrichtung die zweite Zwischenausgabe verwendet, um die erste Inferenzausgabe des MLM zu erhalten (z.B. unter Verwendung einer dritten, vierten usw. Schicht von Neuronen).
  • Es können zahlreiche Variationen des Verfahrens 1000 implementiert werden. Während beispielsweise in einigen Implementierungen die Eingabedaten und die Zwischendaten neuskaliert (quantisiert) werden, können in anderen Implementierungen sowohl die Eingabe-/Zwischendaten als auch die Parameter des MLM neuskaliert werden. Beispielsweise können die Parameter des MLM in einem Ganzzahlenformat (oder sogar in einem Fließkommaformat) gespeichert werden, z.B. nach der auf dem Trainingsserver durchgeführten Quantisierung, können aber zusammen mit den Eingabe- oder Zwischendaten in ein anderes Ganzzahlenformat neuskaliert werden.
  • Es versteht sich, dass die obige Beschreibung veranschaulichend und nicht einschränkend sein soll. Viele andere Implementierungsbeispiele werden Fachleuten beim Lesen und Verstehen der obigen Beschreibung offensichtlich sein. Obwohl die vorliegende Offenbarung spezifische Beispiele beschreibt, versteht es sich, dass die Systeme und Verfahren der vorliegenden Offenbarung nicht auf die hierin beschriebenen Beispiele beschränkt sind, sondern mit Modifikationen innerhalb des Umfangs der beigefügten Ansprüche praktiziert werden können. Dementsprechend sind die Beschreibung und die Zeichnungen in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten. Der Umfang der vorliegenden Offenbarung sollte daher unter Bezugnahme auf die beigefügten Ansprüche bestimmt werden, zusammen mit dem vollen Umfang der Äquivalente, zu denen solche Ansprüche berechtigen.
  • Die oben dargelegten Implementierungen von Verfahren, Hardware, Software, Firmware oder Code können über Anweisungen oder Code implementiert werden, die auf einem maschinenzugänglichen, maschinenlesbaren, computerzugänglichen oder computerlesbaren Medium gespeichert sind und die von einem Verarbeitungselement ausführbar sind. „Speicher“ umfasst jeden Mechanismus, der Informationen in einer Form bereitstellt (d.h. speichert und/oder überträgt), die von einer Maschine, wie einem Computer oder einem elektronischen System, gelesen werden kann. Beispielsweise umfasst „Speicher“ Direktzugriffsspeicher (RAM), wie etwa statisches RAM (SRAM) oder dynamisches RAM (DRAM); ROM; magnetische oder optische Speichermedien; Flash-Speichervorrichtungen; elektrische Speichervorrichtungen; optische Speichervorrichtungen; akustische Speichervorrichtungen und jede Art eines greifbaren maschinenlesbaren Mediums, das zum Speichern oder Übertragen elektronischer Anweisungen oder Informationen in einer von einer Maschine (z.B. einem Computer) lesbaren Form geeignet ist.
  • Die Bezugnahme in dieser gesamten Beschreibung auf „eine Realisierung“ oder „eine Implementierung“ bedeutet, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder Eigenschaft, die in Verbindung mit der Implementierung beschrieben wird, in mindestens einer Implementierung der Offenbarung enthalten ist. Daher beziehen sich die Ausdrücke „in einer Realisierung“ oder „in einer Implementierung“ an verschiedenen Stellen in dieser Beschreibung nicht notwendigerweise alle auf dieselbe Implementierung. Darüber hinaus können die bestimmten Merkmale, Strukturen oder Eigenschaften in einer oder mehreren Implementierungen auf jede geeignete Weise kombiniert werden.
  • In der vorstehenden Beschreibung wurde eine ausführliche Beschreibung unter Bezugnahme auf spezifische beispielhafte Implementierungen gegeben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne von dem breiteren Geist und Umfang der Offenbarung abzuweichen, wie er in den beigefügten Ansprüchen dargelegt ist. Die Beschreibung und die Zeichnungen sind dementsprechend eher in einem veranschaulichenden als in einem einschränkenden Sinne zu betrachten. Darüber hinaus bezieht sich die vorstehende Verwendung von Realisierung, Implementierung und/oder anderer beispielhafter Sprache nicht unbedingt auf dieselbe Implementierung oder dasselbe Beispiel, sondern kann sich auf verschiedene und unterschiedliche Implementierungen sowie möglicherweise auf dieselbe Implementierung beziehen.
  • Die Begriffe „Beispiel“ oder „exemplarisch“ werden hier in der Bedeutung als Beispiel, Instanz oder zur Veranschaulichung dienend verwendet. Jeder hierin als „Beispiel“ oder „exemplarisch“ beschriebene Aspekt oder jedes Design ist nicht notwendigerweise als bevorzugt oder vorteilhaft gegenüber anderen Aspekten oder Designs aufzufassen. Vielmehr soll die Verwendung der Begriffe „Beispiel“ oder „beispielhaft“ Konzepte konkret darstellen. Wie in dieser Anmeldung verwendet, soll der Begriff „oder“ eher ein inklusives „oder“ als ein exklusives „oder“ bedeuten. Das heißt, sofern nichts anderes angegeben wird oder es aus dem Kontext klar hervorgeht, soll „X weist A oder B auf” eine der natürlichen inklusiven Permutationen bedeuten. Das heißt, wenn X A aufweist; X B aufweist; oder X sowohl A als auch B aufweist, dann ist „X weist A oder B auf” unter einem der vorstehenden Fälle erfüllt. Außerdem sollten die Artikel „ein“ und „eine“, wie sie in dieser Anmeldung und den beigefügten Ansprüchen verwendet werden, im Allgemeinen so ausgelegt werden, dass sie „eine oder mehrere“ bedeuten, sofern nichts anderes angegeben wird oder es aus dem Kontext klar ersichtlich ist, dass auf eine Singularform verwiesen wird. Darüber hinaus soll die durchgehende Verwendung des Begriffs „eine Realisierung“ oder „eine Implementierung“ nicht die gleiche Realisierung oder Implementierung bedeuten, es sei denn, sie wird als solche beschrieben. Außerdem sind die Begriffe „erster“, „zweiter“, „dritter“, „vierter“ usw., wie sie hierin verwendet werden, als Bezeichnungen zur Unterscheidung zwischen unterschiedlichen Elementen gemeint und müssen nicht unbedingt eine ordinale Bedeutung gemäß ihrer numerischen Bezeichnung haben.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 63/160072 [0001]

Claims (20)

  1. Verfahren zur Bereitstellung eines trainierten Modells für maschinelles Lernen, MLM, auf einer Edge-Rechenvorrichtung, wobei das Verfahren umfasst: - Erhalten von ersten Eingabedaten in das MLM; - Identifizieren eines ersten Wertebereichs, der den ersten Eingabedaten zugeordnet ist; - Identifizieren eines zweiten Wertebereichs, der einem Ganzzahlenformat zugeordnet ist; - Erhalten von ersten neuskalierten Eingabedaten durch Neuskalieren der ersten Eingabedaten basierend auf einer Abbildung des ersten Wertebereichs auf den zweiten Wertebereich; - Verarbeiten der ersten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM, um erste Zwischendaten zu erhalten; - Erhalten einer ersten Inferenzausgabe des MLM unter Verwendung der ersten Zwischendaten, wobei die erste Inferenzausgabe eine erste Klassifikation der ersten Eingabedaten umfasst.
  2. Verfahren nach Anspruch 1, bei dem der erste Wertebereich einen Minimalwert der ersten Eingabedaten und einen Maximalwert der ersten Eingabedaten umfasst.
  3. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der erste Wertebereich einen vorbestimmten Teil der ersten Eingabedaten umfasst.
  4. Verfahren nach Anspruch 3, bei dem der vorbestimmte Teil der ersten Eingabedaten eine vorbestimmte Menge von Standardabweichungen einer Verteilung der ersten Eingabedaten umfasst.
  5. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das Ganzzahlenformat entweder ein 8-Bit-Ganzzahlenformat oder ein 16-Bit-Ganzzahlenformat ist.
  6. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das Ganzzahlenformat ein Format ist, das verwendet wird, um Gewichte der ersten Neuronenschicht des MLM zu speichern.
  7. Verfahren nach einem der vorhergehenden Ansprüche, bei dem das Erhalten der ersten Inferenzausgabe des MLM umfasst: - Identifizieren eines dritten Wertebereichs, der den ersten Zwischendaten zugeordnet ist; - Identifizieren eines vierten Wertebereichs, der einem Ganzzahlenformat der ersten Zwischendaten zugeordnet ist; - Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der ersten Zwischendaten basierend auf einer Abbildung des dritten Wertebereichs auf den vierten Wertebereich; - Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung der zweiten Neuronenschicht des MLM, um zweite Zwischendaten zu erhalten; - Erhalten der ersten Inferenzausgabe des MLM unter Verwendung der zweiten Zwischendaten.
  8. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die ersten Eingabedaten in einem Fließkommazahlenformat vorliegen.
  9. Verfahren nach einem der vorhergehenden Ansprüche, bei dem die ersten Eingabedaten eine digitale Darstellung von Schall umfassen.
  10. Verfahren nach einem der vorhergehenden Ansprüche, ferner umfassend: - Erhalten von zweiten Eingabedaten in das MLM, - Identifizieren eines dritten Wertebereichs, der den zweiten Eingabedaten zugeordnet ist; - Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der zweiten Eingabedaten basierend auf einer Abbildung des dritten Wertebereichs auf den zweiten Wertebereich; - Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM, um zweite Zwischendaten zu erhalten; - Erhalten einer zweiten Inferenzausgabe des MLM unter Verwendung der ersten Zwischendaten, wobei die erste Inferenzausgabe eine zweite Klassifikation der zweiten Eingabedaten umfasst.
  11. Verfahren, umfassend: - Erhalten einer Vielzahl von Eingabedaten in ein Modell für maschinelles Lernen, MLM, wobei das MLM Parameter umfasst, die in einem ersten Ganzzahlenformat gespeichert sind; - Verarbeiten der Vielzahl der Eingabedaten, um eine Vielzahl jeweiliger Klassifikationen der Eingabedaten zu erhalten, wobei das Verarbeiten jeder der Vielzahl der Eingabedaten umfasst: - Identifizieren eines Wertebereichs, der entsprechenden Eingabedaten zugeordnet ist; - Erhalten neuskalierter Eingabedaten durch Neuskalieren der entsprechenden Eingabedaten basierend auf einer Abbildung des identifizierten Wertebereichs auf ein zweites Ganzzahlenformat; - Erhalten, unter Verwendung der neuskalierten Eingabedaten, einer Inferenzausgabe, die eine Klassifikation der entsprechenden Eingabedaten umfasst.
  12. Verfahren nach Anspruch 11, bei dem die in dem ersten Ganzzahlenformat gespeicherten Parameter Gewichte einer ersten Neuronenschicht des MLM umfassen, und bei dem das erste Ganzzahlenformat dasselbe ist wie das zweite Ganzzahlenformat.
  13. Verfahren nach einem der Ansprüche 11 oder 12, bei dem alle der mehreren Eingabedaten in einem Fließkommazahlenformat vorliegen.
  14. Verfahren nach einem der Ansprüche 11 bis 13, bei dem jede der mehreren Eingabedaten eine digitale Darstellung von Schall umfasst.
  15. System, umfassend: - ein Speichersubsystem; - eine Verarbeitungsvorrichtung, die kommunikativ mit dem Speichersubsystem gekoppelt ist, wobei die Verarbeitungsvorrichtung eingerichtet ist zum - Erhalten von ersten Eingabedaten in ein Modell für maschinelles Lernen, MLM; - Identifizieren eines ersten Wertebereichs, der den ersten Eingabedaten zugeordnet ist; - Identifizieren eines zweiten Wertebereichs, der einem Ganzzahlenformat zugeordnet ist; - Erhalten von ersten neuskalierten Eingabedaten durch Neuskalieren der ersten Eingabedaten basierend auf einer Abbildung des ersten Wertebereichs auf den zweiten Wertebereich; - Verarbeiten der ersten neuskalierten Eingabedaten unter Verwendung einer ersten Neuronenschicht des MLM, um erste Zwischendaten zu erhalten; - Erhalten, unter Verwendung der ersten Zwischendaten, einer ersten Inferenzausgabe des MLM, wobei die erste Inferenzausgabe eine erste Klassifikation der ersten Eingabedaten umfasst.
  16. System nach Anspruch 15, bei dem der erste Wertebereich einen vorbestimmten Teil der ersten Eingabedaten umfasst.
  17. System nach Anspruch 16, bei dem der vorbestimmte Teil der ersten Eingabedaten eine vorbestimmte Menge von Standardabweichungen einer Verteilung der ersten Eingabedaten umfasst.
  18. System nach einem der Ansprüche 15 bis 17, bei dem das Ganzzahlenformat entweder ein 8-Bit-Ganzzahlenformat oder ein 16-Bit-Ganzzahlenformat ist.
  19. System nach einem der Ansprüche 15 bis 18, bei dem das Ganzzahlenformat ein Format ist, das verwendet wird, um Gewichte der ersten Neuronenschicht des MLM zu speichern.
  20. System nach einem der Ansprüche 15 bis 19, bei dem zum Erhalten der ersten Inferenzausgabe des MLM die Verarbeitungsvorrichtung eingerichtet ist zum - Identifizieren eines dritten Wertebereichs, der den ersten Zwischendaten zugeordnet ist; - Identifizieren eines vierten Wertebereichs, der einem Ganzzahlenformat der ersten Zwischendaten zugeordnet ist; - Erhalten von zweiten neuskalierten Eingabedaten durch Neuskalieren der ersten Zwischendaten basierend auf einer Abbildung des dritten Wertebereichs auf den vierten Wertebereich; - Verarbeiten der zweiten neuskalierten Eingabedaten unter Verwendung der zweiten Neuronenschicht des MLM, um zweite Zwischendaten zu erhalten; - Erhalten der ersten Inferenzausgabe des MLM unter Verwendung der zweiten Zwischendaten.
DE102022105808.5A 2021-03-12 2022-03-11 Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen Pending DE102022105808A1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163160072P 2021-03-12 2021-03-12
US63/160,072 2021-03-12
US17/513,689 US20220292300A1 (en) 2021-03-12 2021-10-28 Efficient quantization for neural network deployment and execution
US17/513,689 2021-10-28

Publications (1)

Publication Number Publication Date
DE102022105808A1 true DE102022105808A1 (de) 2022-09-15

Family

ID=83005204

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102022105808.5A Pending DE102022105808A1 (de) 2021-03-12 2022-03-11 Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen

Country Status (3)

Country Link
US (1) US20220292300A1 (de)
CN (1) CN115080139A (de)
DE (1) DE102022105808A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11922314B1 (en) * 2018-11-30 2024-03-05 Ansys, Inc. Systems and methods for building dynamic reduced order physical models
WO2023079551A1 (en) * 2021-11-08 2023-05-11 R-Stealth Ltd System and method for providing decentralized computing resources

Also Published As

Publication number Publication date
US20220292300A1 (en) 2022-09-15
CN115080139A (zh) 2022-09-20

Similar Documents

Publication Publication Date Title
CN110188795B (zh) 图像分类方法、数据处理方法和装置
CN108256544B (zh) 图片分类方法和装置、机器人
DE102022105748A1 (de) Effiziente optimierung für den einsatz und die ausführung neuronaler netze
DE102018128581A1 (de) Erkennung und klassifikfation von schadsoftware unter verwendung eines künstlichen neuronalen netzes
DE102020105535A1 (de) Neuronale Netzwerkvorrichtung und Verfahren zum Quantisieren von Parametern eines neuronalen Netzwerks
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
US20200065619A1 (en) Image processing method, processing apparatus and processing device
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102018129692A1 (de) Tiefgehendes Lernen anhand von Ausführungsverlaufsdaten zur Erkennung von Exploits
DE112020004625T5 (de) Transponierte faltung mit systolischem array
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE102018111905A1 (de) Domänenspezifische Sprache zur Erzeugung rekurrenter neuronaler Netzarchitekturen
DE102019133028A1 (de) Für neuronale netzwerke geeignetes effizientes matrixformat
DE202017104127U1 (de) Superpixel für faltende neuronale Netze
DE102022105808A1 (de) Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen
DE102019135474A1 (de) Zuordnung und quantifizierung des einflusses von features neuronaler netze für explainable artificial intelligence
CN112561027A (zh) 神经网络架构搜索方法、图像处理方法、装置和存储介质
DE112020002693T5 (de) Verringerung der berechnung in neuralen netzwerken mit selbstmodifizierendem code
DE102021107586A1 (de) Spekulatives training unter verwendung der aktualisierung partieller gradienten
DE112020005789T5 (de) Hierarchische partitionierung von operatoren
DE102021107510A1 (de) Training eines neuronalen netzwerks unter speicherbeschränkung
DE112020003055T5 (de) Neuanordnen der operationen eines neuronalen netzwerks für parallele ausführung
DE102017117381A1 (de) Beschleuniger für dünnbesetzte faltende neuronale Netze
DE112020003129T5 (de) Dynamisches laden von code für mehrfachausführungen auf einem sequenzialprozessor
DE102022104121A1 (de) Künstliche neuronale netze erzeugt durch sequenzen mit geringer diskrepanz