FPU: Tausende Python-Pakete könnten falsche Berechnungen liefern

Wenig bekannte Compiler-Optionen und Besonderheiten bei der Gleitkommaarithmetik könnten in Python zu falschen Ergebnissen führen.

Artikel veröffentlicht am ,
Viel Python-Pakete liefern unter Umständen falsche Ergebnisse.
Viel Python-Pakete liefern unter Umständen falsche Ergebnisse. (Bild: Pixabay)

Der Informatiker und Assistant Professor an der NYU Tandon, Brendan Dolan-Gavitt, berichtet auf seinem Blog davon, dass mehr als 2.500 Python-Pakete unter bestimmten Umständen falsche Ergebnisse bei numerischen Berechnungen liefern könnten. Ausgelöst werde dies von einer "kleinen Handvoll" Pakete, die eine tückische Compiler-Option verwendeten, mit der die Berechnungen vermeintlich beschleunigt werden könnten, die Ergebnisse aber eben auch verändert würden.

Stellenmarkt
  1. Projektleiterin / Projektleiter für die Bauwerkserneuerung der Ingenieurbauwerke U-Bahn (w/m/d)
    Berliner Verkehrsbetriebe (BVG), Berlin
  2. Expertin bzw. Experte IT-Sicherheitsarchitektur bzw. Cyber Security (m/w/d)
    Bundesamt für Migration und Flüchtlinge, Nürnberg
Detailsuche

Dies fiel Dolan-Gavitt durch eine Fehlermeldung der Numpy-Bibliothek für numerische Berechnungen auf. Darin wird darauf hingewiesen, dass die sogenannten subnormalen oder nichtnormalisierten Gleitkommazahlen wie Null behandelt werden. Bei den Subnormalen handelt es sich um Zahlen sehr nahe Null. Die Meldung habe für Besorgnis gesorgt, weil Gleitkommaarithmetik notorische Tücken habe, schreibt Dolan-Gavitt, da einige spezialisierte Algorithmen in dem beschriebenen Fall falsche Ergebnisse lieferten.

Ursache für den Fehler ist demnach, dass eine dynamische Bibliothek mit der Compiler-Option -ffast-math erstellt und von dem genutzten Python-Programm geladen wird. Die Compiler-Option führt standardmäßig dazu, dass die CPU-Flags für FTZ (Flush to Zero) und DAZ (Denormals are zero, Nichtnormalisierte als Null) gesetzt werden, und zwar insbesondere auch dann, wenn die Bibliothek dynamisch geladen wird. Dadurch ändert sich aber das Verhalten des gesamten Prozesses, nicht nur der Bibliothek.

Im konkreten Fall des Fehlers von Dolan-Gavitt fand dieser schnell den Verursacher: die Netzwerkbibliothek Gevent. Diese nutzt als Compiler-Option die Optimierung -Ofast, die wiederum -ffast-math impliziert. Wie sich an Gevent selbst zeigte, hat aber aber auch das triviale Abschalten der fehlerbehafteten Option durch -fno-fast-math im Fall der Nutzung von -Ofast anders als erwartet keinen Effekt. Die zuvor versuchte Fehlerbehebung in Gevent führte also nicht zum gewünschten Ergebnis.

Viele weitere Python-Pakete betroffen

Golem Karrierewelt
  1. Container Management und Orchestrierung: virtueller Drei-Tage-Workshop
    23.-25.11.2022, Virtuell
  2. Hands-on C# Programmierung: virtueller Zwei-Tage-Workshop
    08./09.11.2022, virtuell
Weitere IT-Trainings

Weiter schreibt Dolan-Gavitt: "Nachdem das unmittelbare Rätsel gelöst war, wollte ich herausfinden, wie viele andere Projekte (absichtlich oder versehentlich) -ffast-math in ihren dynamischen Bibliotheken, die in PyPI hochgeladen wurden, aktiviert haben könnten." Dafür schrieb der Informatiker zunächst ein Skript, das Binärdateien darauf untersuchen kann, ob die von -ffast-math ausgelösten Veränderungen der FTZ-/DAZ-Flags vorhanden sind.

