JAX: Komponierbare Transformationen für Python- und NumPy-Programme
Zusammensetzbare Transformationen von Python+NumPy-Programmen: Differenzieren, Vektorisieren, JIT zu GPU/TPU und mehr.
Auf einen Blick
- Was ist das?
- Das README von jax-ml/jax erläutert die Transformationen grad, jit und vmap, die drei Skalierungsmodi und welche Plattformen CPU-, GPU- und TPU-Unterstützung erhalten.
- Für wen ist es gedacht?
- Das README stellt JAX als ein System dar, das drei Transformationen, grad, jit und vmap, über Python- und NumPy-Programmen kombiniert und sie mit einem von drei Gerätemodi skaliert. Alles, was über die Beispiele und Tabellen des README hinausgeht, steht in der verlinkten Dokumentation unter docs.jax.dev.
- Darf ich es kommerziell nutzen?
- Ja. Apache-2.0 ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Das Repository hat innerhalb des letzten Tages neue Commits erhalten.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich Python, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Eine Bibliothek zum Transformieren numerischer Funktionen
JAX ist eine Python-Bibliothek für beschleunigerorientierte Array-Berechnung und Programmtransformation, ausgelegt auf Hochleistungs-Numerik und maschinelles Lernen im großen Maßstab. Die zentrale Aussage des README ist, dass JAX native Python- und NumPy-Funktionen automatisch differenzieren kann, und zwar durch Schleifen, Verzweigungen, Rekursion und Closures hindurch. Rückwärtsmodus-Differenzierung wird über jax.grad bereitgestellt, Vorwärtsmodus wird ebenfalls unterstützt, und beide lassen sich in beliebiger Ordnung kombinieren. Darunter kompiliert XLA die NumPy-Programme und führt sie auf TPUs, GPUs und anderen Hardware-Beschleunigern aus. Das README merkt außerdem an, dass Kompilierung und automatische Differenzierung beliebig kombiniert werden können.
Drei Transformationen im Kern: grad, jit und vmap
Das README stellt drei Transformationen als Kern des Systems vor. jax.grad berechnet Gradienten im Rückwärtsmodus; die Beispiele zeigen eine tanh-Funktion, die einmal und dreimal differenziert wird, sowie eine Funktion mit if/else-Verzweigung. jax.jit kompiliert Funktionen mit XLA Ende-zu-Ende, entweder als Dekorator oder als Funktion höherer Ordnung, und schränkt die Art von Python-Kontrollfluss ein, die eine Funktion verwenden kann. jax.vmap bildet eine Funktion entlang von Array-Achsen ab, indem es die Schleife auf die primitiven Operationen der Funktion herunterdrückt, sodass Matrix-Vektor-Multiplikationen zu Matrix-Matrix-Multiplikationen werden und Batch-Dimensionen nicht mehr im Code mitgeführt werden müssen. Für mehr Details verweist das README auf das Autodiff-Cookbook und die Referenzdokumentation.
grad, jit und vmap auf einer Verlustfunktion kombiniert
Das Hauptbeispiel im README definiert eine Vorhersagefunktion, die in einer Schleife über Parameterpaare läuft, sowie einen quadratischen Fehlerverlust, und konstruiert dann grad_loss = jax.jit(jax.grad(loss)) und perex_grads = jax.jit(jax.vmap(grad_loss, in_axes=(None, 0, 0))), um schnelle Gradienten pro Beispiel zu erhalten. Dasselbe Muster erscheint im Abschnitt zur Skalierung erneut: Ein mit jit und grad behandelter Verlust wird auf explizit shardierten Parametern und Daten ausgewertet. Die Beispielausgabe druckt Typen wie f32[512@data,512], was zeigt, dass der Parametertensor eine Shardierungs-Annotation für die data-Achse trägt.
Drei Skalierungsmodi, von automatisch bis manuell
Um Berechnungen auf Tausende von Geräten zu skalieren, dokumentiert das README drei Ansätze. Automatische Parallelisierung durch den Compiler erlaubt es, so zu programmieren, als gäbe es eine einzige globale Maschine; der Compiler wählt, wie Daten shardiert und Berechnungen partitioniert werden, mit einigen vom Benutzer vorgegebenen Einschränkungen. Explizites Sharding mit automatischer Partitionierung behält die globale Sicht bei, macht aber Daten-Shardings in den JAX-Typen sichtbar, die mit jax.typeof inspiziert werden können. Manuelle Geräteprogrammierung wechselt zu einer Sicht pro Gerät und erlaubt explizite Kollektive. Die Tabelle im README fasst die drei Modi nach Sicht, explizitem Sharding und expliziten Kollektiven zusammen.
Plattformunterstützung und dokumentierte Installationsbefehle
Die Plattformmatrix im README listet CPU-Unterstützung für Linux x86_64, Linux aarch64, Mac aarch64, Windows x86_64 und Windows WSL2 x86_64. NVIDIA GPU wird auf beiden Linux-Varianten unterstützt, ist unter Windows WSL2 experimentell und anderswo nicht verfügbar. Google TPU ist nur für Linux x86_64 vorgesehen. AMD GPU wird auf Linux x86_64 unterstützt und ist unter Windows WSL2 experimentell. Apple GPU ist auf Mac aarch64 experimentell, Intel GPU auf Linux x86_64. Die im README angegebenen Installationsbefehle lauten: pip install -U jax für CPU, pip install -U "jax[cuda13]" für NVIDIA GPU, pip install -U "jax[tpu]" für Google TPU und pip install -U "jax[rocm7-local]" für AMD GPU unter Linux. Für Intel GPU gelten Intels eigene Anweisungen. Alternative Strategien wie Kompilieren aus dem Quellcode, Docker, andere CUDA-Versionen und ein Community-conda-Build verweist das README auf die Dokumentation.
Status, Zitierweise und die Apache-2.0-Lizenz
Das README sagt klar, dass JAX ein Forschungsprojekt und kein offizielles Google-Produkt ist, warnt vor scharfen Kanten und verweist auf das Gotchas-Notebook und den Issue-Tracker. Der Zitations-Eintrag listet die Autoren in alphabetischer Reihenfolge, verwendet die Version 0.3.13 aus jax/version.py und nennt 2018 als Jahr der Open-Source-Veröffentlichung. Eine frühe Version, die nur automatische Differenzierung und XLA-Kompilierung unterstützte, wurde in einem SysML-2018-Papier beschrieben; das README sagt, dass an einem umfassenderen und aktuelleren Papier gearbeitet wird. Das Repository steht unter Apache-2.0, das eine dauerhafte, weltweite, nicht-exklusive, kostenlose, lizenzgebührenfreie und unwiderrufliche Urheberrechtslizenz sowie eine entsprechende Patentlizenz gewährt, die erlischt, wenn der Lizenznehmer eine Patentklage einreicht. Der Lizenzauszug enthält keine Aussagen zu Garantie, Support oder Sicherheitslage. Die Repository-Metadaten zeigen zum Zeitpunkt der Erstellung dieses Artikels 36.103 Sterne, 3.716 Forks und 2.554 offene Issues. Für eine konkrete Prüfung eignet sich das im README gezeigte Muster `jax.jit(jax.grad(loss))` zusammen mit `jax.vmap`; dabei sollten die Ausgaben von `jax.typeof` und die tatsächliche Gerätebelegung beobachtet werden. Die Warnung vor scharfen Kanten ist für Python-Kontrollfluss unter `jax.jit` praktisch relevant.
Redaktionelles Fazit
Das README stellt JAX als ein System dar, das drei Transformationen, grad, jit und vmap, über Python- und NumPy-Programmen kombiniert und sie mit einem von drei Gerätemodi skaliert. Alles, was über die Beispiele und Tabellen des README hinausgeht, steht in der verlinkten Dokumentation unter docs.jax.dev. Für eine konkrete Prüfung eignet sich das im README gezeigte Muster `jax.jit(jax.grad(loss))` zusammen mit `jax.vmap`; dabei sollten die Ausgaben von `jax.typeof` und die tatsächliche Gerätebelegung beobachtet werden. Die Warnung vor scharfen Kanten ist für Python-Kontrollfluss unter `jax.jit` praktisch relevant.
Community-Notizen