AI Layer

Eine Eroberungskarte durch Inference, Modelle & Agenten

Ein strukturierter Lernpfad — von den Fundamenten bis zu deinem Framework über ExecuTorch / TFLM auf der ECU.

Die Idee: Stell dir das Themengebiet wie eine Landkarte vor. Jeder Begriff ist ein Ort, jede Region ein Themengebiet. Du eroberst sie von links nach rechts — vom bekannten Ufer (Regression) bis zum Gipfel (dein AI Layer).

Pfeiltasten / Space: weiter · O: Übersicht · Strg+Klick auf Karte: Region ansteuern

Die Karte der Territorien

A · Fundamente Regression, Gradient,Netze, Train/Infer B · Modell Layer, Operatoren,Transformer, Formate C · Hardware CPU/SIMD, GPU/CUDA,NPU, ECU-Limits D · Engine ExecuTorch, TFLM,ONNX RT, Kernels E · Quant/Opt int8/fp16, Pruning,Latenz/RAM F · Serving Model-Server, API,Versioning G · Agentic Prompts, MCP, Skills,Agenten H · AI Layer dein Framework:Interface+Governance
A FundamenteB Modell C HardwareD Engine E Quant/OptF Serving G AgenticH AI Layer

A Fundamente

Was du schon angefangen hast — und was fehlt, um „Inference" zu verstehen.

DatenModell (lernt Muster)Vorhersage / Inference
ECU-Analogie: Ein Modell ist wie eine kalibrierte Kennfeld-Funktion. Training = das einmalige Ausmessen/Kalibrieren am Prüfstand (teuer, offline). Inference = der Laufzeit-Aufruf im Steuergerät: „bei Eingabe x gib y aus", immer wieder, in Echtzeit, mit festem Code.

Beispiel 1: Hauspreis aus Quadratmetern

Du hast 6 Datensätze (qm, preis) und willst eine Formel preis = w·qm + b.

qm607590110130150
preis (Tsd€)180225270330390450

Auge: pro +1 qm steigt der Preis ~3 Tsd€ → w≈3, b≈0. Das ist lineare Regression. „Lernen" = die beiden Zahlen w,b finden.

Grafik: Punkte + gefundene Linie

preis = 3·qm qm → preis

Vom einen Parameter zum „Netz"

Lineare Regression: 1 Formel. Ein neuronalales Netz = viele solcher Rechnungen hintereinander geschaltet.

// Eine „Neuron"-Berechnung (vereinfacht)
z = w0*x0 + w1*x1 + ... + wn*xn + b   // gewichtete Summe
a = activation(z)                      // z.B. ReLU: max(0, z)
// hunderte/tausende davon, in Schichten — das ist das Modell
Warum das relevant ist: „Inference" heißt am Ende nichts anderes als: eine Kette von Matrix-Multiplikationen + einfachen Funktionen (Aktivierungen) auf deinen Eingabedaten ausführen. Das ist deterministisch und gut planbar — genau wie dein ECU-Code.

Grafik: ein kleines neuronales Netz

Eingabe (3) versteckt (4) Ausgabe (2)

Jede Kante = eine Gewichtszahl w. Beim Inference fließen die Zahlen von links nach rechts.

Der „Gradient" — intuitiv

bergab = Fehler sinkt

Fehlerfunktion E(w) ist wie ein Tal. Der Gradient zeigt die steilste Abwärtsrichtung.

Gradient Descent: in kleinen Schritten den Hang runter — das ist das „Lernen".

Inference braucht keinen Gradient — die Parameter sind dann schon fest.

Training-Schritt, durchgespielt (Mini-Beispiel)

Annahme: preis = w·qm, Start w=1, ein Punkt (qm=100, preis=300)
1) Vorhersage: y^ = 1·100 = 100        (zu niedrig)
2) Fehler:     E = (300-100)² = 40000
3) Gradient:  dE/dw = 2·(100-300)·100 = -40000
4) Schritt:    w = w - lr·gradient = 1 - 0.00001·(-40000) = 1.4
5) nächster Durchlauf … w kriecht gegen 3

Das passiert millionenfach über alle Datenpunkte — deshalb braucht Training GPU/Zeit, Inference nicht.

