507 Commits

Author SHA1 Message Date
Nitin Srinivasan
721d1a3211 Add functionality to allow promoting RC wheels during release
List of changes:
1. Allow us to build a RC wheel when building release artifacts. This is done by modifying the build CLI to use the new JAX build rule and passing in the build options that control the wheel tag. A new build argument `use_new_wheel_build_rule` is introduced to the build CLI to avoid breaking anyone that uses the CLI and the old build rule. Note that this option will go way in the future when the build CLI migrates fully to the new build rule.
2. Change the upload script to upload both rc and release tagged wheels (changes internal)

PiperOrigin-RevId: 733464219
2025-03-04 14:21:12 -08:00
jax authors
615219b1f6 Remove tensorstore dependency from //jax/experimental/array_serialization:serialization in OSS (see https://github.com/google/tensorstore/issues/218)
Disable serialization_test in OSS.

PiperOrigin-RevId: 731463136
2025-02-26 14:47:16 -08:00
jax authors
c9c7250dd4 Upgrade to Bazel 7.4.1
PiperOrigin-RevId: 731278247
2025-02-26 05:33:24 -08:00
jax authors
eb912ad0d9 Create jax wheel build target.
This change introduces a uniform way of building the artifacts and controlling the filename version suffixes (see the changes for `jaxlib`, `jax-cuda-plugin` and `jax-cuda-pjrt` in https://github.com/jax-ml/jax/pull/25126)

Previously `jax` wheel was built via `python3 -m build` command. The resulting wheel contained the python packages files in `jax` folder (e.g. the files in the subdirs that have `__init__.py` file).

You can still build the `jax` wheel with `python3 -m build` command.

Bazel `jax` wheel target: `//:jax_wheel`

Environment variables combinations for creating wheels with different versions:
  * self-built wheel (default build rule behavior): `--repo_env=ML_WHEEL_TYPE=snapshot`
  * release: `--repo_env=ML_WHEEL_TYPE=release`
  * release candidate: `--repo_env=ML_WHEEL_TYPE=release --repo_env=ML_WHEEL_VERSION_SUFFIX=-rc1`
  * nightly build: `--repo_env=ML_WHEEL_TYPE=custom --repo_env=ML_WHEEL_BUILD_DATE=<YYYYmmdd> --repo_env=ML_WHEEL_GIT_HASH=$(git rev-parse HEAD)`

PiperOrigin-RevId: 730916743
2025-02-25 09:30:08 -08:00
H. Vetinari
dd4aa79d6a fix getting gcc major version 2025-02-24 08:03:57 +11:00
jax authors
e64650e2ba Add --config=cuda_libraries_from_stubs in the end of all additional bazel options for CUDA wheels.
Build.py shouldn't be used for building the wheels with real CUDA libraries in the dependencies. This change prevents overriding the default configuration.

PiperOrigin-RevId: 725326252
2025-02-10 13:24:47 -08:00
jax authors
7ffb613b8f Merge pull request #26409 from hawkinsp:fstring
PiperOrigin-RevId: 724390055
2025-02-07 10:23:50 -08:00
Peter Hawkins
d01520c63f Fix a missing "f" on an f-string.
While I'm here, reword the text a bit.
2025-02-07 12:53:24 -05:00
jax authors
1ca8807dca Merge pull request #25810 from ROCm:gh-9948-add-gpu-ci-upstream
PiperOrigin-RevId: 724378710
2025-02-07 09:51:59 -08:00
charleshofer
ebf4a54f4f Add AMD ROCm GPU CI post-build check (#137) 2025-02-06 21:41:53 +00:00
Kanglan Tang
59a3552ae6 Remove portpicker for free threaded python 3.13t in test-requirements.txt
PiperOrigin-RevId: 722776783
2025-02-03 13:30:01 -08:00
jax authors
727d0367a4 Update --config=cuda to add direct dependencies on CUDA libraries both for bazel build and bazel test phases.
With this configuration the same cache is used both for `bazel build` and `bazel test` commands (provided the same target is specified).

Add `--config=no_cuda_libs` for building targets with CUDA libraries from stubs.

PiperOrigin-RevId: 720334587
2025-01-27 15:46:17 -08:00
jax authors
9a60e6fce4 Merge pull request #25917 from ROCm:ci_fix_multi_gpu_test_logic-upstream
PiperOrigin-RevId: 716153760
2025-01-16 02:45:54 -08:00
Ruturaj4
8e88adcd3f Fix run_multi_gpu script multi-gpu issue and refactor code 2025-01-15 22:33:03 +00:00
Ruturaj4
435edf1f8c Add gfx12xx archs 2025-01-15 16:14:40 +00:00
vfdev-5
00806ddaf5 Added 3.13 ft requirements lock file and updated WORKSPACE 2025-01-08 22:47:29 +01:00
jax authors
6e1f060ad3 Merge pull request #25527 from vfdev-5:single-python-version-build-py
PiperOrigin-RevId: 713365267
2025-01-08 11:49:59 -08:00
Vladimir Belitskiy
f2e210b315 Disable avxvnniint8 when building with Clang version < 19, or GCC < 13.
PiperOrigin-RevId: 712516025
2025-01-06 07:06:09 -08:00
Ruturaj4
20b75ab82f Update package indentation fix 2025-01-01 18:50:47 -06:00
vfdev-5
70e06c2dbe Avoid adding conflicting --repo_env=HERMETIC_PYTHON_VERSION= to bazel command 2024-12-21 03:33:33 +01:00
Nitin Srinivasan
0159bead97 Move output path to be inside the wheel build command execution loop
This was causing an issue when building multiple wheels in editable mode.

i.e instead of wheels being stored as:
```
# jax-cuda12-pjrt   0.4.36.dev20241125           ./dist/jax-cuda-pjrt
# jax-cuda12-plugin 0.4.36.dev20241125           ./dist/jax-cuda-plugin
# jaxlib            0.4.36.dev20241125           ./dist/jaxlib
```

they were being stored as:
```
# jaxlib            0.4.36.dev20241125           ./dist/jaxlib
# jax-cuda12-pjrt   0.4.36.dev20241125           ./dist/jaxlib/jax-cuda-pjrt
# jax-cuda12-plugin 0.4.36.dev20241125           ./dist/jaxlib/jax-cuda-plugin
```

PiperOrigin-RevId: 708468522
2024-12-20 17:27:51 -08:00
Nitin Srinivasan
6b096b0cb0 Use common set of build options when building jaxlib+plugin artifacts together
This commit modifies the behavior of the build CLI when building jaxlib and GPU plugin artifacts together (for instance `python build --wheels=jaxlib,jax-cuda-plugin`.

Before, CUDA/ROCm build options were only passed when building the CUDA/ROCm artifacts. However, this leads to inefficient use of the build cache as it looks like Bazel tries to rebuild some targets that has already been built in the previous run. This seems to be because the GPU plugin artifacts have a different set of build options compared to `jaxlib` which for some reason causes Bazel to invalidate/ignore certain cache hits. Therefore, this commit makes it so that the build options remain the same when the `jaxlib` and GPU artifacts are being built together so that we can better utilize the build cache.

As an example, this means that if `python build --wheels=jaxlib,jax-cuda-plugin` is run, the following build options will apply to both `jaxlib` and `jax-cuda-plugin` builds:
```
 /usr/local/bin/bazel run --repo_env=HERMETIC_PYTHON_VERSION=3.10 \
--verbose_failures=true --action_env=CLANG_COMPILER_PATH="/usr/lib/llvm-16/bin/clang" \
--repo_env=CC="/usr/lib/llvm-16/bin/clang" \
--repo_env=BAZEL_COMPILER="/usr/lib/llvm-16/bin/clang" \
--config=clang --config=mkl_open_source_only --config=avx_posix \
--config=cuda --action_env=CLANG_CUDA_COMPILER_PATH="/usr/lib/llvm-16/bin/clang" \
--config=build_cuda_with_nvcc
```

Note, this commit shouldn't affect the content of the wheel it self. It is only meant to give a performance boost when building `jalxib`+plugin aritfacts together.

Also, this removes code that was used to build (now deprecated) monolithic `jaxlib` build from `build_wheel.py`

PiperOrigin-RevId: 708035062
2024-12-19 14:29:24 -08:00
jax authors
bad6f0f0e9 Merge pull request #25440 from ROCm:jax_pypi-upstream
PiperOrigin-RevId: 707934347
2024-12-19 09:17:46 -08:00
jax authors
25713f95f2 Merge pull request #25148 from ROCm:ci_install_sys_libs-upstream
PiperOrigin-RevId: 707934273
2024-12-19 09:15:55 -08:00
jax authors
c78ca042e7 Add experimental support for building JAX CPU and GPU wheels with GCC.
The `build.py` script uses Clang compiler by default, and JAX doesn't support building with GCC officially. However, experimental GCC support is still present.

Command examples:

```
python build/build.py build --wheels=jaxlib,jax-cuda-plugin --use_clang=false
python build/build.py build --wheels=jaxlib,jax-cuda-plugin --use_clang=false --gcc_path=/use/bin/gcc
```

This change addresses the request in https://github.com/jax-ml/jax/issues/25488.

PiperOrigin-RevId: 707930913
2024-12-19 09:03:25 -08:00
Ruturaj4
fefebebea4 Update documentation and add setup.py pypi bindings 2024-12-19 10:21:28 -06:00
Ruturaj4
bfcace4933 [ROCm] ci build and dockerfile changes 2024-12-19 09:02:55 -06:00
Nitin Srinivasan
bcca77cd8e Enable --config=clang only on newer Clang versions
These flags disable Clang extensions that do things such as reject type definitions within offsetof or reject unknown arguments which does not seem to be needed on versions older than Clang 16

Also, fix a syntax error

Fixes https://github.com/jax-ml/jax/issues/25530

PiperOrigin-RevId: 707555651
2024-12-18 08:12:04 -08:00
Adam J. Stewart
1afed917fb
get_githash: fix support for missing git 2024-12-13 10:02:05 -05:00
Sunita Nadampalli
e370deee0f add mkldnn+acl build config for aarch64 platform 2024-12-09 16:03:14 +00:00
Nitin Srinivasan
83c64b2379 Add a flag to enable detailed timestamped logging of subprocess commands.
This adds a new command-line flag, `--detailed_timestamped_log`, that enables detailed logging of Bazel build commands. When disabled (the default), logging mirrors the output you'd see when running the command directly in your terminal.

When this flag is enabled:
- Bazel's output is captured line by line.
- Each line is timestamped for improved traceability.
- The complete log is stored for potential use as an artifact.

The flag is disabled by default and only enabled in the CI builds. If you're running locally and enable `detailed_timestamped_log`, you might notice that Bazel's output is not colored. To force a color output, include `--bazel_options=--color=yes` in your command.

PiperOrigin-RevId: 703581368
2024-12-06 12:32:24 -08:00
jax authors
7b32d88247 Merge pull request #25136 from ROCm:ci_dockerfile_arg_changes-upstream
PiperOrigin-RevId: 701959495
2024-12-02 07:21:15 -08:00
jax authors
ab79066bbe Merge pull request #25128 from ROCm:ci_fix_wheelhouse_relative_paths-upstream
PiperOrigin-RevId: 701143534
2024-11-28 18:51:49 -08:00
jax authors
b0df405250 Merge pull request #25130 from ROCm:ci_fix_set_options-upstream
PiperOrigin-RevId: 701143242
2024-11-28 18:49:47 -08:00
jax authors
385e2f4339 Merge pull request #25137 from ROCm:ci_enable_https-upstream
PiperOrigin-RevId: 701142951
2024-11-28 18:45:52 -08:00
jax authors
04a4f9bd8f Merge pull request #25096 from nitins17:update-rocm-ci-scripts
PiperOrigin-RevId: 700725187
2024-11-27 09:27:02 -08:00
Nitin Srinivasan
d449f12a2e Fix early exiting when building multiple wheels
PiperOrigin-RevId: 700711389
2024-11-27 08:35:51 -08:00
Nitin Srinivasan
c6866d05db Add a check for return codes of executor.run so that we propagate error codes correctly
PiperOrigin-RevId: 700518396
2024-11-26 18:18:06 -08:00
Ruturaj4
3d8063209e Update http to https in amd artifactory url. 2024-11-26 22:38:04 +00:00
Ruturaj4
8df2766466 Add argument to override base docker in dockerfile 2024-11-26 22:28:53 +00:00
Ruturaj4
694de6b64c [ROCm] Change run_multi_gpu set opts 2024-11-26 21:10:37 +00:00
Ruturaj4
d30ec2b5b3 [ROCm] fix jax and wheelhouse relative paths 2024-11-26 21:04:36 +00:00
Nitin Srinivasan
6761512658 Re-factor build CLI to a subcommand based approach
This commit reworks the JAX build CLI to a subcommand based approach where CLI use cases are now defined as subcommands. Two subcommands are defined: build and requirements_update. "build" is to be used when wanting to build a JAX wheel package. "requirements_update" is to be used when wanting to update the requirements_lock.txt files. The new structure offers a clear and organized CLI that enables users to execute specific build tasks without having to navigate through a monolithic script.

Each subcommand has specific arguments that apply to its respective build process. In addition, arguments are separated into groups to achieve a cleaner separation and improves the readability when the CLI subcommands are run with `--help`. It also makes it clear as to which parts of the build they affect. E.g: CUDA arguments only apply to CUDA builds, ROCM arguments only apply to ROCM builds, etc. This reduces the complexity and the potential for errors during the build process. Segregating functionalities into distinct subcommands also simplifies the code which should help with the maintenance and future extensions.

There is also a transition from using `subprocess.check_output` to `asyncio.create_subprocess_shell` for executing the build commands which allows for streaming logs and helps in showing the build progress in real time.

Usage:
* Building `jaxlib`:
```
python build/build.py build --wheels=jaxlib --python_version=3.10
```
* Building `jax-cuda-plugin`:
```
python build/build.py build --wheels=jax-cuda-plugin --cuda_version=12.3.2 --cudnn_version=9.1.1 --python_version=3.10
```
* Building multiple packages:
```
python build/build.py build --wheels=jaxlib,jax-cuda-plugin,jax-cuda-pjrt --cuda_version=12.3.2 --cudnn_version=9.1.1 --python_version=3.10
```
* Building `jax-rocm-pjrt`:
```
python build/build.py build --wheels=jax-rocm-pjrt --rocm_version=60 --rocm_path=/path/to/rocm
```
* Using a local XLA path:
```
python build/build.py build --wheels=jaxlib --local_xla_path=/path/to/xla
```
* Updating requirements_lock.txt files:
```
python build/build.py requirements_update --python_version=3.10
```

For more details on each argument and to see available options, run:
```
python build/build.py build --help
```
or
```
python build/build.py requirements_update --help
```

PiperOrigin-RevId: 700075411
2024-11-25 13:03:04 -08:00
Nitin Srinivasan
84dc9bab33 Update ROCm scripts to match new build.py usage 2024-11-25 19:25:08 +00:00
jax authors
a0b0a8e5a1 Set minimum supported Python version to 3.10 for matplotlib.
Temporary fixes an issue with `python -m build` that fails when python 3.8 is used because `matplotlib~=3.8.4` is unavailable for this python version.

We are working on creating Bazel build rule with the hermetic Python for JAX wheel ([we already have Jaxlib and plugins build rules ready](https://github.com/jax-ml/jax/pull/23276)). The required python modules are provided in requirements.in file, so when we implement Bazel build rule for JAX wheel, requirements.in will be the only source of dependencies, and test-requirements.txt won't be needed for building JAX wheel.

PiperOrigin-RevId: 692260046
2024-11-01 12:34:28 -07:00
Vadym Matsishevskyi
a75d94622c Reverts 72f9a493589a1046e6927a5f16d7dc71df530743
PiperOrigin-RevId: 691843537
2024-10-31 10:05:22 -07:00
Nitin Srinivasan
da994d3552 Move utility functions in build.py to utils.py
This commit is the first step towards re-working the build CLI. It moves all the auxiliary functions used by the CLI into a separate script for easier maintenance and readability.

PiperOrigin-RevId: 691458051
2024-10-30 10:00:32 -07:00
Peter Hawkins
72f9a49358 Reverts 6d8950c04f23ad15a0443006f1e5bd21bfa84156
PiperOrigin-RevId: 691222756
2024-10-29 17:46:55 -07:00
Vadym Matsishevskyi
6d8950c04f Cleanup requirements.in and test-requirements.txt
PiperOrigin-RevId: 691208596
2024-10-29 16:50:54 -07:00
Ruturaj4
bfd7075c39 [ROCm] ci build fixes 2024-10-25 05:01:44 -05:00