Skip to content

feat: Add JAX release support v0.10.0#6054

Open
erman-gurses wants to merge 34 commits into
mainfrom
users/erman-gurses/add-jax10x-support
Open

feat: Add JAX release support v0.10.0#6054
erman-gurses wants to merge 34 commits into
mainfrom
users/erman-gurses/add-jax10x-support

Conversation

@erman-gurses

@erman-gurses erman-gurses commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Summary

ISSUE ID: #3878
Related PR: ROCm/rockrel#65
Extend the JAX multi-arch release workflows to support both rocm-jaxlib-v0.9.1 and rocm-jaxlib-v0.10.0 release lines.

Changes

Release workflow

  • Add matrix support for:
    • rocm-jaxlib-v0.9.1
    • rocm-jaxlib-v0.10.0
  • Add release-line specific metadata:
    • jax_repository
    • build_mode
    • gfx_arch

Build workflow

rocm-jaxlib-v0.9.1

  • Continue using the existing native build flow.
  • Build from ROCm/rocm-jax.
  • Continue using build/ci_build.

rocm-jaxlib-v0.10.0

  • Build from ROCm/jax.
  • Build a manylinux image using the release branch Dockerfile from ROCm/rocm-jax.
  • Build wheels inside the manylinux container using build/build.py.

Testing

On rockrel:

python -c "import jax; print(jax.local_devices())"

- Verified matrix expansion across Python 3.11–3.14.
- Verified native build path for rocm-jaxlib-v0.9.1.
- Verified manylinux build path for rocm-jaxlib-v0.10.0.
- Verified release artifact publication.
- Verified JAX device visibility check executes before tests.

TODO: 
Run JAX builds inside a top-level GitHub Actions job container, similar to existing PyTorch workflows.

@therock-pr-bot

therock-pr-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown

✅ All Checks Passed — Ready for Review

Check Status Details
🌿 Branch Name ✅ Pass
📝 PR Title/Description ✅ Pass
Forbidden Files ✅ Pass
🧪 Unit Test ✅ Pass
🔎 pre-commit ✅ Pass
🚫 Draft PR 🔜 To Be Enabled
🚩 Feature Flag 🔜 To Be Enabled
📊 Code Coverage 🔜 To Be Enabled
🤖 therock-pr-bot ✅ Pass

🎉 All checks passed! This PR is ready for review.

📖 Need help? See the Policy FAQ for details on every check and how to fix failures.

@therock-pr-bot therock-pr-bot Bot added the Not ready to Review PR has unresolved policy failures — reviews blocked label Jun 23, 2026
@therock-pr-bot

therock-pr-bot Bot commented Jun 23, 2026

Copy link
Copy Markdown

🎉 All checks passed! This PR is ready for review.

@erman-gurses erman-gurses requested review from ScottTodd and marbre June 23, 2026 07:19
@erman-gurses erman-gurses added the ci:skip Skip all CI builds/tests for this PR label Jun 23, 2026
@erman-gurses erman-gurses linked an issue Jun 23, 2026 that may be closed by this pull request
@erman-gurses erman-gurses changed the title Add JAX release support v0.10.0 [Feature] Add JAX release support v0.10.0 Jun 23, 2026
@erman-gurses erman-gurses changed the title [Feature] Add JAX release support v0.10.0 feat - Add JAX release support v0.10.0 Jun 23, 2026
@erman-gurses erman-gurses changed the title feat - Add JAX release support v0.10.0 feat: Add JAX release support v0.10.0 Jun 23, 2026
@therock-pr-bot therock-pr-bot Bot removed the Not ready to Review PR has unresolved policy failures — reviews blocked label Jun 23, 2026
@erman-gurses erman-gurses requested review from gulsumgudukbay and tsrw2048 and removed request for marbre June 23, 2026 16:16
@ScottTodd ScottTodd requested a review from marbre June 23, 2026 17:40
Comment thread .github/workflows/multi_arch_build_linux_jax_wheels.yml Outdated
Comment thread .github/workflows/multi_arch_build_linux_jax_wheels.yml
Comment thread .github/workflows/multi_arch_build_linux_jax_wheels.yml Outdated
Comment thread .github/workflows/multi_arch_build_linux_jax_wheels.yml Outdated
Comment thread .github/workflows/multi_arch_build_linux_jax_wheels.yml Outdated
Comment thread .github/workflows/multi_arch_build_linux_jax_wheels.yml Outdated