Begriffe, die du ab jetzt siehst

BegriffBedeutung (kurz)
ModellGelernte Parameter + Architektur (die „Software").
TrainingParameter bestimmen (offline, GPU, groß).
InferenceModell auf Eingabe anwenden (online, ECU, klein).
Gewichte (weights)Die gelernten Zahlen w — das eigentliche „Programm".
TensorMehrdimensionales Zahlen-Gitter (Skalar/Vektor/Matrix/…).
Epoch / BatchDurchlauf über (Teil der) Daten beim Training.

B Modellarchitektur

Wie ist ein Modell von innen gebaut? Und vor allem: was ist ein „Transformer"?

InputLayer 1Layer 2→ … →Output
ECU-Analogie: Ein Modell ist eine Pipeline von Verarbeitungsschritten — wie ein Signalverarbeitungs-Graph in deinem RT-Code. Jeder „Layer" ist eine Funktion, die einen Tensor rein- und einen rausgibt.

Grafik: Layer-Pipeline

Input Dense Conv Attention Output

Jeder Kasten nimmt einen Tensor und gibt einen (oft anderen) Tensor zurück.

Layer-Typen im Überblick

Dense / Linear

Volle Matrix-Multiplikation. Jede Eingabe geht auf jede Ausgabe. Das „Standard-Neuron".

Conv (Faltung)

Ein kleiner Filter wandert über ein Bild/Signal. Findet lokale Muster (Kanten, Formen).

Attention

Verbindet weit entfernte Stellen im Input. Das Herzstück des Transformers (gleich mehr).

RNN / LSTM

Sequenz-Schleife mit Gedächtnis. Vorgänger des Transformers.

Norm (Batch/Layer)

Skaliert Werte, hält Training stabil.

Activation

Nicht-linear (ReLU, GELU) — macht das Netz ausdrücklich.

Grafik: Convolution (Filter über Bild)

Eingabe 4×4 Kernel 3×3 Ausgabe 2×2 =gewichtete Summe

Der Kernel (3×3) wird über das Bild geschoben; an jeder Position entsteht 1 Ausgabewert. Das ist ein „Operator" (siehe Region E/H).

Operatoren vs. Layer

Layer

  • Logische Bausteine: Dense, Conv, Attention…
  • Definieren was berechnet wird (Architektur).

Operatoren (Ops)

  • Die atomare Rechen-Implementierung.
  • z.B. MatMul, Conv2D, ReLU, Softmax, LayerNorm.
  • Die Inference-Engine bringt die Ops mit.

„Layer" ist die Modell-Sicht, „Operator" die Ausführungs-Sicht. Dein AI Layer muss beide kennen, um Modelle abstrahiert anzusprechen.

B·T Transformer — der tiefe Tauchgang

Du hast gesagt: davon habe ich gar nichts verstanden. Wir bauen es von null auf, mit Beispielen.

TokensEmbeddingPos. EncodingSelf-AttentionFFN

1) Das Problem: Was bedeutet „er"?

Betrachte: „Der Hund beißt den Mann, weil er hungrig ist." — Wer ist „er"? Der Hund. Ein Modell muss Bezüge zwischen weit auseinanderliegenden Wörtern herstellen.

Warum alte Modelle (RNN) scheitern: Ein RNN liest Wort für Wort von links nach rechts und „vergisst" frühe Wörter, je weiter es kommt. Bei langen Sätzen weiß es am Ende nicht mehr, dass „er" zum „Hund" gehört. Der Transformer löst das mit Self-Attention: jedes Wort schaut gleichzeitig auf alle anderen.

Grafik: Self-Attention verbindet „er" mit „Hund"

DerHundbeißt denMann, weilerhungrig Achtung: „er" bezieht sich auf „Hund"

Self-Attention baut für jedes Wort eine Gewichtung über alle anderen Wörter. „er" gewichtet „Hund" hoch, „Mann" niedrig.

2) Tokens & Embeddings: Wörter werden Vektoren

Bevor gerechnet wird, wird jedes Token in einen Vektor (Liste von Zahlen) übersetzt — das „Embedding".

