Skip to content
This repository has been archived by the owner on Mar 21, 2024. It is now read-only.

Kokkos/arm ppc

Kokkos/arm ppc #10

name: Wheel::Linux::ARM
# **What it does**: Builds python wheels for Linux (ubuntu-latest) architecture ARM 64 and store it as artifacts.
# Python versions: 3.9, 3.10, 3.11.
# **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]
concurrency:
group: wheel_linux_aarch64-${{ github.ref }}
cancel-in-progress: true
jobs:
set_wheel_build_matrix:
name: "Set wheel build matrix"
uses: ./.github/workflows/set_wheel_build_matrix.yml
with:
event_name: ${{ github.event_name }}
build_dependencies:
needs: [set_wheel_build_matrix]
strategy:
matrix:
os: [ubuntu-latest]
arch: [aarch64]
exec_model: ${{ fromJson(needs.set_wheel_build_matrix.outputs.exec_model) }}
kokkos_version: ${{ fromJson(needs.set_wheel_build_matrix.outputs.kokkos_version) }}
container_img: ["quay.io/pypa/manylinux2014_aarch64"]
name: Kokkos core (${{ matrix.exec_model }}::${{ matrix.arch }})
runs-on: ${{ matrix.os }}
steps:
- name: Cache installation directories
id: kokkos-cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }}
key: ${{ matrix.container_img }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }}
- name: Clone Kokkos libs
if: steps.kokkos-cache.outputs.cache-hit != 'true'
run: |
git clone https://github.com/kokkos/kokkos.git
cd kokkos
git checkout ${{ matrix.kokkos_version }}
cd -
pushd . &> /dev/null
- uses: docker/setup-qemu-action@v2
name: Set up QEMU
- name: Build Kokkos core library
if: steps.kokkos-cache.outputs.cache-hit != 'true'
run: |
mkdir -p ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }}
cd kokkos
docker run --platform linux/aarch64 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`:/io \
-v ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }}:/install \
-i ${{ matrix.container_img }} \
bash -c "git config --global --add safe.directory /io && \
cd /io && \
python3.9 -m pip install ninja && \
ln -s /opt/python/cp39-cp39/bin/ninja /usr/bin/ninja && \
cmake -BBuild . -DCMAKE_INSTALL_PREFIX=/install \
-DKokkos_ENABLE_COMPLEX_ALIGN=OFF \
-DKokkos_ENABLE_SERIAL=ON \
-DKokkos_ENABLE_${{ matrix.exec_model }}=ON \
-DKokkos_ENABLE_DEPRECATION_WARNINGS=OFF \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-G Ninja && \
cmake --build ./Build --verbose && \
cmake --install ./Build; "
cd -
linux-wheels-aarch64:
needs: [set_wheel_build_matrix, build_dependencies]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
arch: [aarch64]
pl_backend: ["lightning_kokkos", "lightning_qubit"]
cibw_build: ${{ fromJson(needs.set_wheel_build_matrix.outputs.python_version) }}
exec_model: ${{ fromJson(needs.set_wheel_build_matrix.outputs.exec_model) }}
kokkos_version: ${{ fromJson(needs.set_wheel_build_matrix.outputs.kokkos_version) }}
container_img: ["quay.io/pypa/manylinux2014_aarch64"]
name: ${{ matrix.os }}::${{ matrix.arch }} - ${{ matrix.pl_backend }} (Python ${{ fromJson('{ "cp39-*":"3.9","cp310-*":"3.10","cp311-*":"3.11" }')[matrix.cibw_build] }})
runs-on: ${{ matrix.os }}
steps:
- name: Checkout PennyLane-Lightning
uses: actions/checkout@v3
- name: Restoring cached dependencies
id: kokkos-cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }}
key: ${{ matrix.container_img }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }}
- name: Copy cached libraries
run: |
mkdir Kokkos
cp -rf ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }}/* Kokkos/
- name: Install cibuildwheel
run: python -m pip install cibuildwheel~=2.11.0
- uses: docker/setup-qemu-action@v2
name: Set up QEMU
- name: Build wheels
env:
CIBW_ARCHS_LINUX: ${{matrix.arch}}
CIBW_BUILD: ${{ matrix.cibw_build }}
CIBW_SKIP: "*-musllinux*"
# Python build settings
CIBW_BEFORE_BUILD: |
cat /etc/yum.conf | sed "s/\[main\]/\[main\]\ntimeout=5/g" > /etc/yum.conf
python -m pip install ninja cmake~=3.24.0
CIBW_ENVIRONMENT: |
PL_BACKEND="${{ matrix.pl_backend }}"
CIBW_MANYLINUX_AARCH64_IMAGE: manylinux2014
CIBW_BUILD_VERBOSITY: 3
CIBW_TEST_REQUIRES: pytest pytest-cov pytest-mock flaky
CIBW_TEST_COMMAND: |
DEVICENAME=`echo ${{ matrix.pl_backend }} | sed "s/_/./g"`
pl-device-test --device=${DEVICENAME} --skip-ops -x --tb=short --no-flaky-report
run: python3 -m cibuildwheel --output-dir wheelhouse
- name: Validate wheels
run: |
python3 -m pip install twine
python3 -m twine check ./wheelhouse/*.whl
- uses: actions-ecosystem/action-regex-match@v2
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@v2
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/master' }}
with:
name: ${{ runner.os }}-wheels-${{ matrix.pl_backend }}-${{ matrix.arch }}.zip
path: ./wheelhouse/*.whl
# Refine and uncomment before merging to pennylane-lightning repository
# upload-pypi:
# needs: linux-wheels-aarch64
# runs-on: ubuntu-latest
# if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/master'}}
# steps:
# - uses: actions/download-artifact@v2
# with:
# name: Linux-wheels-aarch64
# path: dist
# - name: Upload wheels to PyPI
# uses: pypa/gh-action-pypi-publish@release/v1
# with:
# user: __token__
# password: ${{ secrets.TEST_PYPI_API_TOKEN }}
# repository_url: https://test.pypi.org/legacy/