Zum Inhalt springen
Kurzer Hinweis: flozi00 TechHub ist ein Solo-Nebenprojekt neben einem Vollzeitjob — persönliche Lernnotizen, keine offiziellen Aussagen. Kritische Schritte selbst prüfen.

Granite Speech 5.0 TurboCTC: Pyramidales Conformer-Serving

Granite Speech 5.0 TurboCTC im Detail: zeitliches Downsampling, Block-Attention, CTC-Selbstkonditionierung, Decoding, Kernel und Einsatzgrenzen.

7 Min. Lesezeitflozi00
aiguideasrspeechconformerctcmachine-learning

ibm-granite/granite-speech-5.0-470m-turboctc ist kein Speech-LLM. Es ist ein Encoder-only-ASR-Checkpoint der 470M-Parameterklasse mit einem Conformer-Stack und einer CTC-Ausgabe. Das aktuelle mehrsprachige Modell unterstützt Englisch, Französisch, Deutsch, Spanisch, Portugiesisch, Italienisch und Japanisch, nutzt ein BPE-Vokabular mit 16.384 Einheiten und steht unter Apache-2.0.1

Für den produktiven Einsatz ist diese Abgrenzung wichtig: Im Inferenzgraphen gibt es keinen autoregressiven Textdecoder. Alle akustischen Ausgabepositionen lassen sich parallel berechnen; anschließend entfernt das Greedy-CTC-Decoding Wiederholungen und Blank-Symbole. Dafür ist das Produkt enger zugeschnitten: Transkription statt eines allgemeinen Sprachassistenten.

KI-Hinweis: Dieser Artikel wurde mit Unterstützung generativer KI erstellt. Redaktionell verantwortlich: Florian Zimmermeister (flozi00). Impressum und Kontakt.

1. Der genaue Tensorpfad

Architektur-Paper und veröffentlichte Konfiguration stimmen bei 16 Conformer-Blöcken, einer Hidden-Breite von 1.024, acht Attention-Heads mit Breite 128, einem Faltungskernel von sieben und Attention-Chunks mit 128 Frames überein.23 Geprüft ist Transformers 5.16.1 am Commit 93c8b7b485963a10800c91f55304db6be211c2bd; der Checkpoint ist auf 1dd23f46f6d4e6eae2531982ba2e33220086dd97 fixiert.4 Für Batchgröße BB, TT Basisframes im Abstand von 10 ms und die gestapelte Länge T0=⌈T/2⌉T_0=\lceil T/2\rceil gilt:

StufeTensorformNominelle Framerate
80 Log-Mel- + 80 Delta-Features[B, T, 160]100 Hz
Benachbarte Paare verketten; Teilpaar auffüllen[B, T0, 320]50 Hz
Eingangsprojektion[B, T0, 1024]50 Hz
Erster Conformer-Block, Stride zwei[B, floor(T0/2), 1024]25 Hz
Zweiter Conformer-Block, Stride zwei[B, floor(T0/4), 1024]12,5 Hz
Blöcke 3–16[B, T', 1024], T' = floor(T0/4)12,5 Hz
Geteilter CTC-Head[B, T', 16384]12,5 Hz

Das erste Reshape halbiert die 100-Hz-Feature-Rate. Die ersten beiden Conformer-Blöcke halbieren die Zeitachse nochmals jeweils einmal. Die Ausgabe läuft damit bei 12,5 Hz, insgesamt Faktor acht unter der ursprünglichen Log-Mel-Sequenz.2 Eine 60-sekündige Eingabe besitzt ungefähr 6.000 ursprüngliche Feature-Frames, 3.000 projizierte Frames, danach etwa 1.500, 750 und schließlich 750 Ausgabepositionen.

Das Downsampling findet innerhalb der Conformer-Blöcke statt. Deren Depthwise-Faltung verwendet Stride zwei. Weil das Attention-Residual noch die längere Sequenz besitzt, werden jeweils zwei benachbarte Residual-Frames vor der Addition gemittelt. Der Code verwendet unfold(1, 2, 2).mean(-1): Ein ungerader letzter Residualframe entfällt, und die Faltungsausgabe wird passend gekürzt. Jeder Stride-Block rundet daher ab, obwohl seine gepaddete Faltung allein aufgerundet lange Ausgaben erzeugen kann. Der Eingabeprozessor füllt dagegen ein unvollständiges Frame-Paar auf; das sind unterschiedliche Rundungsregeln.4

2. Warum Block-Attention den Längenterm ändert

Volle Self-Attention hat pro Head eine Score-Paarzahl proportional zu T2T^2; fusionierte Kernel müssen die vollständige Matrix nicht materialisieren. TurboCTC zerlegt die Zeitachse in unabhängige Chunks mit C=128C=128 Frames. Der Aufwand für Scores beträgt damit näherungsweise

NBlock=⌈T/C⌉C2≈TC,N_{\text{Block}} = \lceil T/C \rceil C^2 \approx TC,

und wächst für ein festes CC linear mit der Aufnahmelänge. Das verkleinert nicht die Feed-Forward-Matrizen mit 1.024×4.0961.024\times4.096, verhindert aber das quadratische Wachstum der Attention bei langen Audios.2

Für 60 Sekunden zeigen die drei Sequenzraten den Effekt. Dies sind aus Tensorformen abgeleitete Zählwerte, keine Latenzmessungen:

StufeFrames128er-BlöckeScores/Head, gepaddetVolle Scores/HeadReduktion
Vor erstem Stride3.00024393.2169.000.00022,9×
Vor zweitem Stride1.50012196.6082.250.00011,4×
Verbleibende Blöcke750698.304562.5005,7×

Bei 50, 25 und 12,5 Hz umfasst ein Chunk mit 128 Frames etwa 2,56, 5,12 und 10,24 Sekunden. Der mit der Tiefe wachsende akustische Horizont gleicht die schrumpfende Sequenz teilweise aus. Blockdiagonale Attention schafft aber auch eine Grenze: Frames in unterschiedlichen Chunks tauschen in einer Schicht keine Attention direkt aus. Faltungen und spätere Schichten können Information weiterreichen, globale Attention ist es dennoch nicht.

Chunk-Attention ist außerdem nicht automatisch eine Streaming-API. Der veröffentlichte Transformers-Pfad nimmt vollständige Tensoren und Masken an. Wer zustandsbehaftetes Streaming verspricht, benötigt weiterhin einen geprüften Chunk-Scheduler, eine Overlap-/Kontextstrategie und eigene Latenzmessungen.

3. Zwischenliegende CTC-Selbstkonditionierung

Gewöhnliches CTC behandelt Token-Emissionen als bedingt unabhängig, sobald die akustische Repräsentation feststeht. TurboCTC speist seine eigene Überzeugung aus der Modellmitte wieder in den Encoder ein:

pt(8)=softmax⁡(Wht(8)+b),hin,t(9)=ht(8)+Apt(8)+c.p^{(8)}_t = \operatorname{softmax}(W h^{(8)}_t+b),\qquad h^{(9)}_{\mathrm{in},t} = h^{(8)}_t + A p^{(8)}_t+c.

Dabei ist pt(8)∈R16384p^{(8)}_t\in\mathbb{R}^{16384}, A∈R1024×16384A\in\mathbb{R}^{1024\times16384}, und c∈R1024c\in\mathbb{R}^{1024} der Injektionsbias. Das Ergebnis ist die Eingabe von Block 9, keine Addition nach Block 9. Mittlerer und finaler CTC-Head teilen Gewichte und Bias. Das Paper beschreibt das Trainingsziel 0,2L8+0,8L160{,}2L_{8}+0{,}8L_{16}; das gewöhnliche forward(labels=...) des veröffentlichten Wrappers berechnet nur den finalen CTC-Verlust und reproduziert damit nicht automatisch das vollständige Trainingsrezept.24

Damit erhält die zweite Encoderhälfte eine Zusammenfassung der Token-Posterioren, ohne einen autoregressiven Decoder einzuführen. Der Mechanismus entfernt weder die CTC-Alignmentsumme noch macht er das Modell zu einem LLM. In der kontrollierten englischen Ablation der Autoren stieg die mittlere WER ohne Selbstkonditionierung von 5,83 auf 6,00. Das ist eine Herstellermessung für Checkpoint und Testmix des Papers, kein garantierter mehrsprachiger Gewinn.2

4. CTC-Mathematik und paralleles Decoding

Für eine Zielsequenz yy summiert CTC die Wahrscheinlichkeiten aller Frame-Pfade, die auf yy kollabieren:

P(y∣x)=∑π∈B−1(y)∏t=1T′pt(πt∣x),LCTC=−log⁡P(y∣x).P(y\mid x)=\sum_{\pi\in\mathcal{B}^{-1}(y)}\prod_{t=1}^{T'}p_t(\pi_t\mid x), \qquad L_{\mathrm{CTC}}=-\log P(y\mid x).

Der Kollapsoperator B\mathcal B fasst zuerst benachbarte wiederholte Labels zusammen und entfernt danach Blanks (hier ID 0). Die Reihenfolge zählt: a, blank, a wird zu aa, nicht zu a. Greedy-Inferenz wählt für jeden Ausgabeframe parallel π^t=arg⁡max⁡kpt(k∣x)\hat\pi_t=\arg\max_k p_t(k\mid x) und wendet danach B\mathcal B an. Es gibt weder eine Token-für-Token-Decoderschleife noch einen Decoder-KV-Cache.

Der breite Head verursacht trotzdem reale Arbeit. Eine dichte Projektion 1024→163841024\to16384 besitzt 16.777.216 Gewichte plus 16.384 Bias-Werte. Bei Materialisierung in BF16 belegen 750 Logit-Zeilen für 60 Sekunden 24,6 MB (23,44 MiB) pro Äußerung. Die Selbstkonditionierung berechnet zusätzlich einen mittleren Vokabularposterior; allein die finale Logit-Payload ist daher keine Schätzung des Spitzenspeichers. Die Größe wächst linear mit dem Batch. Laufzeiten sollten Logits früh freigeben oder fusionieren, wenn nur Greedy-Text benötigt wird.

5. Kernelpfad: Was tatsächlich optimiert wurde

Die Autoren ersetzten Einsum-basierte Content-Attention durch PyTorch scaled_dot_product_attention. Eine Umordnung erlaubte PyTorchs speichereffizienten Attention-Backend statt des MATH-Backends. Das Paper berichtet ausdrücklich, dass sein Shaw-Positionsbiaspfad im gemessenen Setup kein FlashAttention nutzen konnte. Das ist eine versionsspezifische Backend-Grenze, kein Satz gegen jede zukünftige fusionierte Implementierung. Außerdem wurden mathematisch äquivalente 1×11\times1-Conv1d-Operationen durch Linear-Layer ersetzt, weil die ausgewählten Linear-Kernel schneller waren.2

Auf einer H100 mit CUDA 12.4, PyTorch 2.6.0 und Batchgröße 128 berichtet das Paper für beide Codeänderungen zusammen einen um 49 % höheren inversen Echtzeitfaktor (RTFx) – etwa 1,49× Durchsatz, nicht 49 % weniger Laufzeit. Alle vier Varianten nutzten Greedy-Decoding und denselben Checkpoint vor Distillation mit 5,83 % aggregierter WER.2 Damit wird eine Implementierungsänderung isoliert; für andere GPUs, Batchgrößen, Compiler oder den aktuellen mehrsprachigen Checkpoint ist dies kein 49-%-Versprechen.

Das veröffentlichte Modell wird direkt von AutoModelForCTC in Transformers 5.16 oder neuer unterstützt und ist auch mit MLX Audio aufgeführt.1 Die geprüfte Hub-Revision ist auf 1dd23f46f6d4e6eae2531982ba2e33220086dd97 fixiert; die geprüfte config.json enthält unter anderem subsample_layers: [0, 1], context_size: 128, BF16-Gewichte und die oben genannten Dimensionen.3

6. LLM-Distillation nur beim Training

Der englische Checkpoint des Papers nutzte vorübergehend einen Decoder mit 75 Millionen Parametern, vier Schichten und Cross-Attention auf die finalen Encoderzustände. Er lernte die auf zehn Top-Token begrenzte Verteilung von Granite 4.1 8B. Dieser Hilfsdecoder und der eingefrorene 100K-Token-Teacher-Head wurden nach dem Training verworfen.2

„Von einem LLM destilliert“ bedeutet daher nicht, dass im Betrieb ein 8B-Modell geladen wird. Das Serving besteht weiterhin aus dem Conformer der 470M-Klasse und seinem CTC-Head. Ebenso übernimmt es nicht die offene Textgenerierung des Teachers.

Bei Datenmengen ist Vorsicht nötig: Das Architektur-Paper beschreibt ungefähr 60.000 Stunden für das ursprüngliche englische Training. Die Model Card des mehrsprachigen Updates vom 21. Oktober nennt ungefähr 153.000 Stunden.1 Ergebnisse des englischen Papers dürfen nicht stillschweigend als mehrsprachige Messungen bezeichnet werden.

7. Einsatzgrenze in der Produktion

TurboCTC ist interessant, wenn Transkription im Mittelpunkt steht, parallele Batchverarbeitung zählt und ein kompakter Apache-2.0-Checkpoint einem autoregressiven Speech-LLM vorzuziehen ist. Feste Attention-Chunks und 8-fache Zeitreduktion begrenzen direkt die teure Sequenzdimension; CTC entfernt die Decoderschleife.

Vor dem Einsatz zu prüfen sind:

  • Eingabe-Samplerate (16 kHz), Kanalmischung sowie sehr kurze oder leere Clips;4
  • WER je Sprache, Akzent, Rauschen, Kanal und Domänenvokabular;
  • Ende-zu-Ende-Latenz bei der vorgesehenen Batchgröße statt nur beim H100-Setup mit Batch 128;
  • Chunk-Grenzen bei langen Aufnahmen sowie jeder Streaming-Wrapper;
  • Anforderungen an Zeitstempel, Diarisierung, Contextual Biasing und Beam Search; und
  • Speicher für Aktivierungen und den 16K-Logit-Head, nicht nur die Parameter.

Die Model Card positioniert den Checkpoint für Transkription mit niedriger Latenz und hohem Durchsatz. Das macht ihn nicht zum direkten Ersatz für Systeme mit Übersetzung, Dialog, Sprecherzuordnung oder integriertem Sprachmodell. Ein Vergleichspunkt ist Parakeet FastConformer-TDT: Beide komprimieren akustische Zeit, TDT sagt jedoch Token-Dauern in einer Transducer-Schleife voraus, während TurboCTC Frame-Posterioren ausgibt und mit CTC kollabiert.

Quellen

Footnotes

  1. IBM Granite, Model Card zu granite-speech-5.0-470m-turboctc (mehrsprachiges Update vom 21. Oktober 2026; Sprachen, Trainingsstunden, Laufzeitanforderungen und Lizenz). https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc/blob/1dd23f46f6d4e6eae2531982ba2e33220086dd97/README.md ↩ ↩2 ↩3

  2. Kingsbury et al., Design of the IBM Granite 5.0 TurboCTC ASR Model, arXiv:2609.20104 (Architektur, Ablationen, Distillation nur beim Training und Kernelmessungen). https://arxiv.org/html/2609.20104v1 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  3. IBM Granite, veröffentlichte config.json, geprüft am Hub-Stand 1dd23f4 am 25. Oktober 2026. https://huggingface.co/ibm-granite/granite-speech-5.0-470m-turboctc/blob/1dd23f46f6d4e6eae2531982ba2e33220086dd97/config.json ↩ ↩2

  4. Hugging Face Transformers 5.16.1, Commit 93c8b7b485963a10800c91f55304db6be211c2bd: Encoder-/CTC-Code und Feature-Extraktor. Downsampling, Padding, Selbstkonditionierung, Head-Bindung und Decoding. ↩ ↩2 ↩3 ↩4