JAX

AI

Composable transformations of NumPy programs — autodiff, JIT and vectorization.

Latest v0.11.0 · by GoogleWebsitejax-ml/jax

Release activity

Release activity — 14 releases across 14 days in the last year. Each cell is one day; darker means more releases that day. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 2026No releases on May 12, 2026No releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
WednesdayNo releases on Apr 29, 2026No releases on May 6, 2026No releases on May 13, 20261 release on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 20261 release on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026
ThursdayNo releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 20261 release on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

14 releases in the last year

Changelog

v0.11.0

JAX v0.11.0

Added 4
  • Add hijax API documentation and helpers in jax.experimental.hijax for deriving VJPHiPrimitive autodiff rules including linearize_from_jvp, apply_derived_linearization, vjp_fwd_from_jvp, transpose_jvp, vjp_fwd_from_lin, transpose_linearized, and jvp_from_lin
  • Add jax.custom_remat to the top-level jax namespace for per-function control of rematerialization under the new jax_remat3 implementation
  • Expose SaveOnlyTheseNames, SaveAnyNamesButThese, and SaveAndOffloadOnlyTheseNames policy classes in jax.checkpoint_policies
  • Add jax.Inline enum for specifying inlining policies to jax.jit
Changed 2
  • Convert jax.checkpoint_policies from a namespace object to a submodule, enabling from jax.checkpoint_policies import ... syntax
  • Change jax.numpy.empty and jax.numpy.empty_like to produce uninitialized arrays instead of zero-initialized arrays
Removed 7
  • Remove deprecated jax.cloud_tpu_init module
  • Drop support for Python 3.11
  • Drop support for NumPy 2.0
  • Drop support for SciPy 1.14
  • Drop support for Python 3.13 free-threaded build
  • Remove previously-deprecated APIs from jax.core including CallPrimitive, DebugInfo, DropVar, Effect, Effects, InconclusiveDimensionOperation, JaxprTypeError, abstract_token, check_jaxpr, concrete_or_error, find_top_trace, gensym, get_opaque_trace_state, is_concrete, is_constant_dim, is_constant_shape, jaxprs_in_params, new_jaxpr_eqn, no_effects, nonempty_axis_env_DO_NOT_USE, primal_dtype_to_tangent_dtype, unsafe_am_i_under_a_jit_DO_NOT_USE, unsafe_am_i_under_a_vmap_DO_NOT_USE, unsafe_get_axis_names_DO_NOT_USE, valid_jaxtype, JaxprPpContext, JaxprPpSettings, OutputType, aval_mapping_handlers, call, concretization_function_error, custom_typechecks, literalable_types, no_axis_name, and trace_ctx
  • Remove previously-deprecated APIs from jax.interpreters.pxla including Index, MeshAxisName, MeshExecutable, global_aval_to_result_handler, global_result_handlers, are_hlo_shardings_equal, is_hlo_sharding_replicated, ArrayMapping, _UNSPECIFIED, array_mapping_to_axis_resources, and op_sharding_to_indices
Deprecated 1
  • Deprecate passing 2-dimensional arrays or mixed 2D and 3D arrays to jax.numpy.cross, to be removed in JAX 0.12.0
  • New features

    • Added a doc on defining custom derivative rules with the experimental hijax API (hijax-custom-derivatives), along with jax.experimental.hijax helpers for deriving VJPHiPrimitive autodiff rules from a jvp or lin rule: linearize_from_jvp with apply_derived_linearization, vjp_fwd_from_jvp with transpose_jvp, vjp_fwd_from_lin with transpose_linearized, and jvp_from_lin.
    • Added jax.custom_remat to the top-level jax namespace, for per-function control of rematerialization under the new jax_remat3 implementation.
    • jax.checkpoint_policies is now a submodule rather than a namespace object (so from jax.checkpoint_policies import ... now works; attribute access is unchanged), and it additionally exposes the name-based policy classes SaveOnlyTheseNames, SaveAnyNamesButThese, and SaveAndOffloadOnlyTheseNames.
    • Added jax.Inline enum for specify inlining policies to jax.jit.
  • Breaking changes

    • The deprecated module jax.cloud_tpu_init was removed. This did nothing and references to it can be safely removed.
    • Support for Python 3.11, NumPy 2.0, and SciPy 1.14 has been dropped, per the deprecation policy.
    • Support for Python 3.13 free-threaded (3.13t) has been dropped. Python 3.13 free-threaded was an experimental build needed to bootstrap free threading support. Now that Python 3.14t is stable, it is time to drop the experimental build. Other parts of the Python ecosystem (e.g. cibuildwheel, scipy) are making similar moves.
    • jax.numpy.empty and jax.numpy.empty_like now produce uninitialized arrays, similar to their NumPy counterparts. Prior to v0.11.0, they produced arrays initialized to zeros. To recover the previous behavior, use jax.numpy.zeros or jax.numpy.zeros_like instead.
  • Deprecations

    • Passing 2-dimensional arrays (or mixed 2D and 3D arrays) to jax.numpy.cross is deprecated and will be removed in JAX 0.12.0, aligning with NumPy 2.5 behavior.
    • Several previously-deprecated APIs from jax.core have been removed, including CallPrimitive, DebugInfo, DropVar, Effect, Effects, InconclusiveDimensionOperation, JaxprTypeError, abstract_token, check_jaxpr, concrete_or_error, find_top_trace, gensym, get_opaque_trace_state, is_concrete, is_constant_dim, is_constant_shape, jaxprs_in_params, new_jaxpr_eqn, no_effects, nonempty_axis_env_DO_NOT_USE, primal_dtype_to_tangent_dtype, unsafe_am_i_under_a_jit_DO_NOT_USE, unsafe_am_i_under_a_vmap_DO_NOT_USE, unsafe_get_axis_names_DO_NOT_USE, valid_jaxtype, JaxprPpContext, JaxprPpSettings, OutputType, aval_mapping_handlers, call, concretization_function_error, custom_typechecks, literalable_types, no_axis_name, and trace_ctx.
    • Several previously-deprecated APIs from jax.interpreters.pxla have been removed, including Index, MeshAxisName, MeshExecutable, global_aval_to_result_handler, global_result_handlers, are_hlo_shardings_equal, is_hlo_sharding_replicated, ArrayMapping, _UNSPECIFIED, array_mapping_to_axis_resources, and op_sharding_to_indices.
View originalPermalink
How v0.11.0 went
v0.10.2

JAX v0.10.2

Added 4
  • Added jax.scipy.linalg.invhilbert for the closed-form inverse of the Hilbert matrix
  • Added jax.scipy.linalg.invpascal for the inverse of the Pascal matrix
  • Added jax.scipy.linalg.fiedler_companion for constructing the pentadiagonal Fiedler companion matrix of a polynomial
  • Added jax.ShapeDtypeStruct.like as a shortcut for constructing a jax.ShapeDtypeStruct from an object with shape and dtype attributes
