Matrixmultiplikations-Engines sind weniger genau als gedacht
In modernen GPUs und maßgeschneiderten Beschleunigern gibt es spezialisierte Recheneinheiten, die Matrixmultiplikationen (GEMM) ausführen. Ein entscheidender Bestandteil dieser Einheiten ist der Accumulator, also der Zwischenspeicher, in dem die Teilprodukte addiert werden.
Der Accumulator hält die laufenden Summen, bevor sie in das endgültige Ergebnis geschrieben werden. Wenn seine Breite zu klein ist, kann er die wachsenden Werte nicht mehr exakt darstellen, was zu Überläufen oder Rundungsfehlern führt. Viele aktuelle Engines nutzen 32‑Bit-Accumulator, obwohl die Eingabewerte oft nur 16‑Bit groß sind – ein Design, das die Genauigkeit einschränkt.
Eine kürzlich veröffentlichte Analyse hat gezeigt, dass einige der populärsten Matrixmultiplikations-Engines größere Abweichungen aufweisen, als zuvor angenommen. Besonders bei großen Matrizen oder bei Mischpräzision (z. B. 16‑Bit Eingaben, 32‑Bit Accumulator) treten Fehler auf, die die Ergebnisse von maschinellem Lernen oder wissenschaftlichen Simulationen beeinträchtigen können.
Für Entwickler bedeutet das: Die Wahl des Hardware-Backends muss nicht nur die Rechenleistung, sondern auch die Genauigkeit des Accumulator berücksichtigen. Softwarebibliotheken sollten gegebenenfalls ihre Algorithmen anpassen, um die gewünschte Präzision zu gewährleisten.