Skip to content

Build and upload LGPU wheels for Linux aarch64 #1

Build and upload LGPU wheels for Linux aarch64

Build and upload LGPU wheels for Linux aarch64 #1

name: Wheel::Linux::ARM::CUDA
# **What it does**: Builds lightning.gpu and lightning.tensor python wheels for
# architecture ARM 64 and store it as artifacts.
# Python versions: 3.9, 3.10, 3.11, 3.12.
# **Why we have it**: To build wheels for pennylane-lightning installation.
# **Who does it impact**: Wheels to be uploaded to PyPI.
on:
pull_request:
push:
branches:
- master
release:
types: [published]
workflow_dispatch:
env:
MACOSX_DEPLOYMENT_TARGET: 14.0
ARCHS: 'arm64'
PYTHON3_MIN_VERSION: "9"
PYTHON3_MAX_VERSION: "12"
concurrency:
group: wheel_macos_arm64-${{ github.ref }}
cancel-in-progress: true
jobs:
mac-set-matrix-arm:
if: |
github.event_name != 'pull_request' ||
contains(github.event.pull_request.labels.*.name, 'ci:build_wheels') ||
github.event_name == 'workflow_dispatch'
timeout-minutes: 60
name: Set builder matrix
runs-on: ubuntu-latest
steps:
- name: Checkout PennyLane-Lightning
uses: actions/checkout@v4
- name: Python version
id: pyver
run: |
if [[ ${{ github.event_name }} == 'pull_request' ]]; then
echo "python_version=$(python3 scripts/gen_pyver_matrix.py \
--min-version=3.${{ env.PYTHON3_MIN_VERSION }} \
--max-version=3.${{ env.PYTHON3_MAX_VERSION }})" >> $GITHUB_OUTPUT
else
echo "python_version=$(python3 scripts/gen_pyver_matrix.py \
--min-version=3.${{ env.PYTHON3_MIN_VERSION }} \
--max-version=3.${{ env.PYTHON3_MAX_VERSION }} --range)" >> $GITHUB_OUTPUT
fi
outputs:
python_version: ${{ steps.pyver.outputs.python_version }}
linux-wheels-arm64:
needs: [mac-set-matrix-arm]
strategy:
fail-fast: false
matrix:
os: [manylinux]
arch: [arm64]
cuda_version: ["12"]
pl_backend: ["lightning_gpu"]
cibw_build: ${{fromJson(needs.mac-set-matrix-arm.outputs.python_version)}}
container_img: ["quay.io/pypa/manylinux_2_28_aarch64"]
container_name: ["manylinux_2_28_aarch64"]
timeout-minutes: 30
name: Linux::${{ matrix.arch }} - ${{ matrix.pl_backend }} CUDA ${{ matrix.cuda_version }} (Python ${{ fromJson('{ "cp39-*":"3.9","cp310-*":"3.10","cp311-*":"3.11","cp312-*":"3.12" }')[matrix.cibw_build] }})
runs-on:
group: 'Office 24th floor M2 Mac'
container:
image: ${{ matrix.container_img }}
options: --privileged
steps:
- name: Checkout PennyLane-Lightning
uses: actions/checkout@v4
- name: Setup Runner Environment
id: setup_env
uses: ./.github/workflows/setup_macos_env_linux_arm64
with:
python_version: ${{ matrix.python_version }}
- name: Install dependencies (AlmaLinux)
if: ${{ (matrix.container_img == 'quay.io/pypa/manylinux_2_28_x86_64') }}
run: |
dnf update -y && dnf install -y podman
- name: Install cibuildwheel
run: python -m pip install cibuildwheel~=2.16.0
- name: Configure pyproject.toml file
run: PL_BACKEND="${{ matrix.pl_backend }}" python scripts/configure_pyproject_toml.py
- name: Build wheels
env:
CIBW_CONTAINER_ENGINE: "podman"
CIBW_ARCHS_LINUX: ${{ matrix.arch }}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_SKIP: "*-musllinux*"
CIBW_CONFIG_SETTINGS: --global-option=build_ext --global-option=--define="LIGHTNING_RELEASE_TAG=master"
# Python build settings
CIBW_BEFORE_BUILD: |
python -m pip install ninja cmake~=3.24.3 auditwheel~=5.0 custatevec-cu${{ matrix.cuda_version }} scipy
dnf clean all -y
dnf install gcc-toolset-12 dnf-utils -y
source /opt/rh/gcc-toolset-12/enable -y
yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo -y
dnf -y install cuda-toolkit-${{ matrix.cuda_version }}-0 git openssh wget
# ensure nvcc is available
CIBW_ENVIRONMENT: |
PATH=/opt/rh/gcc-toolset-12/root/usr/bin:$PATH:/usr/local/cuda-${{ matrix.cuda_version }}/bin \
LD_LIBRARY_PATH=/opt/rh/gcc-toolset-12/root/usr/lib64:/opt/rh/gcc-toolset-12/root/usr/lib:/opt/rh/gcc-toolset-12/root/usr/lib64/dyninst:/opt/rh/gcc-toolset-12/root/usr/lib/dyninst:$LD_LIBRARY_PATH:/usr/local/cuda-${{ matrix.cuda_version }}/lib64 \
PKG_CONFIG_PATH=/opt/rh/gcc-toolset-12/root/usr/lib64/pkgconfig:$PKG_CONFIG_PATH
CIBW_REPAIR_WHEEL_COMMAND_LINUX: "./bin/auditwheel repair -w {dest_dir} {wheel}"
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
CIBW_BUILD_VERBOSITY: 3
run: python -m cibuildwheel --output-dir wheelhouse
- name: Validate wheels
run: |
python -m pip install twine
python -m twine check ./wheelhouse/*.whl
- uses: actions-ecosystem/action-regex-match@main
id: rc_build
with:
text: ${{ github.event.pull_request.head.ref }}
regex: '.*[0-9]+.[0-9]+.[0-9]+[-_]?rc[0-9]+'
- uses: actions/upload-artifact@v3
if: |
github.event_name == 'release' ||
github.event_name == 'workflow_dispatch' ||
github.ref == 'refs/heads/master' ||
steps.rc_build.outputs.match != ''
with:
name: ${{ matrix.os }}-wheels-${{ matrix.pl_backend }}-${{ matrix.arch }}-cu${{ matrix.cuda_version }}
path: ./wheelhouse/*.whl