|
| 1 | +(about-the-project)= |
| 2 | + |
| 3 | +# About the project |
| 4 | + |
| 5 | +The JAX project is led by the JAX core team. We develop in the open, |
| 6 | +and welcome open-source contributions from across the community. We |
| 7 | +frequently see contributions from [Google |
| 8 | +DeepMind](https://deepmind.google/), Alphabet more broadly, |
| 9 | +[NVIDIA](https://docs.nvidia.com/deeplearning/frameworks/jax-release-notes/overview.html), |
| 10 | +and elsewhere. |
| 11 | + |
| 12 | +At the heart of the project is the [JAX |
| 13 | +core](http://github.com/google/jax) library, which focuses on the |
| 14 | +fundamentals of machine learning and numerical computing, at scale. |
| 15 | + |
| 16 | +When [developing](#development) the core, we want to maintain agility |
| 17 | +and a focused scope, so we lean heavily on a surrounding [modular |
| 18 | +technology stack](#components). First, we design the `jax` module |
| 19 | +to be |
| 20 | +[composable](https://github.com/jax-ml/jax?tab=readme-ov-file#transformations) |
| 21 | +and |
| 22 | +[extensible](https://jax.readthedocs.io/en/latest/jax.extend.html), so |
| 23 | +that a wide variety of domain-specific libraries can thrive outside of |
| 24 | +it in a decentralized manner. Second, we lean heavily on a modular |
| 25 | +backend stack (compiler and runtime) to target different |
| 26 | +accelerators. Whether you are [writing a new domain-specific library |
| 27 | +built with JAX](#upstack), or looking to [support |
| 28 | +new hardware](#downstack), you can often |
| 29 | +contribute these with *minimal to no modifications* to the JAX core |
| 30 | +codebase. |
| 31 | + |
| 32 | +Many of JAX's core contributors have roots in open-source software and |
| 33 | +in research, in fields spanning computer science and the natural |
| 34 | +sciences. We strive to continuously enable the cutting edge of machine |
| 35 | +learning and numerical computing---across all compute platforms and |
| 36 | +accelerators---and to discover the truths of array programming at |
| 37 | +scale. |
| 38 | + |
| 39 | +(development)= |
| 40 | +## Open development |
| 41 | + |
| 42 | +JAX's day-to-day development takes place in the open on GitHub, using |
| 43 | +pull requests, the issue tracker, discussions, and [JAX Enhancement |
| 44 | +Proposals |
| 45 | +(JEPs)](https://jax.readthedocs.io/en/latest/jep/index.html). Reading |
| 46 | +and participating in these is a good way to get involved. We also |
| 47 | +maintain [developer |
| 48 | +notes](https://jax.readthedocs.io/en/latest/contributor_guide.html) |
| 49 | +that cover JAX's internal design. |
| 50 | + |
| 51 | +The JAX core team determines whether to accept changes and |
| 52 | +enhancements. Maintaining a simple decision-making structure currently |
| 53 | +helps us develop at the speed of the research frontier. Open |
| 54 | +development is a core value of ours, and we may adapt to a more |
| 55 | +intricate decision structure over time (e.g. with designated area |
| 56 | +owners) if/when it becomes useful to do so. |
| 57 | + |
| 58 | +For more see [contributing to |
| 59 | +JAX](https://jax.readthedocs.io/en/latest/contributing.html). |
| 60 | + |
| 61 | +(components)= |
| 62 | +## A modular stack |
| 63 | + |
| 64 | +To enable (a) a growing community of users across numerical domains, |
| 65 | +and (b) an advancing hardware landscape, we lean heavily on |
| 66 | +**modularity**. |
| 67 | + |
| 68 | +(upstack)= |
| 69 | +### Libraries built on JAX |
| 70 | + |
| 71 | +While the JAX core library focuses on the fundamentals, we want to |
| 72 | +encourage domain-specific libraries and tools to be built on top of |
| 73 | +JAX. Indeed, [many |
| 74 | +libraries](https://jax.readthedocs.io/en/latest/#ecosystem) have |
| 75 | +emerged around JAX to offer higher-level features and extensions. |
| 76 | + |
| 77 | +How do we encourage such decentralized development? We guide it with |
| 78 | +several technical choices. First, JAX's main API focuses on basic |
| 79 | +building blocks (e.g. numerical primitives, NumPy operations, arrays, |
| 80 | +and transformations), encouraging auxiliary libraries to develop |
| 81 | +utilities as needed for their domain. In addition, JAX exposes a |
| 82 | +handful of more advanced APIs for |
| 83 | +[customization](https://jax.readthedocs.io/en/latest/notebooks/Custom_derivative_rules_for_Python_code.html) |
| 84 | +and |
| 85 | +[extensibility](https://jax.readthedocs.io/en/latest/jax.extend.html). Libraries |
| 86 | +can [lean on these |
| 87 | +APIs](https://jax.readthedocs.io/en/latest/building_on_jax.html) in |
| 88 | +order to use JAX as an internal means of implementation, to integrate |
| 89 | +more with its transformations like autodiff, and more. |
| 90 | + |
| 91 | +Projects across the JAX ecosystem are developed in a distributed and |
| 92 | +often open fashion. They are not governed by the JAX core team, even |
| 93 | +though sometimes team members contribute to them or maintain contact |
| 94 | +with their developers. |
| 95 | + |
| 96 | +(downstack)= |
| 97 | +### A pluggable backend |
| 98 | + |
| 99 | +We want JAX to run on CPUs, GPUs, TPUs, and other hardware platforms |
| 100 | +as they emerge. To encourage unhindered support of JAX on new |
| 101 | +platforms, the JAX core emphasizes modularity in its backend too. |
| 102 | + |
| 103 | +To manage hardware devices and memory, and for compilation to such |
| 104 | +devices, JAX calls out to the open [XLA |
| 105 | +compiler](https://openxla.org/) and the [PJRT |
| 106 | +runtime](https://github.com/openxla/xla/tree/main/xla/pjrt/c#pjrt---uniform-device-api). Both |
| 107 | +of these are projects external to the JAX core, governed and |
| 108 | +maintained by OpenXLA (again, with frequent contributions from and |
| 109 | +discussion with the JAX core developers). |
| 110 | + |
| 111 | +XLA aims for interoperability across accelerators (e.g. by ingesting |
| 112 | +[StableHLO](https://openxla.org/stablehlo) as input) and PJRT offers |
| 113 | +extensibility through a plug-in device API. Adding support for new |
| 114 | +devices is done by implementing a backend lowering for XLA, and |
| 115 | +implementing a plug-in device API defined by PJRT. If you're looking |
| 116 | +to contribute to compilation, or to supporting new hardware, we |
| 117 | +encourage you to contribute at the XLA and PJRT layers. |
| 118 | + |
| 119 | +These open system components allow third parties to support JAX on new |
| 120 | +accelerator platforms, *without requiring changes in the JAX |
| 121 | +core*. There are several plug-ins in development today. For example, a |
| 122 | +team at Apple is working on a PJRT plug-in to get [JAX running on |
| 123 | +Apple Metal](https://developer.apple.com/metal/jax/). |
0 commit comments