"Hund"  →  [0.21, -0.84, 0.05, 0.93, ...]   (z.B. 512 Zahlen)
"Katze"  →  [0.19, -0.80, 0.07, 0.91, ...]   (ähnlich! → Modell „merkt" Verwandtschaft)
"Auto"   →  [-0.6,  0.30, -0.2, 0.10, ...]   (weit weg)
ECU-Analogie: Wie ein Lookup-Table / eine codierte Messgröße: ein Signalwert wird auf einen festen Vektor abgebildet, mit dem weitergerechnet wird. Der Vektor-Raum ist so trainiert, dass ähnliche Begriffe nahe beieinander liegen.

3) Q, K, V — einfach erklärt

Jedes Wort bekommt drei Vektoren. Die Bibliotheks-Analogie:

Query (Q)

„Wonach suche ich?" — die Frage des Wortes.

Key (K)

„Worüber ich Auskunft gebe" — das Schlagwort eines Wortes.

Value (V)

„Was ich beitrage" — der eigentliche Inhalt.

Attention = für jedes Wort: vergleiche meine Query mit allen Keys → Gewichte → gewichtete Summe der Values. Passt Query zu Key, ist das Gewicht hoch.

4) Die Rechnung (kompakt)

Attention(Q, K, V) = softmax( Q · Kᵀ / √d ) · V
                       └─── Scores ───┘     └─ neue Werte ─┘
   Q·Kᵀ : wie gut passt jedes Wort zu jedem anderen (N×N Matrix)
   /√d  : Skalierung, damit es nicht explodiert
   softmax: Gewichte summieren sich zu 1
   ·V   : gewichteter Mix der Inhalte → kontext-abhängiger Vektor

Das Ergebnis: jeder Wort-Vektor ist jetzt „angereichert" mit Kontext aus den relevanten anderen Wörtern.

Grafik: die Q·Kᵀ-Aufmerksamkeitsmatrix

DerHundbeißter DerHundbeißter hohes Gewicht: „er"→„Hund" Zeile = Quellwort, Spalte = beachtetes Wort

5) Positional Encoding: Reihenfolge zählt

Self-Attention sieht keine Reihenfolge (alle Wörter sind „gleichzeitig" da). Deshalb wird die Position als kleiner Vektor addiert.

Pos 1Pos 3Pos 5

„Der Hund beißt den Mann" ≠ „Den Mann beißt der Hund" — die Positionssignale machen den Unterschied für das Modell sichtbar.

6) Multi-Head: mehrere Perspektiven

Statt einer Attention berechnet der Transformer mehrere parallel („Heads"). Jeder Kopf achtet auf etwas anderes:

Kopf 1: grammatikalische Bezüge

Kopf 2: Bedeutung/Subject

Kopf 3: zeitliche Reihenfolge

Die Ergebnisse werden konkateniert — das ist, warum Transformer so reichhaltig „verstehen".

Grafik: ein Transformer-Block (Encoder)

Input + Position Multi-Head Attention Add & Norm Feed-Forward (MLP) Add & Norm Ausgabe (Kontext-Vektoren)

Solche Blöcke werden gestapelt (z.B. 6–128 mal). „GPT" = nur Decoder-Stapel, „BERT" = nur Encoder-Stapel.

7) Warum Transformer teuer sind (für deine ECU)

Die Q·Kᵀ-Matrix ist N×N bei Sequenzlänge N. Der Rechenaufwand wächst quadratisch mit der Länge.

104080Aufwand ∝ N²
Konsequenz für dich: Auf der ECU sind lange Transformer die härtesten Kandidaten für Quantisierung (E) und spezielle Engine-Optimierung (D). Kurze Sequenzen (z.B. ein Sensor-Wert → Klassifikation) sind problemlos.

Modellformate & Serialisierung

FormatWofür
PyTorch .pt / .pthTraining-Framework (Python).
ONNXFramework-neutraler Zwischen-Standard (dein AI Layer sollte hier ansetzen).
.pte (ExecuTorch)ExecuTorch-Export für embedded/inference.
.tflite (TFLite)TensorFlow-Lite-Format, inkl. TFLM für MCUs.

⬇ nächste Region: worauf läuft das eigentlich — Hardware & Beschleuniger.