Changed 1
  • Improved JAX tracing performance
  • New features
    • Added jax.scipy.linalg.invhilbert for the closed-form inverse of the Hilbert matrix ({jax-issue}#10144).
    • Added jax.scipy.linalg.invpascal for the inverse of the Pascal matrix (#10144).
    • Added jax.scipy.linalg.fiedler_companion for constructing the pentadiagonal Fiedler companion matrix of a polynomial (#10144).
    • Added jax.ShapeDtypeStruct.like -- a shortcut for constructing a jax.ShapeDtypeStruct from an object with shape and dtype attributes.
  • We have made a number of improvements to JAX tracing performance.
View originalPermalink
How v0.10.2 went
v0.10.1

JAX v0.10.1

Added 9
  • Added ResizeMethod.AREA to jax.image.resize, which matches TensorFlow's AREA resizing
  • Added jax.scipy.linalg.hadamard for constructing Hadamard matrices
  • Added jax.scipy.linalg.circulant for constructing circulant matrices
  • Added jax.scipy.linalg.dft for constructing discrete Fourier transform matrices
  • Added jax.scipy.linalg.leslie for constructing Leslie matrices
  • Added jax.scipy.linalg.companion for constructing companion matrices from polynomial coefficients
Changed 1
  • jax.random.key and wrap_key_data now accept a dtype argument
Deprecated 3
  • with mesh: context manager has been deprecated, use with jax.set_mesh(mesh): instead
  • Passing the copy, order, and ndmin arguments to jax.numpy.array positionally is deprecated, use keyword arguments instead
  • Python dict_values, generators, zip return type and iterators are deprecated by default when used as leaves in pytrees
  • New features

    • Added ResizeMethod.AREA to jax.image.resize, which matches TensorFlow's AREA resizing (#20098).
    • Added jax.scipy.linalg.hadamard for constructing Hadamard matrices (#10144).
    • Added jax.scipy.linalg.circulant for constructing circulant matrices (#10144).
    • Added jax.scipy.linalg.dft for constructing discrete Fourier transform matrices (#10144).
    • Added jax.scipy.linalg.leslie for constructing Leslie matrices (#10144).
    • Added jax.scipy.linalg.companion for constructing companion matrices from polynomial coefficients (#10144).
    • Added jax.scipy.linalg.fiedler for constructing symmetric Fiedler matrices (#10144).
    • Added jax.scipy.linalg.helmert for constructing Helmert matrices (#10144).
    • Moved RNG APIs from "implementations" to dtypes (#27854):
      • Added jax.random.key_dtype to get the dtype corresponding to a PRNG implementation name.
      • jax.random.key and wrap_key_data now accept a dtype argument.
  • Breaking changes

    • with mesh: context manager has been deprecated. Please use with jax.set_mesh(mesh): instead.
  • Deprecations

    • Passing the copy, order, and ndmin arguments to jax.numpy.array positionally is deprecated. Use keyword arguments instead. This matches the signature of numpy.array.
    • Python dict_values, generators, zip return type and iterators generally are deprecated by default when used as leaves in pytrees. In a future version of JAX, this will become an error, if you depend on using them as leaves, pass is_leaf to jax.tree.* methods.
View originalPermalink
How v0.10.1 went
v0.10.0

JAX v0.10.0

Added 6
  • Add ResizeMethod.CUBIC_PYTORCH to jax.image.resize to match PyTorch's bicubic resize
  • Support differentiation of jax.lax.linalg.qr for wide matrices and when full_matrices is True
  • Parallelize LAPACK operations along the batch dimension on CPU
  • Add perturb_singular argument to jax.lax.linalg.tridiagonal_solve to handle singular matrices by perturbing near-zero pivots in the LU decomposition
  • Support computing eigenvectors on CPU and GPU in jax.scipy.linalg.eigh_tridiagonal
  • Add jax.numpy.ndarray.byteswap method
Changed 4
  • JAX CPU devices now report their names as cpu:0, cpu:1, etc. instead of TFRT_CPU_0, TFRT_CPU_1
  • jax.scipy.stats.rankdata now returns floating point values in all cases, following SciPy 1.18
  • Increase minimum supported SciPy version to 1.14
  • Replace vma parameter of jax.ShapeDtypeStruct with manual_axis_type: jax.sharding.ManualAxisType
Fixed 4
  • Fix a bug that led to differing output between CPU and GPU for non-symmetric multidimensional IRFFTs
  • Fix an error when tiny matrices were passed to jax.lax.linalg.tridiagonal_solve on GPU
  • Fix a bug in jax.scipy.fft.dctn and idctn where axes=None incorrectly defaulted to all axes when s was specified
  • Fix jax.distributed.initialize() on a GCE TPU Managed Instance Group raising an IndexError
Removed 8
  • Remove PartitionSpec equality with tuples
  • Remove .vma property from jax.core.ShapedArray in favor of .manual_axis_type.varying
  • Remove config state jax_pmap_shmap_merge; jax.pmap now always uses the new implementation that wraps jax.jit(jax.shard_map)
  • Remove jax.device_put_sharded and jax.device_put_replicated from the public API
  • Remove C++ pmap infrastructure including jax.sharding.PmapSharding and related APIs from jaxlib.xla_extension and jax.interpreters.pxla
  • Remove deprecated keyword arguments a, a_min, and a_max from jax.numpy.clip
  • Remove support for non-ArrayLike inputs to jax.numpy.hstack, jax.numpy.vstack, jax.numpy.dstack, jax.numpy.column_stack, jax.numpy.atleast_1d, jax.numpy.atleast_2d, and jax.numpy.atleast_3d
  • Remove experimental jax.experimental.custom_dce.custom_dce
  • New features:

    • Added ResizeMethod.CUBIC_PYTORCH to jax.image.resize to match PyTorch's bicubic resize (#15768).
    • We now support differentiation of jax.lax.linalg.qr for wide matrices and when full_matrices is True.
    • LAPACK operations are now parallelized along the batch dimension on CPU.
    • Added perturb_singular argument to jax.lax.linalg.tridiagonal_solve to handle singular matrices by perturbing near-zero pivots in the LU decomposition. This is useful for solving numerically singular systems when computing eigenvectors by inverse iteration.
    • jax.scipy.linalg.eigh_tridiagonal now supports computing eigenvectors on CPU and GPU.
    • Added the jax.numpy.ndarray.byteswap method.
  • Breaking changes:

    • PartitionSpec objects no longer report themselves to be equal to tuples. Convert tuples to PartitionSpec objects before testing equality.
    • The .vma property has been removed from jax.core.ShapedArray. Use .manual_axis_type.varying instead.
    • JAX CPU devices now report their names as cpu:0, cpu:1, etc. instead of TFRT_CPU_0, TFRT_CPU_1.
    • The config state jax_pmap_shmap_merge has been removed. jax.pmap will now always use the new implementation that wraps jax.jit(jax.shard_map). Please see https://docs.jax.dev/en/latest/migrate_pmap.html for more information.
    • jax.device_put_sharded and jax.device_put_replicated have been removed from the public API and now raise an AttributeError when accessed. Please see https://docs.jax.dev/en/latest/migrate_pmap.html#drop-in-replacements for drop-in replacements.
    • The C++ pmap infrastructure has been removed. The following public APIs are no longer available:
      • jax.sharding.PmapSharding
      • From jaxlib.xla_extension: PmapFunction, pmap, NoSharding, Chunked, Unstacked, ShardedAxis, Replicated, ShardingSpec.
      • From jax.interpreters.pxla: MapTracer, PmapExecutable, parallel_callable, shard_args, xla_pmap_p, Chunked, NoSharding, Replicated, ShardedAxis, ShardingSpec, Unstacked, spec_to_indices.
    • The deprecated keyword arguments a, a_min, and a_max to jax.numpy.clip have been removed.
    • Functions jax.numpy.hstack, jax.numpy.vstack, jax.numpy.dstack, jax.numpy.column_stack, jax.numpy.atleast_1d, jax.numpy.atleast_2d, and jax.numpy.atleast_3d no longer accept non-ArrayLike inputs. Doing so previously issued a DeprecationWarning.
    • jax.scipy.stats.rankdata now returns floating point values in all cases, following a similar change in the SciPy 1.18 release.
  • Deprecations:

    • A number of internal APIs in jax.core have been newly deprecated and some have been moved to jax.extend.core. These include CallPrimitive, DebugInfo, DropVar, Effect, Effects, InconclusiveDimensionOperation, JaxprTypeError, check_jaxpr, concrete_or_error, find_top_trace, gensym, get_opaque_trace_state, jaxprs_in_params, new_jaxpr_eqn, no_effects, nonempty_axis_env_DO_NOT_USE, primal_dtype_to_tangent_dtype, unsafe_am_i_under_a_jit_DO_NOT_USE, unsafe_am_i_under_a_vmap_DO_NOT_USE, unsafe_get_axis_names_DO_NOT_USE, valid_jaxtype, JaxprPpContext, JaxprPpSettings, OutputType, abstract_token, aval_mapping_handlers, call, concretization_function_error, custom_typechecks, is_concrete, is_constant_dim, is_constant_shape, literalable_types, no_axis_name, pytype_aval_mappings, and trace_ctx.
  • Changes:

    • The minimum supported SciPy version is now 1.14.
    • vma parameter of jax.ShapeDtypeStruct has been replaced with manual_axis_type: jax.sharding.ManualAxisType. The .vma property has been replaced with .manual_axis_type.varying.
    • Removed experimental jax.experimental.custom_dce.custom_dce
    • jax.scipy.linalg.cho_solve, jax.scipy.linalg.lu_solve, and jax.scipy.linalg.solve_triangular now show a deprecation warning for batched 1D solves with b.ndim > 1. In the future these will be treated as batched 2D solves.
    • Added a new version 10 for the jax.export serialization format. This is an optimization for when there are multiple occurrences of the same abstract value, abstract mesh, or sharding.
  • Bug fixes:

    • Fixed a bug that led to differing output between CPU and GPU for non-symmetric multidimensional IRFFTs (#29325).
    • Fixed an error when tiny matrices were passed to jax.lax.linalg.tridiagonal_solve on GPU (#32487).
    • Fixed a bug in jax.scipy.fft.dctn and idctn where axes=None incorrectly defaulted to all axes when s was specified, instead of the last len(s) axes to match SciPy behavior (#29426).
    • Fixed a bug where calling jax.distributed.initialize() on a GCE TPU Managed Instance Group raised an IndexError (#36593). When jax.distributed.initialize() is called on a GCE VM, it uses the GCE metadata server to learn the addresses of all participating tasks. The format of this metadata on Managed Instance Groups was not a format JAX expected, leading to the exception. We now parse this format correctly.
View originalPermalink
How v0.10.0 went
v0.9.2

JAX v0.9.2

Changed 2
  • The semi-private type jax._src.literals.TypedNdArray is now a subclass of np.ndarray, rather than a duck type of it
  • jax.numpy.arange with step specified no longer generates the array on host, resulting in more efficient code but potentially less precise outputs for narrow-width floats like bfloat16
JAX 0.9.2 (March 2, 2026)
  • Changes:
    • The semi-private type jax._src.literals.TypedNdArray is now a subclass of np.ndarray, rather than a duck type of it.
    • jax.numpy.arange with step specified no longer generates the array on host. The benefit is more efficient code, though this can lead to less precise outputs for narrow-width floats (e.g. bfloat16). To recover the previous behavior in this case, use jnp.array(np.arange(...)).
View originalPermalink
How v0.9.2 went
v0.9.1

JAX v0.9.1

Added 1
  • Added a debug config jax_compilation_cache_check_contents that verifies cache contents match when a value is put() and causes misses when get() is called on a value not put() by the current process
Changed 2
  • JAX tracers that are not of Array type (e.g., of Ref type) will no longer report themselves to be instances of Array
  • Using jax.shard_map in Explicit mode will raise an error if the PartitionSpec of input does not match the PartitionSpec specified in in_specs, acting like an assert instead of an implicit reshard
  • Changes:

    • JAX tracers that are not of Array type (e.g., of Ref type) will no longer report themselves to be instances of Array.
    • Using jax.shard_map in Explicit mode will raise an error if the PartitionSpec of input does not match the PartitionSpec specified in in_specs. In other words, it will act like an assert instead of an implicit reshard. in_specs is an optional argument so you can omit specifying it and shard_map will infer the PartitionSpec from the argument. If you want to reshard your inputs, you can use jax.reshard on the arguments and then pass those args to shard_map.
  • New features:

    • Added a debug config jax_compilation_cache_check_contents. If set, we miss when get() is called on a value that has not been put() by the current process, even if the value is actually in the disk cache. When a value is put(), we verify that its contents match.
View originalPermalink
How v0.9.1 went
v0.8.3

JAX v0.8.3

Fixed 2
  • Fixed issue from XLA commit 4bc723da9766d784920f4e566f87afc6ffbf6a5b
  • Fixed issue from XLA commit 21552fd83ec0f02ec3f418f4ac356bfa1d91ce4d
View originalPermalink
How v0.8.3 went
v0.9.0

JAX v0.9.0

Added 1
  • Added jax.thread_guard, a context manager that detects when devices are used by multiple threads in multi-controller JAX
Changed 2
  • jax.export now supports explicit sharding with a new export serialization format version that includes NamedSharding, the abstract mesh, and the partition spec
  • When calling exported modules, the abstract mesh must now match the one used at export time, including the axis names
Fixed 1
  • Fixed a workspace size calculation error for pivoted QR (magma_zgeqp3_gpu) in MAGMA 2.9.0 when using use_magma=True and pivoting=True
Removed 2
  • Removed the flag jax_collectives_common_channel_id
  • Removed the jax_pmap_no_rank_reduction config state; the no-rank-reduction behavior is now the only supported behavior
Deprecated 2
  • Setting the jax_pmap_shmap_merge config state is deprecated and will be removed in JAX v0.10.0
  • jax.numpy.fix is deprecated; jax.numpy.trunc is a drop-in replacement
  • New features:

    • Added jax.thread_guard, a context manager that detects when devices are used by multiple threads in multi-controller JAX.
  • Bug fixes:

    • Fixed a workspace size calculation error for pivoted QR (magma_zgeqp3_gpu) in MAGMA 2.9.0 when using use_magma=True and pivoting=True. (#34145).
  • Deprecations:

    • The flag jax_collectives_common_channel_id was removed.
    • The jax_pmap_no_rank_reduction config state has been removed. The no-rank-reduction behavior is now the only supported behavior: a jax.pmapped function f sees inputs of the same rank as the input to jax.pmap(f). For example, if jax.pmap(f) receives shape (8, 128) on 8 devices, then f receives shape (1, 128).
    • Setting the jax_pmap_shmap_merge config state is deprecated in JAX v0.9.0 and will be removed in JAX v0.10.0.
    • jax.numpy.fix is deprecated, anticipating the deprecation of numpy.fix in NumPy v2.5.0. jax.numpy.trunc is a drop-in replacement.
  • Changes:

    • jax.export now supports explicit sharding. This required a new export serialization format version that includes the NamedSharding, including the abstract mesh, and the partition spec. As part of this change we have added a restriction in the use of exported modules: when calling them the abstract mesh must match the one used at export time, including the axis names. Previously, only the number of the devices mattered.
View originalPermalink
How v0.9.0 went
v0.8.2

JAX v0.8.2

Changed 1
  • jax's Tracer no longer inherits from jax.Array at runtime, but jax.Array now uses a custom metaclass such that isinstance(x, Array) is true if an object x represents a traced Array
Removed 1
  • jax.experimental.si_vjp has been deleted; use jax.vjp instead
Deprecated 4
  • jax.lax.pvary has been deprecated; use jax.lax.pcast(..., to='varying') as the replacement
  • Complex arguments passed to jax.numpy.arange now result in a deprecation warning
  • From jax.core, the following symbols are newly deprecated: call_impl, get_aval, mapped_aval, subjaxprs, set_current_trace, take_current_trace, traverse_jaxpr_params, unmapped_aval, AbstractToken, and TraceTag
  • All symbols in jax.interpreters.pxla are deprecated
  • Deprecations

    • jax.lax.pvary has been deprecated. Please use jax.lax.pcast(..., to='varying') as the replacement.
    • Complex arguments passed to jax.numpy.arange now result in a deprecation warning, because the output is poorly-defined.
    • From jax.core a number of symbols are newly deprecated including: call_impl, get_aval, mapped_aval, subjaxprs, set_current_trace, take_current_trace, traverse_jaxpr_params, unmapped_aval, AbstractToken, and TraceTag.
    • All symbols in jax.interpreters.pxla are deprecated. These are primarily JAX internal APIs, and users should not rely on them.
  • Changes:

    • jax's Tracer no longer inherits from jax.Array at runtime. However, jax.Array now uses a custom metaclass such isinstance(x, Array) is true if an object x represents a traced Array. Only some Tracers represent Arrays, so it is not correct for Tracer to inherit from Array.

      For the moment, during Python type checking, we continue to declare Tracer as a subclass of Array, however we expect to remove this in a future release.

    • jax.experimental.si_vjp has been deleted. jax.vjp subsumes it's functionality.

View originalPermalink
How v0.8.2 went
v0.8.1

JAX v0.8.1

Added 1
  • jax.jit now supports the decorator factory pattern, allowing @jax.jit(static_argnames=['n']) syntax instead of requiring functools.partial
Changed 3
  • jax.lax.linalg.eigh now accepts an implementation argument to select between QR (CPU/GPU), Jacobi (GPU/TPU), and QDWH (TPU) implementations
  • EighImplementation enum is now publicly exported from jax.lax.linalg
  • jax.lax.linalg.svd now implements an algorithm that uses polar decomposition on CUDA GPUs
Fixed 1
  • Fixed a bug introduced in JAX 0.7.2 where eigh failed for large matrices on GPU
Deprecated 5
  • jax.sharding.PmapSharding is deprecated; use jax.NamedSharding instead
  • jax.device_put_replicated is deprecated; use jax.device_put with the appropriate sharding instead
  • jax.device_put_sharded is deprecated; use jax.device_put with the appropriate sharding instead
  • Default axis_types of jax.make_mesh will change in JAX v0.9.0 to return jax.sharding.AxisType.Explicit; leaving axis_types unspecified will raise a DeprecationWarning
  • jax.cloud_tpu_init and its contents are deprecated
  • New features:

    • jax.jit now supports the decorator factory pattern; i.e instead of writing
      @functools.partial(jax.jit, static_argnames=['n'])
      def f(x, n):
        ...
      
      you may write
      @jax.jit(static_argnames=['n'])
      def f(x, n):
        ...
      
  • Changes:

    • jax.lax.linalg.eigh now accepts an implementation argument to select between QR (CPU/GPU), Jacobi (GPU/TPU), and QDWH (TPU) implementations. The EighImplementation enum is publicly exported from jax.lax.linalg.

    • jax.lax.linalg.svd now implements an algorithm that uses the polar decomposition on CUDA GPUs. This is also an alias for the existing algorithm on TPUs.

  • Bug fixes:

    • Fixed a bug introduced in JAX 0.7.2 where eigh failed for large matrices on GPU (#33062).
  • Deprecations:

    • jax.sharding.PmapSharding is now deprecated. Please use jax.NamedSharding instead.
    • jx.device_put_replicated is now deprecated. Please use jax.device_put with the appropriate sharding instead.
    • jax.device_put_sharded is now deprecated. Please use jax.device_put with the appropriate sharding instead.
    • Default axis_types of jax.make_mesh will change in JAX v0.9.0 to return jax.sharding.AxisType.Explicit. Leaving axis_types unspecified will raise a DeprecationWarning.
    • jax.cloud_tpu_init and its contents were deprecated. There is no reason for a user to import or use the contents of this module; JAX handles this for you automatically if needed.
View originalPermalink
How v0.8.1 went
v0.8.0

JAX v0.8.0

Changed 7
  • JAX is changing the default jax.pmap implementation to one implemented in terms of jax.jit and jax.shard_map
  • jax.numpy.cov now returns NaN for empty arrays and matches NumPy 2.2 behavior for single-row design matrices
  • jax.experimental.multihost_utils.process_allgather raises an error when the input is a jax.Array and not fully-addressable and tiled=False
  • jax.numpy.trimzeros now errors for non-1D input
  • The where argument to jax.numpy.sum and other reductions is now required to be boolean
  • jax.numpy.linalg.eig now returns a namedtuple with attributes eigenvalues and eigenvectors instead of a plain tuple
  • jax.grad and jax.vjp will now round primals to float32 if float64 mode is not enabled
Removed 14
  • The auto= parameter of jax.experimental.shard_map.shard_map has been removed
  • JAX no longer allows passing objects that support __jax_array__ directly to jit-ed functions
  • JAX no longer accepts Array values where a dtype value is expected
  • The deprecated function jax.interpreters.mlir.custom_call was removed
  • The jax.util, jax.extend.ffi, and jax.experimental.host_callback modules have been removed
  • The deprecated symbol jax.custom_derivatives.custom_jvp_call_jaxpr_p was removed
  • Breaking changes:

    • JAX is changing the default jax.pmap implementation to one implemented in terms of jax.jit and jax.shard_map. jax.pmap is in maintenance mode and we encourage all new code to use jax.shard_map directly. See the migration guide for more information.
    • The auto= parameter of jax.experimental.shard_map.shard_map has been removed. This means that jax.experimental.shard_map.shard_map no longer supports nesting. If you want to nest shard_map calls, please use jax.shard_map.
    • JAX no longer allows passing objects that support __jax_array__ directly to, e.g. jit-ed functions. Call jax.numpy.asarray on them first.
    • jax.numpy.cov is now returns NaN for empty arrays ({jax-issue}#32305), and matches NumPy 2.2 behavior for single-row design matrices ({jax-issue}#32308).
    • JAX no longer accepts Array values where a dtype value is expected. Call .dtype on these values first.
    • The deprecated function jax.interpreters.mlir.custom_call was removed.
    • The jax.util, jax.extend.ffi, and jax.experimental.host_callback modules have been removed. All public APIs within these modules were deprecated and removed in v0.7.0 or earlier.
    • The deprecated symbol jax.custom_derivatives.custom_jvp_call_jaxpr_p was removed.
    • jax.experimental.multihost_utils.process_allgather raises an error when the input is a jax.Array and not fully-addressable and tiled=False. To fix this, pass tiled=True to your process_allgather invocation.
    • from jax.experimental.compilation_cache, the deprecated symbols is_initialized and initialize_cache were removed.
    • The deprecated function jax.interpreters.xla.canonicalize_dtype was removed.
    • jaxlib.hlo_helpers has been removed. Use jax.ffi instead.
    • The option jax_cpu_enable_gloo_collectives has been removed. Use jax_cpu_collectives_implementation instead.
    • The previously-deprecated interpolation argument to jax.numpy.percentile and jax.numpy.quantile has been removed; use method instead.
    • The JAX-internal for_loop primitive was removed. Its functionality, reading from and writing to refs in the loop body, is now directly supported by jax.lax.fori_loop. If you need help updating your code, please file a bug.
    • jax.numpy.trimzeros now errors for non-1D input.
    • The where argument to jax.numpy.sum and other reductions is now required to be boolean. Non-boolean values have resulted in a DeprecationWarning since JAX v0.5.0.
    • The deprecated functions in jax.dlpack, jax.errors, jax.lib.xla_bridge, jax.lib.xla_client, and jax.lib.xla_extension were removed.
    • jax.interpreters.mlir.dense_bool_array was removed. Use MLIR APIs to construct attributes instead.
  • Changes

    • jax.numpy.linalg.eig now returns a namedtuple (with attributes eigenvalues and eigenvectors) instead of a plain tuple.
    • jax.grad and jax.vjp will now round always primals to float32 if float64 mode is not enabled.
    • jax.dlpack.from_dlpack now accepts arrays with non-default layouts, for example, transposed.
    • The default nonsymmetric eigendecomposition on NVIDIA GPUs now uses cusolver. The magma and LAPACK implementations are still available via the new implementation argument to jax.lax.linalg.eig ({jax-issue}#27265). The use_magma argument is now deprecated in favor of implementation.
    • jax.numpy.trim_zeros now follows NumPy 2.2 in supporting multi-dimensional inputs.
  • Deprecations

    • jax.experimental.enable_x64 and jax.experimental.disable_x64 are deprecated in favor of the new non-experimental context manager jax.enable_x64.
    • jax.experimental.shard_map.shard_map is deprecated; going forward use jax.shard_map.
    • jax.experimental.pjit.pjit is deprecated; going forward use jax.jit.
View originalPermalink
How v0.8.0 went
v0.7.2

JAX v0.7.2

Changed 3
  • Minimum supported NumPy version is now 2.0
  • Minimum supported SciPy version is now 1.13
  • JAX now represents constants in its internal jaxpr representation as a LiteralArray, a private JAX type that duck types as a numpy.ndarray
Fixed 2
  • arr.view(dtype=None) now returns the array unchanged, matching NumPy's semantics
  • jax.random.randint now produces a less-biased distribution for 8-bit and 16-bit integer types
Removed 1
  • jax.dlpack.from_dlpack no longer accepts a DLPack capsule and must be called with an array implementing __dlpack__ and __dlpack_device__
Deprecated 2
  • The parameters enable_xla and native_serialization for jax2tf.convert are deprecated and will be removed in a future version
  • Setting the config state jax_pmap_no_rank_reduction to False is deprecated
  • Breaking changes:

    • jax.dlpack.from_dlpack no longer accepts a DLPack capsule. This behavior was deprecated and is now removed. The function must be called with an array implementing __dlpack__ and __dlpack_device__.
  • Changes

    • The minimum supported NumPy version is now 2.0. Since SciPy 1.13 is required for NumPy 2.0 support, the minimum supported SciPy version is now 1.13.

    • JAX now represents constants in its internal jaxpr representation as a LiteralArray, which is a private JAX type that duck types as a numpy.ndarray. This type may be exposed to users via custom_jvp rules, for example, and may break code that uses isinstance(x, np.ndarray). If this breaks your code, you may convert these arrays to classic NumPy arrays using np.asarray(x).

  • Bug fixes

    • arr.view(dtype=None) now returns the array unchanged, matching NumPy's semantics. Previously it returned the array with a float dtype.
    • jax.random.randint now produces a less-biased distribution for 8-bit and 16-bit integer types ({jax-issue}#27742). To restore the previous biased behavior, you may temporarily set the jax_safer_randint configuration to False, but note this is a temporary config that will be removed in a future release.
  • Deprecations:

    • The parameters enable_xla and native_serialization for jax2tf.convert are deprecated and will be removed in a future version of JAX. These were used for jax2tf with non-native serialization, which has been now removed.
    • Setting the config state jax_pmap_no_rank_reduction to False is deprecated. By default, jax_pmap_no_rank_reduction will be set to True and jax.pmap shards will not have their rank reduced, keeping the same rank as their enclosing array.
View originalPermalink
How v0.7.2 went
v0.7.1

JAX v0.7.1

Added 2
  • JAX now ships Python 3.14 and 3.14t wheels
  • JAX now ships Python 3.13t and 3.14t wheels on Mac
Changed 3
  • Exposed jax.set_mesh which acts as a global setter and a context manager
  • JAX is now built using CUDA 12.9
  • jax.lax.dot now implements the general dot product via the optional dimension_numbers argument
Removed 1
  • Removed jax.sharding.use_mesh in favor of jax.set_mesh
Deprecated 4
  • jax.lax.zeros_like_array is deprecated in favor of jax.numpy.zeros_like
  • Attempting to import jax.experimental.host_callback now results in a DeprecationWarning and will result in an ImportError starting in JAX v0.8.0
  • In jax.lax.dot, passing the precision and preferred_element_type arguments by position is deprecated; pass them by explicit keyword instead
  • Several internal APIs have been deprecated from jax.interpreters.ad, jax.interpreters.batching, and jax.interpreters.partial_eval
  • New features

    • JAX now ships Python 3.14 and 3.14t wheels.
    • JAX now ships Python 3.13t and 3.14t wheels on Mac. Previously we only offered free-threading builds on Linux.
  • Changes

    • Exposed jax.set_mesh which acts as a global setter and a context manager. Removed jax.sharding.use_mesh in favor of jax.set_mesh.
    • JAX is now built using CUDA 12.9. All versions of CUDA 12.1 or newer remain supported.
    • jax.lax.dot now implements the general dot product via the optional dimension_numbers argument.
  • Deprecations:

    • jax.lax.zeros_like_array is deprecated. Please use jax.numpy.zeros_like instead.
    • Attempting to import jax.experimental.host_callback now results in a DeprecationWarning, and will result in an ImportError starting in JAX v0.8.0. Its APIs have raised NotImplementedError since JAX version 0.4.35.
    • In jax.lax.dot, passing the precision and preferred_element_type arguments by position is deprecated. Pass them by explicit keyword instead.
    • Several dozen internal APIs have been deprecated from jax.interpreters.ad, jax.interpreters.batching, and jax.interpreters.partial_eval; they are used rarely if ever outside JAX itself, and most are deprecated without any public replacement.
View originalPermalink
How v0.7.1 went
v0.7.0

JAX v0.7.0

Added 2
  • Added jax.P which is an alias for jax.sharding.PartitionSpec
  • Added jax.tree.reduce_associative
Changed 7
  • JAX is migrating from GSPMD to Shardy by default
  • JAX autodiff is switching to using direct linearization by default instead of implementing linearization via JVP and partial eval
  • jax.jit now requires fun to be passed by position and additional arguments to be passed by keyword
  • The minimum Python version is now 3.11
  • Layout, .layout, .input_layouts and .output_layouts have been renamed to Format, .format, .input_formats and .output_formats
  • DeviceLocalLayout and .device_local_layout have been renamed to Layout and .layout
  • jax.extend.core.primitives.pjit_p primitive has been renamed to jit_p and its name attribute has changed from pjit to jit
Removed 6
  • jax.stages.OutInfo has been replaced with jax.ShapeDtypeStruct
  • jax.experimental.shard module has been deleted and all APIs have been moved to jax.sharding endpoint
  • lax.infeed and lax.outfeed were removed after being deprecated in JAX 0.6
  • transfer_to_infeed and transfer_from_outfeed methods were removed from Device objects
  • jax.extend.backend.add_clear_backends_callback has been removed
  • jax.extend.ffi was removed after being deprecated in v0.5.0; use jax.ffi instead
Deprecated 4
  • jax.dlpack.SUPPORTED_DTYPES is deprecated; use jax.dlpack.is_supported_dtype instead
  • jax.scipy.special.sph_harm has been deprecated; use jax.scipy.special.sph_harm_y instead
  • jax.interpreters.xla.canonicalize_dtype is deprecated; prefer jax.dtypes.canonicalize_dtype for canonicalizing dtypes and jax.core.valid_jaxtype for checking valid jax input
  • jax.lib.xla_bridge.get_compile_options is deprecated and replaced by jax.extend.backend.get_compile_options
  • New features:

    • Added jax.P which is an alias for jax.sharding.PartitionSpec.
    • Added jax.tree.reduce_associative.
  • Breaking changes:

    • JAX is migrating from GSPMD to Shardy by default. See the migration guide for more information.
    • JAX autodiff is switching to using direct linearization by default (instead of implementing linearization via JVP and partial eval). See migration guide for more information.
    • jax.stages.OutInfo has been replaced with jax.ShapeDtypeStruct.
    • jax.jit now requires fun to be passed by position, and additional arguments to be passed by keyword. Doing otherwise will result in an error starting in v0.7.x. This raised a DeprecationWarning in v0.6.x.
    • The minimum Python version is now 3.11. 3.11 will remain the minimum supported version until July 2026.
    • Layout API renames:
      • Layout, .layout, .input_layouts and .output_layouts have been renamed to Format, .format, .input_formats and .output_formats
      • DeviceLocalLayout, .device_local_layout have been renamed to Layout and .layout
    • jax.experimental.shard module has been deleted and all the APIs have been moved to the jax.sharding endpoint. So use jax.sharding.reshard, jax.sharding.auto_axes and jax.sharding.explicit_axes instead of their experimental endpoints.
    • lax.infeed and lax.outfeed were removed, after being deprecated in JAX 0.6. The transfer_to_infeed and transfer_from_outfeed methods were also removed the Device objects.
    • The jax.extend.core.primitives.pjit_p primitive has been renamed to jit_p, and its name attribute has changed from "pjit" to "jit". This affects the string representations of jaxprs. The same primitive is no longer exported from the jax.experimental.pjit module.
    • The (undocumented) function jax.extend.backend.add_clear_backends_callback has been removed. Users should use jax.extend.backend.register_backend_cache instead.
  • Deprecations:

    • {obj}jax.dlpack.SUPPORTED_DTYPES is deprecated; please use the new jax.dlpack.is_supported_dtype function.
    • jax.scipy.special.sph_harm has been deprecated following a similar deprecation in SciPy; use jax.scipy.special.sph_harm_y instead.
    • From {mod}jax.interpreters.xla, the previously deprecated symbols abstractify and pytype_aval_mappings have been removed.
    • jax.interpreters.xla.canonicalize_dtype is deprecated. For canonicalizing dtypes, prefer jax.dtypes.canonicalize_dtype. For checking whether an object is a valid jax input, prefer jax.core.valid_jaxtype.
    • From {mod}jax.core, the previously deprecated symbols AxisName, ConcretizationTypeError, axis_frame, call_p, closed_call_p, get_type, trace_state_clean, typematch, and typecheck have been removed.
    • From {mod}jax.lib.xla_client, the previously deprecated symbols DeviceAssignment, get_topology_for_devices, and mlir_api_version have been removed.
    • jax.extend.ffi was removed after being deprecated in v0.5.0. Use {mod}jax.ffi instead.
    • jax.lib.xla_bridge.get_compile_options is deprecated, and replaced by jax.extend.backend.get_compile_options.
View originalPermalink
How v0.7.0 went
v0.6.2

JAX v0.6.2

Added 1
  • Added jax.tree.broadcast which implements a pytree prefix broadcasting helper
Changed 1
  • The minimum NumPy version is 1.26 and the minimum SciPy version is 1.12
  • New features:

    • Added jax.tree.broadcast which implements a pytree prefix broadcasting helper.
  • Changes

    • The minimum NumPy version is 1.26 and the minimum SciPy version is 1.12.
View originalPermalink
How v0.6.2 went
v0.6.1

JAX v0.6.1

Added 1
  • Added jax.lax.axis_size which returns the size of the mapped axis given its name
Changed 3
  • Additional checking for the versions of CUDA package dependencies was reenabled, having been accidentally disabled in a previous release
  • jax.sharding.PartitionSpec no longer inherits from a tuple
  • jax.ShapeDtypeStruct is immutable now; use the .update method to update ShapeDtypeStruct instead of doing in-place updates
Deprecated 1
  • jax.custom_derivatives.custom_jvp_call_jaxpr_p is deprecated and will be removed in JAX v0.7.0
  • New features:

    • Added jax.lax.axis_size which returns the size of the mapped axis given its name.
  • Changes

    • Additional checking for the versions of CUDA package dependencies was reenabled, having been accidentally disabled in a previous release.
    • JAX nightly packages are now published to artifact registry. To install these packages, see the JAX installation guide.
    • jax.sharding.PartitionSpec no longer inherits from a tuple.
    • jax.ShapeDtypeStruct is immutable now. Please use .update method to update your ShapeDtypeStruct instead of doing in-place updates.
  • Deprecations

    • jax.custom_derivatives.custom_jvp_call_jaxpr_p is deprecated, and will be removed in JAX v0.7.0.
View originalPermalink
How v0.6.1 went
v0.6.0

JAX v0.6.0

Changed 4
  • The minimum CuDNN version is v9.8
  • JAX is now built using CUDA 12.8
  • JAX package extras now use dash instead of underscore to align with PEP 685
  • jax.jit now requires fun to be passed by position, and additional arguments to be passed by keyword
Fixed 1
  • Disallow the calling of lower and trace AOT APIs on the result of jax.jit if there have been subsequent wrappers applied
Removed 8
  • jax.numpy.array no longer accepts None
  • Removed the config.jax_data_dependent_tracing_fallback config option
  • Removed the config.jax_eager_pmap config option
  • Removed the cuda12_pip extra for jax; use pip install jax[cuda12] instead
  • Removed jax.treedef_is_leaf, jax.tree_flatten, jax.tree_map, jax.tree_leaves, jax.tree_structure, jax.tree_transpose, and jax.tree_unflatten from jax
  • Removed numerous deprecated APIs from jax.lib.xla_client including ArrayImpl, FftType, PaddingType, PrimitiveType, XlaBuilder, and others
  • Removed numerous deprecated APIs from jax.core including AxisSize, ClosedJaxpr, EvalTrace, Jaxpr, JaxprEqn, Literal, Primitive, Token, and others
  • Removed the vectorized argument to jax.pure_callback and jax.ffi.ffi_call; use the vmap_method parameter instead
Deprecated 5
  • jax.tree_util.build_tree is deprecated; use jax.tree.unflatten instead
  • All APIs in jax.lib.xla_extension are now deprecated
  • jax.interpreters.mlir.custom_call is deprecated; use APIs provided by jax.ffi instead
  • jax.dlpack.to_dlpack has been deprecated; use the __dlpack__ attribute of an array instead
  • jax.lax.infeed, jax.lax.infeed_p, jax.lax.outfeed, and jax.lax.outfeed_p are deprecated and will be removed in JAX v0.7.0
  • Breaking changes

    • jax.numpy.array no longer accepts None. This behavior was deprecated since November 2023 and is now removed.
    • Removed the config.jax_data_dependent_tracing_fallback config option, which was added temporarily in v0.4.36 to allow users to opt out of the new "stackless" tracing machinery.
    • Removed the config.jax_eager_pmap config option.
    • Disallow the calling of lower and trace AOT APIs on the result of jax.jit if there have been subsequent wrappers applied. Previously this worked, but silently ignored the wrappers. The workaround is to apply jax.jit last among the wrappers, and similarly for jax.pmap. See #27873.
    • The cuda12_pip extra for jax has been removed; use pip install jax[cuda12] instead.
  • Changes

    • The minimum CuDNN version is v9.8.
    • JAX is now built using CUDA 12.8. All versions of CUDA 12.1 or newer remain supported.
    • JAX package extras are now updated to use dash instead of underscore to align with PEP 685. For instance, if you were previously using pip install jax[cuda12_local] to install JAX, run pip install jax[cuda12-local] instead.
    • jax.jit now requires fun to be passed by position, and additional arguments to be passed by keyword. Doing otherwise will result in a DeprecationWarning in v0.6.X, and an error in starting in v0.7.X.
  • Deprecations

    • jax.tree_util.build_tree is deprecated. Use jax.tree.unflatten instead.
    • Implemented host callback handlers for CPU and GPU devices using XLA's FFI and removed existing CPU/GPU handlers using XLA's custom call.
    • All APIs in jax.lib.xla_extension are now deprecated.
    • jax.interpreters.mlir.hlo and jax.interpreters.mlir.func_dialect, which were accidental exports, have been removed. If needed, they are available from jax.extend.mlir.
    • jax.interpreters.mlir.custom_call is deprecated. The APIs provided by jax.ffi should be used instead.
    • The deprecated use of jax.ffi.ffi_call with inline arguments is no longer supported. jax.ffi.ffi_call now unconditionally returns a callable.
    • The following exports in jax.lib.xla_client are deprecated: get_topology_for_devices, heap_profile, mlir_api_version, Client, CompileOptions, DeviceAssignment, Frame, HloSharding, OpSharding, Traceback.
    • The following internal APIs in jax.util are deprecated: HashableFunction, as_hashable_function, cache, safe_map, safe_zip, split_dict, split_list, split_list_checked, split_merge, subvals, toposort, unzip2, wrap_name, and wraps.
    • jax.dlpack.to_dlpack has been deprecated. You can usually pass a JAX Array directly to the from_dlpack function of another framework. If you need the functionality of to_dlpack, use the __dlpack__ attribute of an array.
    • jax.lax.infeed, jax.lax.infeed_p, jax.lax.outfeed, and jax.lax.outfeed_p are deprecated and will be removed in JAX v0.7.0.
    • Several previously-deprecated APIs have been removed, including:
      • From jax.lib.xla_client: ArrayImpl, FftType, PaddingType, PrimitiveType, XlaBuilder, dtype_to_etype, ops, register_custom_call_target, shape_from_pyval, Shape, XlaComputation.
      • From jax.lib.xla_extension: ArrayImpl, XlaRuntimeError.
      • From jax: jax.treedef_is_leaf, jax.tree_flatten, jax.tree_map, jax.tree_leaves, jax.tree_structure, jax.tree_transpose, and jax.tree_unflatten. Replacements can be found in jax.tree or jax.tree_util.
      • From jax.core: AxisSize, ClosedJaxpr, EvalTrace, InDBIdx, InputType, Jaxpr, JaxprEqn, Literal, MapPrimitive, OpaqueTraceState, OutDBIdx, Primitive, Token, TRACER_LEAK_DEBUGGER_WARNING, Var, concrete_aval, dedup_referents, escaped_tracer_error, extend_axis_env_nd, full_lower, get_referent, jaxpr_as_fun, join_effects, lattice_join, leaked_tracer_error, maybe_find_leaked_tracers, raise_to_shaped, raise_to_shaped_mappings, reset_trace_state, str_eqn_compact, substitute_vars_in_output_ty, typecompat, and used_axis_names_jaxpr. Most have no public replacement, though a few are available at jax.extend.core.
      • The vectorized argument to jax.pure_callback and jax.ffi.ffi_call. Use the vmap_method parameter instead.
View originalPermalink
How v0.6.0 went
v0.5.3

JAX v0.5.3

Added 2
  • Added a allow_negative_indices option to jax.lax.dynamic_slice, jax.lax.dynamic_update_slice and related functions to optionally disable code generation for clamping negative indices
  • Added a replace option to jax.random.categorical to enable sampling without replacement
  • New Features

    • Added a allow_negative_indices option to jax.lax.dynamic_slice, jax.lax.dynamic_update_slice and related functions. The default is true, matching the current behavior. If set to false, JAX does not need to emit code clamping negative indices, which improves code size.
    • Added a replace option to jax.random.categorical to enable sampling without replacement.
View originalPermalink
How v0.5.3 went
v0.5.2

JAX v0.5.2

Fixed 1
  • Fix TPU metric logging and tpu-info which was broken in 0.5.1

Patch release of 0.5.1

  • Bug fixes
    • Fixes TPU metric logging and tpu-info, which was broken in 0.5.1
View originalPermalink
How v0.5.2 went
v0.5.1

JAX v0.5.1

Added 3
  • Added experimental jax.experimental.custom_dce.custom_dce decorator to support customizing the behavior of opaque functions under JAX-level dead code elimination
  • Added low-level reduction APIs in jax.lax: jax.lax.reduce_sum, jax.lax.reduce_prod, jax.lax.reduce_max, jax.lax.reduce_min, jax.lax.reduce_and, jax.lax.reduce_or, and jax.lax.reduce_xor
  • jax.lax.linalg.qr and jax.scipy.linalg.qr now support column-pivoting on CPU and GPU
Changed 3
  • JAX_CPU_COLLECTIVES_IMPLEMENTATION and JAX_NUM_CPU_DEVICES now work as environment variables in addition to jax.config or flags
  • JAX_CPU_COLLECTIVES_IMPLEMENTATION now defaults to 'gloo', enabling multi-process CPU communication to work out-of-the-box
  • The jax[tpu] TPU extra no longer depends on the libtpu-nightly package; JAX now uses libtpu instead
Fixed 2
  • TPU runtime startup and shutdown time significantly improved on TPU v5e and newer, from around 17s to around 8s
  • Persistent compilation cache no longer writes access time file if JAX_COMPILATION_CACHE_MAX_SIZE is unset or set to -1, improving performance with large-scale network storage
Deprecated 1
  • The internal function linear_util.wrap_init and the constructor core.Jaxpr now require a non-empty core.DebugInfo kwarg, with a DeprecationWarning printed if jax.extend.linear_util.wrap_init is used without debugging info
  • New Features

    • Added an experimental jax.experimental.custom_dce.custom_dce decorator to support customizing the behavior of opaque functions under JAX-level dead code elimination (DCE). See #25956 for more details.
    • Added low-level reduction APIs in {mod}jax.lax: jax.lax.reduce_sum, jax.lax.reduce_prod, jax.lax.reduce_max, jax.lax.reduce_min, jax.lax.reduce_and, jax.lax.reduce_or, and jax.lax.reduce_xor.
    • jax.lax.linalg.qr, and jax.scipy.linalg.qr, now support column-pivoting on CPU and GPU. See #20282 and #25955 for more details.
  • Changes

    • JAX_CPU_COLLECTIVES_IMPLEMENTATION and JAX_NUM_CPU_DEVICES now work as env vars. Before they could only be specified via jax.config or flags.
    • JAX_CPU_COLLECTIVES_IMPLEMENTATION now defaults to 'gloo', meaning multi-process CPU communication works out-of-the-box.
    • The jax[tpu] TPU extra no longer depends on the libtpu-nightly package. This package may safely be removed if it is present on your machine; JAX now uses libtpu instead.
  • Deprecations

    • The internal function linear_util.wrap_init and the constructor core.Jaxpr now must take a non-empty core.DebugInfo kwarg. For a limited time, a DeprecationWarning is printed if jax.extend.linear_util.wrap_init is used without debugging info. A downstream effect of this several other internal functions need debug info. This change does not affect public APIs. See https://github.com/jax-ml/jax/issues/26480 for more detail.
  • Bug fixes

    • TPU runtime startup and shutdown time should be significantly improved on TPU v5e and newer (from around 17s to around 8s). If not already set, you may need to enable transparent hugepages in your VM image (sudo sh -c 'echo always > /sys/kernel/mm/transparent_hugepage/enabled'). We hope to improve this further in future releases.
    • Persistent compilation cache no longer writes access time file if JAX_COMPILATION_CACHE_MAX_SIZE is unset or set to -1, i.e. if the LRU eviction policy isn't enabled. This should improve performance when using the cache with large-scale network storage.
View originalPermalink
How v0.5.1 went
v0.5.0

JAX v0.5.0

Added 3
  • jax.numpy.fft.fftn, jax.numpy.fft.rfftn, jax.numpy.fft.ifftn, and jax.numpy.fft.irfftn now support transforms in more than 3 dimensions
  • Add support for user defined state in the FFI via jax.ffi.register_ffi_type_id
  • AOT lowering .as_text() method now supports the debug_info option to include debugging information
Changed 4
  • Enable jax_threefry_partitionable by default
  • Increase minimum NumPy version to 1.25
  • Increase minimum SciPy version to 1.11
  • jax.numpy.einsum now defaults to optimize='auto' rather than optimize='optimal'
Removed 5
  • Drop support for Mac x86 wheels
  • jax.numpy.linalg.solve no longer supports batched 1D arguments on the right hand side
  • Delete jax_enable_memories flag
  • Remove Device and XlaRuntimeError from jax.lib.xla_client; use jax.Device and jax.errors.JaxRuntimeError instead
  • Remove jax.experimental.array_api module after being deprecated in JAX v0.4.32
Deprecated 3
  • abstractify and pytype_aval_mappings from jax.interpreters.xla are deprecated in favor of symbols in jax.core
  • jax.scipy.special.lpmn and jax.scipy.special.lpmn_values are deprecated following their deprecation in SciPy v1.15.0
  • jax.extend.ffi submodule has been moved to jax.ffi with the previous import path deprecated

As of this release, JAX now uses effort-based versioning. Since this release makes a breaking change to PRNG key semantics that may require users to update their code, we are bumping the "meso" version of JAX to signify this.

  • Breaking changes

    • Enable jax_threefry_partitionable by default (see the update note).

    • This release drops support for Mac x86 wheels. Mac ARM of course remains supported. For a recent discussion, see https://github.com/jax-ml/jax/discussions/22936.

      Two key factors motivated this decision:

      • The Mac x86 build (only) has a number of test failures and crashes. We would prefer to ship no release than a broken release.
      • Mac x86 hardware is end-of-life and cannot be easily obtained for developers at this point. So it is difficult for us to fix this kind of problem even if we wanted to.

      We are open to readding support for Mac x86 if the community is willing to help support that platform: in particular, we would need the JAX test suite to pass cleanly on Mac x86 before we could ship releases again.

  • Changes:

    • The minimum NumPy version is now 1.25. NumPy 1.25 will remain the minimum supported version until June 2025.
    • The minimum SciPy version is now 1.11. SciPy 1.11 will remain the minimum supported version until June 2025.
    • jax.numpy.einsum now defaults to optimize='auto' rather than optimize='optimal'. This avoids exponentially-scaling trace-time in the case of many arguments (#25214).
    • jax.numpy.linalg.solve no longer supports batched 1D arguments on the right hand side. To recover the previous behavior in these cases, use solve(a, b[..., None]).squeeze(-1).
  • New Features

    • jax.numpy.fft.fftn, jax.numpy.fft.rfftn, jax.numpy.fft.ifftn, and jax.numpy.fft.irfftn now support transforms in more than 3 dimensions, which was previously the limit. See #25606 for more details.
    • Support added for user defined state in the FFI via the new jax.ffi.register_ffi_type_id function.
    • The AOT lowering .as_text() method now supports the debug_info option to include debugging information, e.g., source location, in the output.
  • Deprecations

    • From jax.interpreters.xla, abstractify and pytype_aval_mappings are now deprecated, having been replaced by symbols of the same name in jax.core.
    • jax.scipy.special.lpmn and jax.scipy.special.lpmn_values are deprecated, following their deprecation in SciPy v1.15.0. There are no plans to replace these deprecated functions with new APIs.
    • The jax.extend.ffi submodule was moved to jax.ffi, and the previous import path is deprecated.
  • Deletions

    • jax_enable_memories flag has been deleted and the behavior of that flag is on by default.
    • From jax.lib.xla_client, the previously-deprecated Device and XlaRuntimeError symbols have been removed; instead use jax.Device and jax.errors.JaxRuntimeError respectively.
    • The jax.experimental.array_api module has been removed after being deprecated in JAX v0.4.32. Since that release, jax.numpy supports the array API directly.
View originalPermalink
How v0.5.0 went
v0.4.38

JAX v0.4.38

Added 2
  • Add jax.tree.flatten_with_path and jax.tree.map_with_path as shortcuts of the corresponding tree_util functions
  • Add jax.lax.split as a primitive version of jax.numpy.split that yields a more compact transpose during automatic differentiation
Changed 1
  • jax.export.export can be used for device-polymorphic export with shardings constructed with jax.sharding.AbstractMesh
Removed 4
  • Remove jax.core.check_eqn, jax.core.check_type, jax.core.check_valid_jaxtype, and jax.core.non_negative_dim
  • Remove jax.lib.xla_bridge.xla_client and jax.lib.xla_bridge.default_backend
  • Remove jax.lib.xla_client._xla and jax.lib.xla_client.bfloat16
  • Remove jax.numpy.round_
Deprecated 1
  • Deprecate a number of APIs in the internal jax.core namespace
  • Changes:

    • jax.tree.flatten_with_path and jax.tree.map_with_path are added as shortcuts of the corresponding tree_util functions.
  • Deprecations

    • a number of APIs in the internal jax.core namespace have been deprecated. Most were no-ops, were little-used, or can be replaced by APIs of the same name in jax.extend.core; see the documentation for {mod}jax.extend for information on the compatibility guarantees of these semi-public extensions.
    • Several previously-deprecated APIs have been removed, including:
      • from jax.core: check_eqn, check_type, check_valid_jaxtype, and non_negative_dim.
      • from jax.lib.xla_bridge: xla_client and default_backend.
      • from jax.lib.xla_client: _xla and bfloat16.
      • from jax.numpy: round_.
  • New Features

    • jax.export.export can be used for device-polymorphic export with shardings constructed with {func}jax.sharding.AbstractMesh. See the jax.export documentation.
    • Added jax.lax.split. This is a primitive version of jax.numpy.split, added because it yields a more compact transpose during automatic differentiation.
View originalPermalink
How v0.4.38 went
v0.4.37

JAX v0.4.37

Fixed 3
  • Fixed a bug where jit would error if an argument was named f
  • Fixed a bug that throws index out of range error in jax.lax.while_loop if the user registers pytree node class with different aux data for the flatten and flatten_with_path
  • Pinned libtpu release 0.0.6 that fixes a compiler bug on TPU v6e

This is a patch release of jax 0.4.36. Only "jax" was released at this version.

  • Bug fixes
    • Fixed a bug where jit would error if an argument was named f (#25329).
    • Fix a bug that will throw index out of range error in jax.lax.while_loop if the user registers pytree node class with different aux data for the flatten and flatten_with_path.
    • Pinned a new libtpu release (0.0.6) that fixes a compiler bug on TPU v6e.
View originalPermalink
How v0.4.37 went
v0.4.36

JAX v0.4.36

Added 4
  • Added compiler_options argument to jax.jit for passing compilation options to XLA
  • Added jax.numpy.put_along_axis
  • Added GPU support for jax.lax.linalg.eig and related jax.numpy functions jax.numpy.linalg.eig and jax.numpy.linalg.eigvals
  • Added jax_exec_time_optimization_effort and jax_memory_fitting_effort configuration flags to control compiler effort for execution time and memory usage
Changed 7
  • JAX tracing machinery now uses stackless dispatch as a function of context rather than both context and data, removing levels, sublevels, post_process_call, new_base_main, and custom_bind
  • Calling np.asarray on typed PRNG keys now raises an error instead of returning a scalar object array
  • Hashing of tracers now raises a TypeError
  • JAX build CLI now uses a subcommand structure with build and requirements_update subcommands
  • jax.scipy.linalg.toeplitz now does implicit batching on multi-dimensional inputs
  • jax.scipy.special.gamma and jax.scipy.special.gammasgn now return NaN for negative integer inputs
  • jax.tree_util.register_dataclass now allows metadata fields to be declared inline via dataclasses.field
Fixed 1
  • Fixed indexing overflow bug in GPU implementations of LU and QR decomposition for batch sizes close to int32 max
Removed 8
  • Removed support for jax.experimental.jax2tf.convert with native_serialization=False or enable_xla=False
  • Removed xb, xc, and xe symbols from jax.interpreters.xla
  • Removed deprecated module jax.experimental.export
  • Removed initial argument to jax.nn.softmax and jax.nn.log_softmax
  • Removed jax.export.DisabledSafetyCheck.shape_assertions, jax.export.Exported.lowering_platforms, jax.export.Exported.mlir_module_serialization_version, jax.export.Exported.uses_shape_polymorphism, and lowering_platforms kwarg from jax.export.export
  • Removed symbolic_scope and symbolic_constraints kwargs from jax.export.symbolic_args_specs
  • Removed jax.clear_backends
  • Removed __gpu$xla.gpu.triton custom call from export stability guarantees
Deprecated 2
  • Deprecated jax.lib.xla_extension.ArrayImpl and jax.lib.xla_client.ArrayImpl in favor of jax.Array
  • Deprecated jax.lib.xla_extension.XlaRuntimeError in favor of jax.errors.JaxRuntimeError
  • Breaking Changes

    • This release lands "stackless", an internal change to JAX's tracing machinery. We made trace dispatch purely a function of context rather than a function of both context and data. This let us delete a lot of machinery for managing data-dependent tracing: levels, sublevels, post_process_call, new_base_main, custom_bind, and so on. The change should only affect users that use JAX internals.

      If you do use JAX internals then you may need to update your code (see https://github.com/jax-ml/jax/commit/c36e1f7c1ad4782060cbc8e8c596d85dfb83986f for clues about how to do this). There might also be version skew issues with JAX libraries that do this. If you find this change breaks your non-JAX-internals-using code then try the config.jax_data_dependent_tracing_fallback flag as a workaround, and if you need help updating your code then please file a bug.

    • jax.experimental.jax2tf.convert with native_serialization=False or with enable_xla=False have been deprecated since July 2024, with JAX version 0.4.31. Now we removed support for these use cases. jax2tf with native serialization will still be supported.

    • In jax.interpreters.xla, the xb, xc, and xe symbols have been removed after being deprecated in JAX v0.4.31. Instead use xb = jax.lib.xla_bridge, xc = jax.lib.xla_client, and xe = jax.lib.xla_extension.

    • The deprecated module jax.experimental.export has been removed. It was replaced by jax.export in JAX v0.4.30. See the migration guide for information on migrating to the new API.

    • The initial argument to jax.nn.softmax and jax.nn.log_softmax has been removed, after being deprecated in v0.4.27.

    • Calling np.asarray on typed PRNG keys (i.e. keys produced by jax.random.key) now raises an error. Previously, this returned a scalar object array.

    • The following deprecated methods and functions in jax.export have been removed:

      • jax.export.DisabledSafetyCheck.shape_assertions: it had no effect already.
      • jax.export.Exported.lowering_platforms: use platforms.
      • jax.export.Exported.mlir_module_serialization_version: use calling_convention_version.
      • jax.export.Exported.uses_shape_polymorphism: use uses_global_constants.
      • the lowering_platforms kwarg for jax.export.export: use platforms instead.
    • The kwargs symbolic_scope and symbolic_constraints from jax.export.symbolic_args_specs have been removed. They were deprecated in June 2024. Use scope and constraints instead.

    • Hashing of tracers, which has been deprecated since version 0.4.30, now results in a TypeError.

    • Refactor: JAX build CLI (build/build.py) now uses a subcommand structure and replaces previous build.py usage. Run python build/build.py --help for more details. Brief overview of the new subcommand options:

      • build: Builds JAX wheel packages. For e.g., python build/build.py build --wheels=jaxlib,jax-cuda-pjrt
      • requirements_update: Updates requirements_lock.txt files.
    • jax.scipy.linalg.toeplitz now does implicit batching on multi-dimensional inputs. To recover the previous behavior, you can call jax.numpy.ravel on the function inputs.

    • jax.scipy.special.gamma and jax.scipy.special.gammasgn now return NaN for negative integer inputs, to match the behavior of SciPy from https://github.com/scipy/scipy/pull/21827.

    • jax.clear_backends was removed after being deprecated in v0.4.26.

    • We removed the custom call "__gpu$xla.gpu.triton" from the list of custom call that we guarantee export stability. This is because this custom call relies on Triton IR, which is not guaranteed to be stable. If you need to export code that uses this custom call, you can use the disabled_checks parameter. See more details in the documentation.

  • New Features

    • jax.jit got a new compiler_options: dict[str, Any] argument, for passing compilation options to XLA. For the moment it's undocumented and may be in flux.
    • jax.tree_util.register_dataclass now allows metadata fields to be declared inline via dataclasses.field. See the function documentation for examples.
    • Added jax.numpy.put_along_axis.
    • jax.lax.linalg.eig and the related jax.numpy functions (jax.numpy.linalg.eig and jax.numpy.linalg.eigvals) are now supported on GPU. See #24663 for more details.
    • Added two new configuration flags, jax_exec_time_optimization_effort and jax_memory_fitting_effort, to control the amount of effort the compiler spends minimizing execution time and memory usage, respectively. Valid values are between -1.0 and 1.0, default is 0.0.
  • Bug fixes

    • Fixed a bug where the GPU implementations of LU and QR decomposition would result in an indexing overflow for batch sizes close to int32 max. See #24843 for more details.
  • Deprecations

    • jax.lib.xla_extension.ArrayImpl and jax.lib.xla_client.ArrayImpl are deprecated; use jax.Array instead.
    • jax.lib.xla_extension.XlaRuntimeError is deprecated; use jax.errors.JaxRuntimeError instead.
View originalPermalink
How v0.4.36 went
v0.4.35

JAX v0.4.35

Added 1
  • jax.lax.FftType introduced as a public name for the enum of FFT operations
Changed 2
  • jax.numpy.isscalar now returns True for any array-like object with zero dimensions instead of only those with a weak dtype
  • TPU: JAX now installs TPU support from the libtpu package rather than libtpu-nightly
Removed 1
  • jax.experimental.host_callback has been removed after deprecation since March 2024
Deprecated 5
  • jax.lib.xla_client.FftType has been deprecated
  • jax.lib.xla_client.PaddingType has been deprecated
  • The default behavior of jax.pure_callback and jax.extend.ffi.ffi_call under vmap and the vectorized parameter have been deprecated in favor of vmap_method
  • jax.lib.xla_client.register_custom_call_target has been deprecated in favor of the JAX FFI
  • jax.lib.xla_client.dtype_to_etype, jax.lib.xla_client.ops, jax.lib.xla_client.shape_from_pyval, jax.lib.xla_client.PrimitiveType, jax.lib.xla_client.Shape, jax.lib.xla_client.XlaBuilder, and jax.lib.xla_client.XlaComputation have been deprecated in favor of StableHLO
  • Breaking Changes

    • jax.numpy.isscalar now returns True for any array-like object with zero dimensions. Previously it only returned True for zero-dimensional array-like objects with a weak dtype.
    • jax.experimental.host_callback has been deprecated since March 2024, with JAX version 0.4.26. Now we removed it. See #20385 for a discussion of alternatives.
  • Changes:

    • jax.lax.FftType was introduced as a public name for the enum of FFT operations. The semi-public API jax.lib.xla_client.FftType has been deprecated.
    • TPU: JAX now installs TPU support from the libtpu package rather than libtpu-nightly. For the next few releases JAX will pin an empty version of libtpu-nightly as well as libtpu to ease the transition; that dependency will be removed in Q1 2025.
  • Deprecations:

    • The semi-public API jax.lib.xla_client.PaddingType has been deprecated. No JAX APIs consume this type, so there is no replacement.
    • The default behavior of jax.pure_callback and jax.extend.ffi.ffi_call under vmap has been deprecated and so has the vectorized parameter to those functions. The vmap_method parameter should be used instead for better defined behavior. See the discussion in #23881 for more details.
    • The semi-public API jax.lib.xla_client.register_custom_call_target has been deprecated. Use the JAX FFI instead.
    • The semi-public APIs jax.lib.xla_client.dtype_to_etype, jax.lib.xla_client.ops, jax.lib.xla_client.shape_from_pyval, jax.lib.xla_client.PrimitiveType, jax.lib.xla_client.Shape, jax.lib.xla_client.XlaBuilder, and jax.lib.xla_client.XlaComputation have been deprecated. Use StableHLO instead.
View originalPermalink
How v0.4.35 went
v0.4.34

JAX v0.4.34

Added 2
  • Wheels for Python 3.13 are now available
  • jax.errors.JaxRuntimeError has been added as a public alias for XlaRuntimeError
Changed 4
  • jax_pmap_no_rank_reduction flag is now set to True by default
  • array[0] on a pmap result now introduces a reshape; use array[0:1] instead
  • Per-shard shape accessed via addressable_shards or addressable_data(0) now has a leading (1, ...) dimension
  • Default value of --jax_host_callback_legacy configuration is now True, implementing jax.experimental.host_callback APIs in terms of jax.experimental.io_callback
Fixed 2
  • Fixed a bug where jax.numpy.cumsum would produce incorrect outputs if a non-boolean input was provided and dtype=bool was specified
  • Fixed implementation of jax.numpy.ldexp to get correct gradient
Removed 5
  • Internal pretty-printing tools jax.core.pp_* have been removed
  • jax.xla_computation has been deleted
  • jax.ShapeDtypeStruct no longer accepts the named_shape argument
  • jax.tree.map(f, None, non-None) now raises an error instead of emitting a DeprecationWarning
  • jax.sharding.XLACompatibleSharding has been removed; use jax.sharding.Sharding instead
Deprecated 3
  • Non-arraylike arguments or arraylike arguments with ndim != 1 in jax.numpy.trim_zeros are now deprecated
  • jax.lib.xla_client.Device is deprecated; use jax.Device instead
  • jax.lib.xla_client.XlaRuntimeError is deprecated; use jax.errors.JaxRuntimeError instead
  • New Functionality

    • This release includes wheels for Python 3.13. Free-threading mode is not yet supported.
    • jax.errors.JaxRuntimeError has been added as a public alias for the formerly private XlaRuntimeError type.
  • Breaking changes

    • jax_pmap_no_rank_reduction flag is set to True by default.
      • array[0] on a pmap result now introduces a reshape (use array[0:1] instead).
      • The per-shard shape (accessable via jax_array.addressable_shards or jax_array.addressable_data(0)) now has a leading (1, ...). Update code that directly accesses shards accordingly. The rank of the per-shard-shape now matches that of the global shape which is the same behavior as jit. This avoids costly reshapes when passing results from pmap into jit.
    • jax.experimental.host_callback has been deprecated since March 2024, with JAX version 0.4.26. Now we set the default value of the --jax_host_callback_legacy configuration value to True, which means that if your code uses jax.experimental.host_callback APIs, those API calls will be implemented in terms of the new jax.experimental.io_callback API. If this breaks your code, for a very limited time, you can set the --jax_host_callback_legacy to True. Soon we will remove that configuration option, so you should instead transition to using the new JAX callback APIs. See #20385 for a discussion.
  • Deprecations

    • In jax.numpy.trim_zeros, non-arraylike arguments or arraylike arguments with ndim != 1 are now deprecated, and in the future will result in an error.
    • Internal pretty-printing tools jax.core.pp_* have been removed, after being deprecated in JAX v0.4.30.
    • jax.lib.xla_client.Device is deprecated; use jax.Device instead.
    • jax.lib.xla_client.XlaRuntimeError has been deprecated. Use jax.errors.JaxRuntimeError instead.
  • Deletion:

    • jax.xla_computation is deleted. It has been 3 months since its deprecation in 0.4.30 JAX release. Please use the AOT APIs to get the same functionality as jax.xla_computation.
      • jax.xla_computation(fn)(*args, **kwargs) can be replaced with jax.jit(fn).lower(*args, **kwargs).compiler_ir('hlo').
      • You can also use .out_info property of jax.stages.Lowered to get the output information (like tree structure, shape and dtype).
      • For cross-backend lowering, you can replace jax.xla_computation(fn, backend='tpu')(*args, **kwargs) with jax.jit(fn).trace(*args, **kwargs).lower(lowering_platforms=('tpu',)).compiler_ir('hlo').
    • jax.ShapeDtypeStruct no longer accepts the named_shape argument. The argument was only used by xmap which was removed in 0.4.31.
    • jax.tree.map(f, None, non-None), which previously emitted a DeprecationWarning, now raises an error. None is only a tree-prefix of itself. To preserve the current behavior, you can ask jax.tree.map to treat None as a leaf value by writing: jax.tree.map(lambda x, y: None if x is None else f(x, y), a, b, is_leaf=lambda x: x is None).
    • jax.sharding.XLACompatibleSharding has been removed. Please use jax.sharding.Sharding.
  • Bug fixes

    • Fixed a bug where jax.numpy.cumsum would produce incorrect outputs if a non-boolean input was provided and dtype=bool was specified.
    • Edit implementation of jax.numpy.ldexp to get correct gradient.
View originalPermalink
How v0.4.34 went
v0.4.33

JAX release v0.4.33

Fixed 2
  • Fix TPU data corruption bug in libtpu that occurred when multiple TPU slices were present in the same job
  • Fix inaccurate result for F64 tanh on CPU

This is a patch release on top of jax 0.4.32, that fixes two bugs found in that release.

A TPU-only data corruption bug was found in the version of libtpu pinned by JAX 0.4.32, which manifested only if multiple TPU slices were present in the same job, for example, if training on multiple v5e slices.

This release fixes that issue by pinning a fixed version of libtpu-nightly.

This release also fixes an inaccurate result for F64 tanh on CPU (#23590).

View originalPermalink
How v0.4.33 went
v0.4.32

JAX release v0.4.32

Security 1
  • Fixed data corruption bug on TPU when multiple TPU slices are present in the job

WARNING: This release has been yanked from PyPI because of a data corruption bug on TPU if there are multiple TPU slices in the job

View originalPermalink
How v0.4.32 went
v0.4.29

JAX v0.4.29

Added 1
  • Added jax.experimental.Exported.in_shardings_jax to construct shardings that can be used with the JAX APIs from the HloShardings stored in Exported objects
Changed 2
  • JAX now requires ml_dtypes version 0.4.0 or newer
  • jax.random APIs no longer accept batched keys; use jax.vmap explicitly in such cases
Removed 6
  • Removed backwards-compatibility support for old usage of the jax.experimental.export API; use 'from jax.experimental import export' instead of 'from jax.experimental.export import export'
  • Removed jax.core.non_negative_dim, jax.core.DimSize, and jax.core.Shape
  • Removed jax.lax.tie_in
  • Removed jax.nn.normalize
  • Removed jax.interpreters.xla.backend_specific_translations, jax.interpreters.xla.translations, jax.interpreters.xla.register_translation, jax.interpreters.xla.xla_destructure, jax.interpreters.xla.TranslationRule, jax.interpreters.xla.TranslationContext, and jax.interpreters.xla.XlaOp
  • Removed the deprecated jax.config submodule; use jax.config directly via 'import jax' instead
Deprecated 4
  • jax.sharding.XLACompatibleSharding is deprecated; use jax.sharding.Sharding instead
  • jax.experimental.Exported.in_shardings has been renamed to jax.experimental.Exported.in_shardings_hlo; same for out_shardings
  • The tol argument of jax.numpy.linalg.matrix_rank is being deprecated; use rtol instead
  • The rcond argument of jax.numpy.linalg.pinv is being deprecated; use rtol instead
  • Changes

    • We anticipate that this will be the last release of JAX and jaxlib supporting a monolithic CUDA jaxlib. Future releases will use the CUDA plugin jaxlib (e.g. pip install jax[cuda12]).
    • JAX now requires ml_dtypes version 0.4.0 or newer.
    • Removed backwards-compatibility support for old usage of the jax.experimental.export API. It is not possible anymore to use from jax.experimental.export import export, and instead you should use from jax.experimental import export. The removed functionality has been deprecated since 0.4.24.
  • Deprecations

    • jax.sharding.XLACompatibleSharding is deprecated. Please use jax.sharding.Sharding.
    • jax.experimental.Exported.in_shardings has been renamed as jax.experimental.Exported.in_shardings_hlo. Same for out_shardings. The old names will be removed after 3 months.
    • Removed a number of previously-deprecated APIs:
      • from {mod}jax.core: non_negative_dim, DimSize, Shape
      • from {mod}jax.lax: tie_in
      • from {mod}jax.nn: normalize
      • from {mod}jax.interpreters.xla: backend_specific_translations, translations, register_translation, xla_destructure, TranslationRule, TranslationContext, XlaOp.
    • The tol argument of {func}jax.numpy.linalg.matrix_rank is being deprecated and will soon be removed. Use rtol instead.
    • The rcond argument of {func}jax.numpy.linalg.pinv is being deprecated and will soon be removed. Use rtol instead.
    • The deprecated jax.config submodule has been removed. To configure JAX use import jax and then reference the config object via jax.config.
    • {mod}jax.random APIs no longer accept batched keys, where previously some did unintentionally. Going forward, we recommend explicit use of {func}jax.vmap in such cases.
  • New Functionality

    • Added {func}jax.experimental.Exported.in_shardings_jax to construct shardings that can be used with the JAX APIs from the HloShardings that are stored in the Exported objects.
View originalPermalink
How v0.4.29 went
v0.4.28

JAX v0.4.28

Changed 1
  • The minimum jaxlib version of this release is 0.4.27
Fixed 1
  • Reverted a change to make_jaxpr that was breaking Equinox
Removed 2
  • The kind argument to jax.numpy.sort and jax.numpy.argsort is now removed, use stable=True or stable=False instead
  • Removed get_compute_capability from the jax.experimental.pallas.gpu module, use the compute_capability attribute of a GPU device instead
  • Bug fixes

    • Reverted a change to make_jaxpr that was breaking Equinox (#21116).
  • Deprecations & removals

    • The kind argument to jax.numpy.sort and jax.numpy.argsort is now removed. Use stable=True or stable=False instead.
    • Removed get_compute_capability from the jax.experimental.pallas.gpu module. Use the compute_capability attribute of a GPU device, returned by jax.devices or jax.local_devices, instead.
  • Changes

    • The minimum jaxlib version of this release is 0.4.27.
View originalPermalink
How v0.4.28 went
v0.4.24

JAX release v0.4.24

JAX release v0.4.24

View originalPermalink
How v0.4.24 went
v0.4.13

JAX release v0.4.13

Added 2
  • Added a warning if a non-allowlisted jaxlib plugin is in use
  • Added jax.tree_util.tree_leaves_with_path
Changed 3
  • jax.jit now allows None to be passed to in_shardings and out_shardings, with in_shardings marked as replicated and out_shardings determined by the XLA GSPMD partitioner
  • jax.experimental.pjit.pjit now allows None to be passed to in_shardings and out_shardings with mesh-dependent semantics
  • Executable.cost_analysis() now works on Cloud TPU
Fixed 1
  • Fixed incorrect wheel name in CUDA 12 releases; the correct wheel is named cudnn89 instead of cudnn88
Deprecated 1
  • The native_serialization_strict_checks parameter to jax.experimental.jax2tf.convert is deprecated in favor of native_serializaation_disabled_checks

NOTE: This is the last JAX release that will include Python 3.8 support

  • Changes

    • jax.jit now allows None to be passed to in_shardings and out_shardings. The semantics are as follows:
      • For in_shardings, JAX will mark is as replicated but this behavior can change in the future.
      • For out_shardings, we will rely on the XLA GSPMD partitioner to determine the output shardings.
    • jax.experimental.pjit.pjit also allows None to be passed to in_shardings and out_shardings. The semantics are as follows:
      • If the mesh context manager is not provided, JAX has the freedom to choose whatever sharding it wants.
        • For in_shardings, JAX will mark is as replicated but this behavior can change in the future.
        • For out_shardings, we will rely on the XLA GSPMD partitioner to determine the output shardings.
      • If the mesh context manager is provided, None will imply that the value will be replicated on all devices of the mesh.
    • Executable.cost_analysis() works on Cloud TPU
    • Added a warning if a non-allowlisted jaxlib plugin is in use.
    • Added jax.tree_util.tree_leaves_with_path.
  • Bug fixes

    • Fixed incorrect wheel name in CUDA 12 releases (#16362); the correct wheel is named cudnn89 instead of cudnn88.
  • Deprecations

    • The native_serialization_strict_checks parameter to {func}jax.experimental.jax2tf.convert is deprecated in favor of the new native_serializaation_disabled_checks ({jax-issue}#16347).
View originalPermalink
How v0.4.13 went
v0.4.5

JAX release v0.4.5

jax version 0.4.5

View originalPermalink
How v0.4.5 went
v0.4.1

Jax release v0.4.1

Added 1
  • Introduce jax.Array, a unified array type that subsumes DeviceArray, ShardedDeviceArray, and GlobalDeviceArray types
Changed 6
  • jax.Array has been enabled by default and makes some breaking changes to the pjit API
  • PartitionSpec and Mesh are now out of experimental with new API endpoints at jax.sharding.PartitionSpec and jax.sharding.Mesh
  • with_sharding_constraint's new public endpoint is jax.lax.with_sharding_constraint
  • ABSL flag values are no longer read or written after JAX configuration options are initially populated from ABSL flags
  • jax2tf.call_tf now uses for TF lowering the first TF device of the same platform as used by the embedding JAX computation
  • A number of jax.numpy functions now have their arguments marked as positional-only, matching NumPy
Removed 1
  • Support for Python 3.7 has been dropped
Deprecated 2
  • jax.experimental.maps.Mesh and jax.experimental.PartitionSpec are deprecated and will be removed in 3 months
  • jnp.msort is now deprecated following the deprecation of np.msort in numpy 1.24
  • Changes
    • Support for Python 3.7 has been dropped, in accordance with JAX's {ref}version-support-policy.
    • We introduce jax.Array which is a unified array type that subsumes DeviceArray, ShardedDeviceArray, and GlobalDeviceArray types in JAX. The jax.Array type helps make parallelism a core feature of JAX, simplifies and unifies JAX internals, and allows us to unify jit and pjit. jax.Array has been enabled by default in JAX 0.4 and makes some breaking change to the pjit API. The jax.Array migration guide can help you migrate your codebase to jax.Array. You can also look at the Distributed arrays and automatic parallelization tutorial to understand the new concepts.
    • PartitionSpec and Mesh are now out of experimental. The new API endpoints are jax.sharding.PartitionSpec and jax.sharding.Mesh. jax.experimental.maps.Mesh and jax.experimental.PartitionSpec are deprecated and will be removed in 3 months.
    • with_sharding_constraints new public endpoint is jax.lax.with_sharding_constraint.
    • If using ABSL flags together with jax.config, the ABSL flag values are no longer read or written after the JAX configuration options are initially populated from the ABSL flags. This change improves performance of reading jax.config options, which are used pervasively in JAX.
    • The jax2tf.call_tf function now uses for TF lowering the first TF device of the same platform as used by the embedding JAX computation. Before, it was using the 0th device for the JAX-default backend.
    • A number of jax.numpy functions now have their arguments marked as positional-only, matching NumPy.
    • jnp.msort is now deprecated, following the deprecation of np.msort in numpy 1.24. It will be removed in a future release, in accordance with the {ref}api-compatibility policy. It can be replaced with jnp.sort(a, axis=0).
View originalPermalink
How v0.4.1 went

v0.3.23

  • Changes
    • Update Colab TPU driver version for new jaxlib release.
View originalPermalink
How v0.3.23 went

v0.3.22

Changed 1
  • Set JAX_PLATFORMS=tpu,cpu as default setting in TPU initialization so JAX will raise an error if TPU cannot be initialized instead of falling back to CPU, with options to override using JAX_PLATFORMS='' for automatic backend selection or JAX_PLATFORMS=cpu for CPU-only usage
Removed 1
  • Remove several test utilities from jax.test_util that were deprecated in JAX v0.3.8
  • Changes
    • Add JAX_PLATFORMS=tpu,cpu as default setting in TPU initialization, so JAX will raise an error if TPU cannot be initialized instead of falling back to CPU. Set JAX_PLATFORMS='' to override this behavior and automatically choose an available backend (the original default), or set JAX_PLATFORMS=cpu to always use CPU regardless of if the TPU is available.
  • Deprecations
    • Several test utilities deprecated in JAX v0.3.8 are now removed from {mod}jax.test_util.
View originalPermalink
How v0.3.22 went
v0.3.21

JAX release v0.3.21

Changed 1
  • The persistent compilation cache now warns instead of raising an exception on error, allowing program execution to continue if something goes wrong with the cache; set JAX_RAISE_PERSISTENT_CACHE_ERRORS=true to revert this behavior
  • Changes
    • The persistent compilation cache will now warn instead of raising an exception on error ({jax-issue}#12582), so program execution can continue if something goes wrong with the cache. Set JAX_RAISE_PERSISTENT_CACHE_ERRORS=true to revert this behavior.
View originalPermalink
How v0.3.21 went
v0.3.20

JAX release v0.3.20

Added 1
  • Add missing .pyi files
Fixed 2
  • Fix incompatibility between jax 0.3.19 and the libtpu version it pinned
  • Fix incorrect pip url in setup.py comment

Notable changes:

  • Adds missing .pyi files that were missing from the previous release (#12536).
  • Fixes an incompatibility between jax 0.3.19 and the libtpu version it pinned (#12550). Requires jaxlib 0.3.20.
  • Fix incorrect pip url in setup.py comment (#12528).
View originalPermalink
How v0.3.20 went
v0.3.19

JAX release v0.3.19

Fixes the required jaxlib version

View originalPermalink
How v0.3.19 went
v0.3.18

JAX release v0.3.18

Added 2
  • Ahead-of-time lowering and compilation functionality is now stable and public via jax.stages
  • Introduce jax.Array for isinstance checks and type annotations for array types in JAX
Changed 1
  • jax.numpy.ndarray is now a simple alias of jax.Array, changing isinstance behavior for jax-internal objects
Removed 2
  • jax._src is no longer imported into the public jax namespace
  • jax.soft_pmap has been deleted; use pjit or xmap instead
  • GitHub commits.
  • Changes
    • Ahead-of-time lowering and compilation functionality (tracked in {jax-issue}#7733) is stable and public. See the overview and the API docs for {mod}jax.stages.
    • Introduced {class}jax.Array, intended to be used for both isinstance checks and type annotations for array types in JAX. Notice that this included some subtle changes to how isinstance works for {class}jax.numpy.ndarray for jax-internal objects, as {class}jax.numpy.ndarray is now a simple alias of {class}jax.Array.
  • Breaking changes
    • jax._src is no longer imported into the from the public jax namespace. This may break users that were using JAX internals.
    • jax.soft_pmap has been deleted. Please use pjit or xmap instead. jax.soft_pmap is undocumented. If it were documented, a deprecation period would have been provided.
View originalPermalink
How v0.3.18 went
v0.3.17

JAX release v0.3.17

Added 1
  • Add jax.pure_callback that enables calling back to pure Python functions from compiled functions
Fixed 1
  • Fix corner case issue in gradient of lax.pow with an exponent of zero
Removed 2
  • Remove jax.checkpoint concrete option following previous deprecation
  • Remove deprecated DeviceArray.tile() method
Deprecated 1
  • Deprecate DeviceArray.to_py() in favor of np.asarray(x)
  • GitHub commits.
  • Bugs
    • Fix corner case issue in gradient of lax.pow with an exponent of zero (#12041)
  • Breaking changes
    • jax.checkpoint, also known as jax.remat, no longer supports the concrete option, following the previous version's deprecation; see JEP 11830.
  • Changes
    • Added jax.pure_callback that enables calling back to pure Python functions from compiled functions (e.g. functions decorated with jax.jit or jax.pmap).
  • Deprecations:
    • The deprecated DeviceArray.tile() method has been removed. Use jax.numpy.tile (#11944).
    • DeviceArray.to_py() has been deprecated. Use np.asarray(x) instead.
View originalPermalink
How v0.3.17 went
v0.3.16

JAX release v0.3.16

Added 1
  • Add jax.debug module with utilities for runtime value debugging including jax.debug.print and jax.debug.breakpoint
Changed 1
  • Replace jax.checkpoint and jax.remat default implementation with new implementation, deprecating the old one
Removed 6
  • Support for NumPy 1.19 has been dropped
  • Remove jax.mask and jax.shapecheck APIs
  • Remove jax.experimental.loops
  • Remove jax.tree_util.tree_multimap
  • Remove jax.experimental.stax deprecated alias
  • Remove jax.experimental.optimizers deprecated alias
  • GitHub commits.
  • Breaking changes
    • Support for NumPy 1.19 has been dropped, per the deprecation policy. Please upgrade to NumPy 1.20 or newer.
  • Changes
    • Added jax.debug that includes utilities for runtime value debugging such at jax.debug.print and jax.debug.breakpoint.
    • Added new documentation for runtime value debugging
  • Deprecations
    • jax.mask jax.shapecheck APIs have been removed. See #11557.
    • jax.experimental.loops has been removed. See #10278 for an alternative API.
    • jax.tree_util.tree_multimap has been removed. It has been deprecated since JAX release 0.3.5, and jax.tree_util.tree_map is a direct replacement.
    • Removed jax.experimental.stax; it has long been a deprecated alias of jax.example_libraries.stax.
    • Removed jax.experimental.optimizers; it has long been a deprecated alias of jax.example_libraries.optimizers.
    • jax.checkpoint, also known as jax.remat, has a new implementation switched on by default, meaning the old implementation is deprecated; see JEP 11830.
View originalPermalink
How v0.3.16 went
View all

Discussion