Upgrade LK/LGPU CI tests to use cuda 12.4 #2056
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Testing::x86_64::LKokkos::CUDA::C++ | |
on: | |
workflow_call: | |
inputs: | |
lightning-version: | |
type: string | |
required: true | |
description: The version of Lightning to use. Valid values are either 'release' (most recent release candidate), 'stable' (most recent git-tag) or 'latest' (most recent commit from master) | |
pennylane-version: | |
type: string | |
required: true | |
description: The version of PennyLane to use. Valid values are either 'release' (most recent release candidate), 'stable' (most recent git-tag) or 'latest' (most recent commit from master) | |
pull_request: | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- ready_for_review | |
push: | |
branches: | |
- master | |
env: | |
CI_CUDA_ARCH: 86 | |
COVERAGE_FLAGS: "--cov=pennylane_lightning --cov-report=term-missing --cov-report=xml:./coverage.xml --no-flaky-report -p no:warnings --tb=native" | |
GCC_VERSION: 11 | |
TF_VERSION: 2.10.0 | |
TORCH_VERSION: 1.11.0+cpu | |
concurrency: | |
group: tests_lkcuda_cpp-${{ github.ref }}-${{ github.event_name }}-${{ inputs.lightning-version }}-${{ inputs.pennylane-version }} | |
cancel-in-progress: true | |
jobs: | |
builddeps: | |
if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.draft == false && contains(github.event.pull_request.labels.*.name, 'ci:use-gpu-runner')) }} | |
runs-on: | |
- self-hosted | |
- ubuntu-22.04 | |
- gpu | |
strategy: | |
max-parallel: 1 | |
matrix: | |
os: [ubuntu-22.04] | |
kokkos_version: ["4.5.00"] | |
exec_model: ["CUDA"] | |
cuda_version_maj: ["12"] | |
cuda_version_min: ["4"] | |
steps: | |
- name: Validate GPU version and installed compiler | |
run: | | |
source /etc/profile.d/modules.sh | |
module use /opt/modules | |
module load cuda/${{ matrix.cuda_version_maj }}.${{ matrix.cuda_version_min }} | |
echo "${PATH}" >> $GITHUB_PATH | |
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV | |
nvcc --version | |
nvidia-smi | |
- name: Clone Kokkos repository | |
run: | | |
rm -rf kokkos_${{ matrix.exec_model }} | |
git clone --branch ${{ matrix.kokkos_version }} https://github.com/kokkos/kokkos.git kokkos_${{ matrix.exec_model }} | |
pushd . &> /dev/null | |
- name: Build Kokkos core library (Ubuntu) | |
run: | | |
rm -rf ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }} | |
mkdir -p ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }} | |
cd kokkos_${{ matrix.exec_model }} | |
cmake -BBuild . -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }} \ | |
-DKokkos_ENABLE_COMPLEX_ALIGN=OFF \ | |
-DKokkos_ENABLE_SERIAL=ON \ | |
-DKokkos_ENABLE_${{ matrix.exec_model }}=ON \ | |
-DKokkos_ENABLE_DEPRECATION_WARNINGS=OFF \ | |
-DCMAKE_CXX_COMPILER="$(which g++-$GCC_VERSION)" \ | |
-DCMAKE_CXX_STANDARD=20 \ | |
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \ | |
-G Ninja | |
cmake --build ./Build --verbose | |
cmake --install ./Build | |
cd - | |
- name: Test Kokkos core library (Ubuntu) | |
env: | |
CMAKE_PREFIX_PATH: ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }} | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install gfortran-$GCC_VERSION | |
cd kokkos_${{ matrix.exec_model }}/example/build_cmake_installed | |
which -a gfortran || which -a gfortran-$GCC_VERSION | |
cmake -B build -DCMAKE_Fortran_COMPILER=gfortran-$GCC_VERSION | |
cmake --build build | |
cmake --build build --target test | |
- name: Cache installation directories | |
id: kokkos-cache | |
uses: actions/cache/save@v4 | |
with: | |
key: ${{ matrix.os }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }} | |
path: ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }} | |
cpptestswithKokkos: | |
needs: [builddeps] | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_kokkos"] | |
kokkos_version: ["4.5.00"] | |
exec_model: ["CUDA"] | |
cuda_version_maj: ["12"] | |
cuda_version_min: ["4"] | |
name: C++ Tests (${{ matrix.pl_backend }}, kokkos-${{ matrix.kokkos_version }}, model-${{ matrix.exec_model }}) | |
runs-on: | |
- ${{ matrix.os }} | |
- self-hosted | |
- gpu | |
steps: | |
- name: Validate GPU version and installed compiler | |
run: | | |
source /etc/profile.d/modules.sh | |
module use /opt/modules | |
module load cuda/${{ matrix.cuda_version_maj }}.${{ matrix.cuda_version_min }} | |
echo "${PATH}" >> $GITHUB_PATH | |
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV | |
nvcc --version | |
nvidia-smi | |
- name: Restoring cached dependencies | |
id: kokkos-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }} | |
key: ${{ matrix.os }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }} | |
restore-keys: ${{ matrix.os }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }} | |
- name: Copy cached libraries | |
run: | | |
mkdir -p ${{ github.workspace }}/Kokkos | |
ls -ltrh | |
cp -r ${{ github.workspace }}/Kokkos_install/${{ matrix.exec_model }}/* ${{ github.workspace }}/Kokkos | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
with: | |
path: main | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
# Since the self-hosted runner can be re-used. It is best to set up all package | |
# installations in a virtual environment that gets cleaned at the end of each workflow run | |
- name: Setup Python virtual environment | |
id: setup_venv | |
env: | |
VENV_NAME: ${{ github.workspace }}/venv_${{ steps.setup_python.outputs.python-version }}_${{ github.sha }} | |
run: | | |
# Clear any pre-existing venvs | |
rm -rf venv_* | |
# Create new venv for this workflow_run | |
python --version | |
python -m venv ${{ env.VENV_NAME }} | |
# Add the venv to PATH for subsequent steps | |
echo ${{ env.VENV_NAME }}/bin >> $GITHUB_PATH | |
# Adding venv name as an output for subsequent steps to reference if needed | |
echo "venv_name=${{ env.VENV_NAME }}" >> $GITHUB_OUTPUT | |
echo "Python_ROOT_DIR=${{ env.VENV_NAME }}" >> $GITHUB_ENV | |
echo "Python3_ROOT_DIR=${{ env.VENV_NAME }}" >> $GITHUB_ENV | |
# Adding venv site-packages to output for subsequent step to referecen if needed | |
echo "site_packages_dir=$(${{ env.VENV_NAME }}/bin/python -c 'import sysconfig; print(sysconfig.get_path("platlib"))')" >> $GITHUB_OUTPUT | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION ninja-build gcovr lcov | |
python -m pip install scipy-openblas32 | |
- name: Build and run unit tests | |
run: | | |
cd main | |
cmake . -BBuild -G Ninja \ | |
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ | |
-DBUILD_TESTS=ON \ | |
-DENABLE_PYTHON=OFF \ | |
-DSCIPY_OPENBLAS=$(python -c "import scipy_openblas32; print(scipy_openblas32.get_lib_dir())") \ | |
-DCMAKE_PREFIX_PATH=${{ github.workspace }}/Kokkos \ | |
-DPL_BACKEND=${{ matrix.pl_backend }} \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \ | |
-DENABLE_COVERAGE=ON | |
cmake --build ./Build --verbose | |
cd ./Build | |
mkdir -p ./tests/results_${{ github.job }}_${{ matrix.pl_backend }} | |
for file in *runner ; do ./$file --order lex --reporter junit --out ./tests/results_${{ github.job }}_${{ matrix.pl_backend }}/report_$file.xml; done; | |
lcov --directory . -b ../pennylane_lightning/core/src --capture --output-file coverage.info | |
lcov --remove coverage.info '/usr/*' --output-file coverage.info | |
mv coverage.info coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
- name: Upload test results | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: ubuntu-tests-reports-${{ github.job }}_${{ matrix.pl_backend }} | |
path: ./main/Build/tests/results_${{ github.job }}_${{ matrix.pl_backend }} | |
retention-days: 1 | |
if-no-files-found: error | |
include-hidden-files: true | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ubuntu-codecov-results-cpp | |
path: ./main/Build/coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
retention-days: 1 | |
if-no-files-found: error | |
include-hidden-files: true | |
- name: Cleanup | |
if: always() | |
run: | | |
rm -rf ${{ steps.setup_venv.outputs.venv_name }} | |
rm -rf * .git .gitignore .github | |
pip cache purge |