C Hardware & Beschleunigung

Wo wird gerechnet? Und was heißt SIMD, CUDA, NPU für deine ECU?

CPU + SIMD

Alles, was du kennst. SIMD = ein Befehl rechnet an vielen Zahlen parallel (AVX, NEON).

GPU + CUDA

Massiv parallel. CUDA = NVIDIAs Plattform. Wichtig fürs Training / Server.

NPU

Spezialchip nur fürs Inference (Int8, MatMul). Effizient, wenig Watt.

Grafik: SIMD — eine Instruktion, viele Daten

A = B = 1 SIMD-Befehl: C = A + B C = statt 4 einzelner Befehle

Deine ECU (ARM) hat NEON-SIMD. Quantisierung (int8) nutzt das besonders gut — 16 Int8-Werte pro 128-bit-Register.

Vergleich: Durchsatz & Effizienz

CPUflexibel, langsam GPUparallel, viel Watt NPUInt8, effizient

Maßstab = „Inferenz-Durchsatz pro Watt" (skizzenhaft). Auf der ECU zählt Effizienz, nicht Rohleistung.

Die ECU-Realität (deine Grenze)

                     Trainings-Welt        ECU / Embedded
RAM                 GB–TB                  KB–wenige MB
Rechenleistung      GPU-Cluster            MHz-Arm, evtl. NPU
Energie             Netzstecker            ~ Watt, thermal limit
Latenz/Sicherheit   best-effort            Echtzeit, Funktionssicherheit
Konsequenz: Auf der ECU zählt jeder Byte und jeder Zyklus. Deshalb: kleine Modelle, Quantisierung (E), und eine Engine (D), die exakt die verfügbaren Ops effizient nutzt. Dein AI Layer ist die Schicht, die „Modell" von „welche Hardware es eigentlich ausführt" trennt.

D Inference-Engine

Die Laufzeit, die das Modell tatsächlich auf der Hardware ausführt. Kern deines Projekts.

Modell-Datei (.pte/.tflite)Engine lädt + interpreriertführt Ops auf HW ausErgebnis
ECU-Analogie: Die Engine ist wie ein Runtime/Task-Scheduler für Modell-Ops. Sie mappt die abstrakten Operatoren (Region B) auf konkrete, für die Hardware optimierte Implementierungen (Kernels) — vergleichbar damit, wie dein RTOS Tasks auf die CPU/den Core plant.

Grafik: Engine-Pipeline

Modell-Datei Loader /Parser Graph-Planer Kernel-Dispatch HW

ExecuTorch & TFLM — deine beiden Ziele

EngineEckdaten
ExecuTorchPyTorch-Ökosystem, .pte-Format, portabel (C++), Backends für CPU/NPU/DSP, gut für On-Device/Edge.
TFLM (TFLite Micro)TensorFlow-Lite-for-Microcontrollers: läuft auf MCUs mit wenigen KB RAM, .tflite, minimale Runtime.
ONNX RuntimeNeutraler Standard, viele Execution-Providers; gut als gemeinsame Zwischenschicht.

Was eine Engine intern tut

Kernels

  • Die hochoptimierten Implementierungen der Operatoren (MatMul, Conv…).
  • Oft in Assembler / SIMD / NPU-Instrinsics.
  • Das ist, wo Latenz gewonnen oder verloren wird.

Backends

  • Wählen aus: CPU(kernel), NPU, DSP, GPU.
  • Dein AI Layer = Abstraktion über diese Backends.
  • Engine lädt Modell → plant Ops → führt aus.

Beispiel: ein Conv-Layer auf der ECU

Modell sagt: Conv2D(input 32x32x3, kernel 3x3x3x16, stride 1)
Engine wählt Backend: CPU-NEON
  → ruft int8-Conv-Kernel auf
  → Kernel nutzt SIMD: 16 Kanäle parallel
  → Ergebnis 30x30x16 in SRAM, nicht DRAM (schneller)
Dein AI Layer: ruft nur infer(conv_layer, input) — egal ob NEON oder NPU.

E Optimierung & Quantisierung

Die Werkzeuge, um ein zu großes Modell auf die ECU zu quetschen — ohne dass es versagt.