Mithilfe weiterer Skripte lud Dolan-Gavitt dann das gesamte Python-Paketarchiv herunter und untersuchte die Binärdateien. Demnach haben nur 49 Pakete jemals eine entsprechende Binärdatei verteilt, die mit der möglicherweise fehlerverursachenden Option erstellt wurde.

Python 3: Das umfassende Handbuch: Über 1.000 Seiten Sprachgrundlagen, Objektorientierte Programmierung und Beispielprogramme

Anschließend versuchte der Informatiker, die Metadaten und Abhängigkeiten der Pakete zueinander zu untersuchen, was offenbar nicht besonders einfach war. Dolan-Gavitt schätzt letztlich, dass rund 2.500 Python-Pakete wiederum von einem der gefundenen Pakete abhängen, die bewusst oder unbewusst -ffast-math verwenden. Einige davon haben mehr als eine Million Downloads pro Monat. Zusammen haben die Pakete gar fast zehn Millionen Downloads pro Monat.

Dolan-Gavitt warnt andere Programmierer vor den möglicherweise bisher nicht erkannten Folgen der eventuell fehlerhaften Berechnungen. Darüber hinaus weist er darauf hin, dass das Verhalten der Compiler geändert werden sollte. Ein entsprechender GCC-Bugreport ist aber schon mehr als zehn Jahre alt, ohne dass sich das Verhalten geändert hat. Eine aktuelle Diskussion der LLVM-Entwickler weist zudem darauf hin, dass diese das GCC-Verhalten umsetzen, auch weil dies ebenfalls vor rund zehn Jahren explizit gewünscht war.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed


Aktuell auf der Startseite von Golem.de
E-Mail-Hosting
"Wir haben laufend Probleme mit GMX und Web.de"

Probleme, wie sie die Bahn jüngst mit GMX und Web.de hatte, kennt der Mailprovider Tinc schon lang. Antworten bleibe GMX schuldig, sagt uns der CEO.
Ein Interview von Moritz Tremmel

E-Mail-Hosting: Wir haben laufend Probleme mit GMX und Web.de
Artikel
  1. Europaparlament: Europäische Seekabel sollen militärisch geschützt werden
    Europaparlament
    Europäische Seekabel sollen militärisch geschützt werden

    Eine Studie für das Europaparlament fordert einen besseren militärischen Schutz von Glasfaser-Seekabeln. Es gebe eine größere Anzahl "sehr verwundbarer" Stellen.

  2. Copilot, Java, RISC-V, Javascript, Tor: KI macht produktiver und Rust gewinnt wichtige Unterstützer
    Copilot, Java, RISC-V, Javascript, Tor
    KI macht produktiver und Rust gewinnt wichtige Unterstützer

    Dev-Update Die Diskussion um die kommerzielle Verwertbarkeit von Open Source erreicht Akka und Apache Flink, OpenAI macht Spracherkennung, Facebook hilft Javascript-Enwicklern und Rust wird immer siegreicher.
    Von Sebastian Grüner

  3. Ello LC1: Bastler baut 8-Bit-Computer in Kreditkartengröße
    Ello LC1
    Bastler baut 8-Bit-Computer in Kreditkartengröße

    Der Ello LC1 ist dank cleverer Konstruktion nur unwesentlich dicker als eine Platine und bietet einen Basic-Interpreter sowie ein LC-Display.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • LG OLED TV 2022 65" 120 Hz 1.799€ • ASRock Mainboard f. Ryzen 7000 319€ • MindStar (G.Skill DDR5-6000 32GB 299€, Mega Fastro SSD 2TB 135€) • Alternate (G.Skill DDR5-6000 32GB 219,90€) • Xbox Series S + FIFA 23 259€ • PCGH-Ratgeber-PC 3000€ Radeon Edition 2.500€ [Werbung]
    •  /