@gulsumgudukbay gulsumgudukbay left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be great if we could move to wheels instead of tarballs and environment variable testing. Unit testing with theRock wheels without any environment variables also allows us to surface packaging issues if there are any. That is how we caught previous packaging issues. This way theRock CI not only tests libraries and systems bugs, it will also test the actual packaging

@erman-gurses erman-gurses requested a review from ScottTodd June 24, 2026 05:51
@erman-gurses

erman-gurses commented Jun 24, 2026

Copy link
Copy Markdown
Contributor Author

@ScottTodd , Is there any blocker for now from your side? If not. good to merge?

@ScottTodd

Copy link
Copy Markdown
Member

I can do another review today. 15 other PRs in the queue.

Comment on lines +123 to +126
build_mode:
description: "Build mode: native or manylinux."
type: string
required: true

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: If there are only two expected string values, for workflow_dispatch you could use a "choice" input type to make this easier to use correctly.

https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onworkflow_dispatchinputs

Comment on lines +119 to +122
jax_repository:
description: "Repository containing the JAX release branch."
type: string
required: true

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a default here, or at least mention which repositories are expected in the description? What syntax is this expecting, ROCm/jax or https://github.com/ROCm/jax?

Comment on lines +127 to +131
gfx_arch:
description: "GFX architecture used for the manylinux image build."
type: string
required: false
default: ""

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add an example to the description? We have a few syntax styles (gfx94X, gfx942, gfx942-dcgpu, etc.) and that helps a lot when working across multiple workflows.

Comment on lines 111 to 118
repository:
description: "Repository to checkout. Defaults to github.repository."
type: string
default: ""
ref:
description: "Branch, tag, or SHA to checkout. Defaults to the triggering ref."
type: string
default: ""

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These repository and ref inputs aren't commonly provided when triggered by developers, so I'd prefer to keep them as the last inputs in the list. Looks like a few other workflows have similarly started adding inputs beyond them though.

I would move jax_repository, build_mode, and gfx_arch near the top of the inputs list since they will be set frequently.

Comment on lines +236 to +243
- name: Build JAX Wheels in manylinux container
if: ${{ inputs.build_mode == 'manylinux' }}
working-directory: jax-source
env:
ROCM_VERSION: ${{ inputs.rocm_version }}
PYTHON_VERSION: ${{ inputs.python_version }}
run: |
docker run --rm \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you also update the docs at https://github.com/ROCm/TheRock/tree/main/external-builds/jax#build-instructions ? (The general progression for development work and feature enablement should be local builds --> dev builds --> release builds, this jumps straight to release builds in github actions workflows which is the hardest to debug)

Comment on lines +58 to +61
rocm_package_find_links_url:
description: "ROCm package index / find-links URL for the JAX manylinux build."
type: string
default: "https://rocm.devreleases.amd.com/whl-multi-arch/"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove default that won't work here too

Comment on lines +210 to +214
- name: Install ROCm packages
run: |
python -m pip install --upgrade pip
python -m pip install --pre \
--index-url "${ROCM_PACKAGE_FIND_LINKS_URL}" \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait. Which URL format do you want? They are different. The variable name here says "find links url" but it's installing with --index-url?

--index-url "${ROCM_PACKAGE_FIND_LINKS_URL}" \
rocm \
rocm-sdk-devel \
rocm-sdk-device-gfx942

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test_amdgpu_family is an input but this assumes that gfx942 is all that needs to be installed?