fp32 ModellQuantisierungint8 Modell4× kleiner, ~3× schneller

Grafik: fp32-Bereich auf int8-Buckets

-1.0-0.500.51.0 0.3 fp32 (stetig) → int8-Buckets (z.B. -128..127)

Ein Wert wie 0.3 wird auf den nächsten int8-Bucket abgebildet. Man verliert Auflösung, gewinnt aber 4× Speicher und viel Speed.

Die Abbildung, konkret

q = round( r / scale ) + zero_point       // reelle Zahl → int8
r ≈ (q - zero_point) * scale              // int8 → reelle Zahl (zur Anzeige)
// Beispiel: range [-1,1], int8 = [-128,127]
//   scale = 2/255 ≈ 0.00784, zero_point = 0
//   r=0.3  →  q = round(0.3/0.00784) = 38
//   q=38   →  r ≈ 38*0.00784 = 0.298  (Fehler 0.002 — vernachlässigbar)
ECU-Analogie: Wie beim Umschalten von „float" auf „fixed-point" in deinem Regler-Code — man opfert Auflösung für Speicher & Speed, muss aber den Bereich (scale) sauber wählen, sonst läuft es über oder wird zu ungenau.

Weitere Hebel

Pruning

Unwichtige Gewichte auf 0 setzen → kleinere, spärlichere Modelle.

Distillation

Kleines Modell lernt von großem „Lehrer".

Graph-Opt

Ops fusionieren (Conv+BN+ReLU → eine Op), Konstanten falten.

Trade-off-Dreieck

Latenz RAM Genauigkeit int8-Modell stark gepruned

Du kannst nicht alles gleichzeitig maximieren. Dein AI Layer definiert, welcher Punkt „qualifiziert" ist.

F Model-Serving

Wenn Inference zentral/lokal auf einem Server läuft statt auf der ECU.

Client→ HTTP/gRPC →Model-Server→ lädt Modell, batcht, antwortet
ECU-Analogie: Ein Model-Server ist wie ein Service über eine Request/Response-Diagnoseschnittstelle: du schickst eine Anfrage (Input), der Dienst liefert eine Antwort. Unter der Haube läuft eine Engine (D) — nur eben mit viel mehr RAM und evtl. GPU.

Grafik: Request/Response

Client APIGateway Model-Server Engine+ Modell JSON-Inhalt Ergebnis

Begriffe rund um Serving

BegriffBedeutung
Model-ServerProzess, der Modelle lädt & per API bereitstellt (z.B. Triton, TorchServe, vLLM).
API / EndpointVertrag: welche Eingabe → welche Ausgabe (JSON, gRPC).
BatchingMehrere Anfragen zusammen rechnen → höherer Durchsatz.
VersioningWelche Modell-Version läuft gerade? (wichtig fürs Rollback).

Entscheidung: ECU oder Server?

KriteriumOn-Device (ECU)Server (zentral)
Latenzsehr niedrig, lokalNetz-Roundtrip
Datenbleiben lokal (DSGVO-freundlich)verlassen das Fahrzeug
Modellgrößeklein (int8, gepruned)groß möglich
BeispielSensor-Fusion, Not-AusLangzeit-Auswertung, LLM-Copilot

Dein AI Layer definiert die Grenze — manches on-device, manches ausgelagert.

G Agentic AI & Tooling

Prompts, MCP, Skills, Agenten — der Teil, der heute überall auftaucht.

PromptLLMTool/MCPAntwort

Beispiel: ein konkreter Prompt

System:  Du bist ein Diagnose-Assistent für ein Steuergerät.
          Antworte kurz, nur mit JSON.
User:    Der Sensor liefert 0x7F, was bedeutet das?
Assistant:{ "code": "0x7F", "bedeutung": "Dienst nicht unterstützt",
            "aktion": "Prüfe UDS-Session-State" }

Der Prompt steuert das Verhalten — kein Code-Compile, sondern Sprache. Genau hier setzt MCP an.

Prompt, LLM, Agent — Schritt für Schritt

Prompt

Der Text, den du dem Modell gibst („System"- + „User"-Anweisung).

LLM

Large Language Model = großer Transformer (Region B), trainiert auf Text.

Agent

