Edocti
Fortgeschrittene technische Ausbildung für den modernen Softwareingenieur

Deep learning at the edge - part one

Beim Einsatz von Machine Learning in Echtzeit-Embedded-Systemen müssen Latenz, Speicherbedarf und Leistungsaufnahme sinken – bei gleicher Genauigkeit. In Functional-Safety-Kontexten braucht es zudem verlässliche Ergebnisse (eine 20-km/h-Beschränkung darf nicht als 50 km/h erkannt werden). Intuitiv denkt man, möglichst viele Fractional Bits verbessern die Genauigkeit.

Wir zeigen, dass sich alle Ziele mit geeigneten Algorithmen und einer Floating-Point-Darstellung mit weniger Bits erreichen lassen: deutlich kleinerer Speicher-Footprint, geringere Latenz.

Dieser technische Newsletter bildet den Auftakt und führt fixed point programming knapp ein. Nächstes Mal betrachten wir FXP bei einer Bildsegmentierung auf NVIDIA Drive PX2 und Jetson TX2.

Fixed point programming – Motivation

Mehr OPS, weniger Speicher, niedrigere Latenz – und teils sogar höhere Präzision. Das ist besonders relevant in Embedded-Systemen mit hohem Rechenbedarf, niedrigen Latenz- und strengen Power-Budgets.

Auch abseits von Embedded hilft es: Zahlreiche AWS EC2-Instanzen (z. B. p2.8xlarge ) oder DGX-1 für End-to-End-Tests sind teuer. Halbierte Rechenzeit/Speicher spart Kosten.

FXP kann je nach Anwendung/Präzision bis zu 10× mehr Performance pro Watt (und ~2–3× geringere Latenz) gegenüber FP erreichen. In manchen Fällen erzielt FXP sogar bessere Genauigkeit als FP.

Beispiel Wahrscheinlichkeiten – wir wissen:

  • alle Werte sind positiv
  • der Maximalwert ist 1

Vergleich der maximalen Auflösungen:

FXP16-bit:0.0000152587890625
FXP16-bit normalized:0.00006103515625
FXP16-bit sub normal:0.0000000596

Fixed point representation

Die Bedeutung eines N-bit-Worts hängt von der Interpretation ab: Repräsentationsmenge und Mapping. Ein 16-bit-Register kann Bits setzen/löschen – die Interpretation bestimmt den Wert.

Qn.q

Eine verbreitete Fixed-Point-Notation ist das Q number format (Qn.q):

  • Q kennzeichnet Q-Notation
  • n Gesamt-Bitzahl des Registers
  • q Bitzahl der Fractional-Anteile (rechts vom „binary point“)
  • Präfixe U/S für unsigned/signed

Beispiele

UQ16.0 – 16-bit unsigned, 0 Fractionals (Integerbereich 0..65535)
UQ16.8 – 16-bit unsigned, 8 Fractionals (Integer 8 bits, 0..255)
SQ16.15 – 16-bit signed, 15 Fractionals (Integer 0 bits, Bereich [-1, 1))

Grün = Integer-Bits, Dunkelblau = Fractionals, Rot = Vorzeichenbit; dazwischen der „binary point“:

Was beobachten wir?

Bei fester Registerbreite gilt: kleinerer Dynamikbereich ↔ höhere Auflösung (Präzision).

  • Minimiere den Dynamikbereich → höhere Präzision
  • Minimiere den Dynamikbereich → höhere Präzision

Dynamic Range

Verhältnis größter zu kleinster positiver Zahl im gegebenen Qn.q – in dB: DR = 20·log10(|max|/|min|). In FXP hängt DR nur von der Registerbreite ab.

Beispiel

Für Q16.0: max=65535, min=1, DR ≈ 96 dB.
Für Q16.16 ergibt sich derselbe DR.

Format conversions

In CNNs ändert man Formate häufig (warum?); daher Konvertierungen verstehen.

Von klein nach groß

  • Integer-Teil vergrößern (sign extension bei signed, 0-Padding bei unsigned)
  • Fractional-Teil vergrößern (rechts mit Nullen auffüllen)
Integer-Teil vergrößern

Beispiel: SQ16.8SQ32.8 (signed → sign extension).

Fractional-Teil vergrößern

Einfach rechts mit Nullen auffüllen.

Von groß nach klein

  • Truncation
  • Rounding
Truncation

Beispiel SQ32.24SQ16.1: rechts schieben, dann sign extension links.

Rounding

Rundungsfaktor addieren (abhängig von Fractional-Bits), dann wie oben schieben/extendieren.

Fixed point math

Addition

Regel: Beide Operanden müssen dasselbe Format besitzen.

Multiplication
  • Regel 1: Ergebnis-Bitbreite = Summe der Operanden-Bitbreiten
  • Regel 2: Fractional-Bits(Ergebnis) = Summe der Fractional-Bits(Operanden)

Beispiel: SQ16.8 × SQ16.4 → SQ32.12.

Quintessenz: FXP-Arithmetik nutzt Integer-Arithmetik – die FP-Unit bleibt ungenutzt. Integer ist ein Spezialfall von FXP.

Hier beenden wir die kurze Einführung.

Was folgt?

Als Nächstes: MAC (Multiply-Accumulate) und seine Rolle in CNNs. Wir vergleichen FP32 und FXP (verschiedene Formate) auf NVIDIA Drive PX2 und Jetson TX2 (Performance & Grenzen).

Außerdem bereiten wir Material zu präziser Zeitsynchronisation via (g)PTP über Ethernet/CAN vor.

Zum Nachdenken:

  • 1) Network direkt in FXP trainieren und so deployen?
  • 2) In FP32 trainieren und erst beim Deployment konvertieren?

About this newsletter

Dies ist der erste Teil einer Reihe technischer Newsletter von Edocti. Wir halten es prägnant und praxisnah (R&D-Erfahrungen).