Use this code instead:

  • ROCm:
    • - name: Compute ROCm device extras
      if: ${{ inputs.kpack_split == 'true' }}
      id: device_extras
      run: |
      python build_tools/github_actions/expand_amdgpu_families.py \
      --amdgpu-families "${{ inputs.amdgpu_family }}" \
      --output-mode=device-extras
      # Key off install_libraries success (not test_libraries) so devel install/test still run
      - name: Install rocm[libraries]
      id: install_libraries
      run: |
      pkg="rocm[libraries]"
      if [ -n "${{ steps.device_extras.outputs.device_extras }}" ]; then
      pkg="${pkg%]},${{ steps.device_extras.outputs.device_extras }}]"
      fi
      if [ "${{ inputs.kpack_split }}" = "true" ]; then
      python build_tools/setup_venv.py ${VENV_DIR} \
      --packages "${pkg}==${{ inputs.rocm_version }}" \
      --index-url=${{ inputs.package_index_url_base }} \
      --find-links=${{ inputs.package_find_links_url }} \
      --activate-in-future-github-actions-steps
      else
      python build_tools/setup_venv.py ${VENV_DIR} \
      --packages "${pkg}==${{ inputs.rocm_version }}" \
      --index-url=${{ inputs.package_index_url_base }} \
      --index-subdir=${{ inputs.amdgpu_family }} \
      --find-links=${{ inputs.package_find_links_url }} \
      --activate-in-future-github-actions-steps
      fi
  • torch:
    • # Multi-arch packages use pip extras (e.g. torch[device-gfx942]) to
      # select GPU-specific device packages. Expand the family to get the
      # comma-separated device extras string for pip install.
      - name: Expand GPU family to device extras
      if: ${{ inputs.multi_arch }}
      id: expand
      run: |
      python build_tools/github_actions/expand_amdgpu_families.py \
      --amdgpu-families "${{ inputs.amdgpu_family }}" \
      --output-mode=device-extras
    • - name: Set up virtual environment
      timeout-minutes: 15
      run: |
      if [ "${{ inputs.multi_arch }}" = "true" ]; then
      python build_tools/setup_venv.py ${VENV_DIR} \
      --packages "torch[${{ steps.expand.outputs.device_extras }}]==${{ inputs.torch_version }}" \
      --index-url=${{ inputs.package_index_url }} \
      --activate-in-future-github-actions-steps
      else
      python build_tools/setup_venv.py ${VENV_DIR} \
      --packages torch==${{ inputs.torch_version }} \
      --index-url=${{ inputs.package_index_url }} \
      --index-subdir=${{ inputs.amdgpu_family }} \
      --activate-in-future-github-actions-steps
      fi

python -m pip install --pre \
--index-url "${ROCM_PACKAGE_FIND_LINKS_URL}" \
rocm \
rocm-sdk-devel \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do JAX tests need rocm-sdk-devel? They shouldn't. Devel packages are for building, and most users of frameworks are not expected to install them.

See my other comment, this should just install rocm[libraries,device-gfxXXXX], or maybe something like jax[device-gfxXXXX] in the future if we want to go the same route as we did for torch extras.

rocm-sdk-device-gfx942
rocm-sdk init
echo "ROCM_ROOT=$(rocm-sdk path --root)" >> "$GITHUB_ENV"
ln -sfn "$(rocm-sdk path --root)" /opt/rocm

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please don't symlink rocm python packages to /opt/rocm/.

  • Framework should not be dependent on the devel package at runtime (e.g. in tests)
  • Python packages exist in python environments, they should not leak outside to the full system like this

@therock-pr-bot therock-pr-bot Bot added the Not ready to Review PR has unresolved policy failures — reviews blocked label Jun 25, 2026
@therock-pr-bot therock-pr-bot Bot removed the Not ready to Review PR has unresolved policy failures — reviews blocked label Jun 25, 2026
@therock-pr-bot

Copy link
Copy Markdown

Pre-commit check failed

pre-commit failed

Please run locally:

  • python -m pip install pre-commit
  • pre-commit install
  • pre-commit run --all-files --show-diff-on-failure

This repo uses .pre-commit-config.yaml.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:skip Skip all CI builds/tests for this PR

Projects

Status: TODO

Development

Successfully merging this pull request may close these issues.

[CI] Build and test JAX Python packages as part of ci.yml

4 participants