Ein LLM, das Werkzeuge nutzt und Schritte plant, statt nur zu antworten.

Skills = vorgefertigte Fähigkeits-Pakete für einen Agenten (z.B. „Suche im Repo").

MCP — das „USB-C für KI-Tools"

MCP = Model Context Protocol. Ein offener Standard, wie ein LLM/Agent mit externen Systemen spricht.

Agent / LLM MCP-Server Tool: DB Tool: Kalender Tool: ECU-Diag
ECU-Analogie: MCP ist im Prinzip wie eine generische Dienst-Schnittstelle (vergleichbar mit einer sauberen Runtime-Abstraktion): statt jedes Tool fest zu verdrahten, gibt es ein Protokoll, über das der Agent „Werkzeuge" entdeckt und nutzt. Dein AI Layer könnte solche Schnittstellen genauso abstrahieren.

Agent-Loop, durchgespielt

1) User: „Warum ist die Zykluszeit hoch?"
2) Agent denkt → braucht Daten → ruft Tool „Lese-Metrik(zykluszeit)"
3) MCP-Server liefert Wert (z.B. 18 ms statt 8 ms)
4) Agent: „Sensor X ist Flaschenhals" → ruft Tool „Öffne-Ticket"
5) Antwort an User + Ticket erstellt
→ der Agent hat selbstständig geplant und gehandelt

H Synthese: dein AI Layer

Alle Regionen treffen sich hier. Der AI Layer ist die Abstraktion über die Inference-Engines.

        ┌───────────────── AI Layer (dein Framework) ─────────────────┐
Anwendung│  gemeinsame Schnittstelle · Governance · Tooling · Integration│
        └───────┬───────────────────┬───────────────────┬────────────┘
           Backend:             Backend:             Backend:
        ExecuTorch            TFLM (MCU)           ONNX Runtime / Server
           │                    │                    │
        ── ECU (NPU/CPU) ──  ── MCU (KB RAM) ──   ── zentral / GPU ──
Deine Aufgabe: Ein einheitliches Interface, hinter dem ExecuTorch und TFLM stecken. Die Anwendung ruft infer(model, input) — egal welche Engine/Engine-HW unten sitzt. Dazu: Modell-Governance (welche Version, qualifiziert?), Tooling (Export/Quantisierung), Integration ins ECU-RT.

Wo deine Regionen hineinfließen

RegionRolle im AI Layer
B ModellGemeinsames Format (ONNX) als Vertrag nach oben.
C HardwareBackends abstrahieren CPU/NPU/MCU-Grenzen.
D EngineExecuTorch/TFLM als austauschbare Backends.
E QuantPipeline: fp32 → int8, inkl. Genauigkeits-Gate.
F ServingGrenze on-device ↔ zentral definieren.
G AgenticOptional: Diagnose/Tooling via MCP-Schnittstellen.

Nächste Schritte für dich

Lern-Pfad

  • A→B festigen (Tensor/Op-Denken).
  • E (Quantisierung) zuerst praktisch angehen — das ist dein ECU-Knackpunkt.
  • Transformer-Intuition aus Region B·T nutzen.

Konkret ausprobieren

  • ExecuTorch-Beispiel exportieren (.pte).
  • TFLM-Hello-World auf einem Dev-Board.
  • Eine InferenceBackend-Interface-Skizze in C++.

Kurz-Glossar

Regression: Linie/Basisfunktion über Daten. Inference: Modell auf Eingabe anwenden (Laufzeit). Layer/Op: Baustein / atomare Rechen-Impl. Transformer: Architektur mit Self-Attention (LLMs). Self-Attention: jedes Wort gewichtet alle anderen. SIMD/CUDA/NPU: Parallel-Beschleuniger (CPU/GPU/Spezial). Engine: Runtime, die das Modell ausführt (ExecuTorch/TFLM). Quantisierung: fp32→int8, kleiner & schneller. Model-Server: Modell als API-Dienst. Prompt/MCP/Skill/Agent: Anweisung / Tool-Protokoll / Fähigkeit / planender LLM.

Tipp: Dieses Deck ist eine HTML-Datei. Einfach im Browser öffnen — offline, keine Internetverbindung nötig.