jax-ml/jax

Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more

View on GitHub ↗Jump to charts ↓Open shareable report

Summary Information

Updated 40 minutes ago
Added to GitGenius on October 13th, 2024
Created on October 25th, 2018
Open Issues & Pull Requests: 2,471 (-2)
Number of forks: 3,746
Total Stargazers: 36,209 (+0)
Total Subscribers: 328 (+0)

Repository Insights (GitGenius)

Median issue/PR response: 10.5 hours
Mean response time: 187.7 days
90th percentile: 807.1 days
Tracked items: 2,621

How this project is maintained

Around half of the issues opened in the past year never receive a reply. 87% of open issues come from outside the core team, so the backlog reflects real-world use rather than internal planning. Work labelled "AMD GPU" is answered fastest, typically in under an hour, while "P3 (no schedule)" waits about 14 months. 53% of tracked open issues have had no activity in three months. Only 5% of issues opened in the past year have been closed.

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 1,591
New in 7 days: 11
Closed in 7 days: 5
Avg open age: 806 days
Stale 30+ days: 1,503
Stale 90+ days: 1,371

Recent activity

Opened in 7 days: 8
Closed in 7 days: 5
Comments in 7 days: 10
Events in 7 days: 22

Top labels

  • bug (3,421)
  • enhancement (1,323)
  • question (348)
  • NVIDIA GPU (238)
  • documentation (198)
  • pallas (141)
  • needs info (132)
  • P2 (eventual) (104)

Detailed Description

JAX is a Python library for accelerator-oriented array computation and program transformation, designed for high-performance numerical computing and large-scale machine learning. The library enables composable transformations of Python and NumPy programs, allowing developers to differentiate, vectorize, and compile code to run on GPUs, TPUs, and other hardware accelerators. JAX uses XLA as its compilation backend to scale numerical programs across thousands of devices.

The core of JAX is an extensible system for transforming numerical functions. The jax.grad function provides automatic differentiation capabilities, supporting both reverse-mode differentiation (backpropagation) and forward-mode differentiation that can be composed arbitrarily to any order. Differentiation works through loops, branches, recursion, and closures, enabling derivatives of derivatives of derivatives. The jax.jit function compiles pure functions end-to-end using XLA, while jax.vmap provides auto-vectorization by mapping functions along array axes and pushing loops down onto primitive operations for better performance. These transformations can be composed together, allowing developers to obtain efficient Jacobian matrices or per-example gradients by combining vmap with grad and jit.

For scaling computations across multiple devices, JAX offers three approaches: compiler-based automatic parallelization where the compiler determines data sharding and computation partitioning, explicit sharding with automatic partitioning where data shardings are visible in JAX types, and manual per-device programming with explicit collectives for fine-grained control. The library supports multiple platforms including Linux x86_64, Linux aarch64, Mac aarch64, and Windows, with varying levels of support for CPU, NVIDIA GPU, Google TPU, AMD GPU, Apple GPU, and Intel GPU backends.

The repository is classified across multiple domains including machine learning, differentiable programming, numerical computing, automatic differentiation, and high-performance computing, reflecting its broad applicability across research and production machine learning workloads.

JAX is explicitly positioned as a research project rather than an official Google product, with documentation acknowledging sharp edges and encouraging community feedback through bug reports and feature discussions. The library provides comprehensive installation instructions for different hardware configurations and maintains detailed reference documentation covering both user-facing APIs and developer guidelines for contributing to the project.