Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mpi tests to LGPU #519

Merged
merged 44 commits into from
Oct 18, 2023
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
f5f5b3f
Initial commit mpi tests
vincentmr Oct 13, 2023
17e0557
Remove label guards
vincentmr Oct 13, 2023
fe2270d
Fix PL_DEVICE
vincentmr Oct 13, 2023
b585943
Install lightning_qubit.
vincentmr Oct 13, 2023
1ed0a4a
Fix ENABLE_MPI
vincentmr Oct 13, 2023
eb6983a
print cuquantum
vincentmr Oct 13, 2023
1502d0c
export cu_sdk
vincentmr Oct 13, 2023
804ed24
revert define
vincentmr Oct 13, 2023
86fca09
Debug cpp tests.
vincentmr Oct 13, 2023
d0a9a79
Debug cpp tests.
vincentmr Oct 13, 2023
5cf7870
Fix cmake options.
vincentmr Oct 13, 2023
9e151de
Compile with mpicxx
vincentmr Oct 16, 2023
2969555
Specify backend.
vincentmr Oct 16, 2023
e4e24b0
Specify backend.
vincentmr Oct 16, 2023
ab08397
Remove obsolete line.
vincentmr Oct 16, 2023
1463b89
Specify cov backend
vincentmr Oct 16, 2023
4ef07c4
Merge test/cov & try simplifying python
vincentmr Oct 16, 2023
f0c90c6
if-no-files-found: error and fix python tests.
vincentmr Oct 16, 2023
b5fcc1f
Fix mpi find
vincentmr Oct 16, 2023
884aa75
Install real lightning.
vincentmr Oct 16, 2023
9115107
Revert python tests.
vincentmr Oct 16, 2023
7636d80
Hardcode backend values in python tests
vincentmr Oct 16, 2023
cd8c67b
Install lightning_qubit with gpu in python tests
vincentmr Oct 16, 2023
2327eb4
Remove explicit mpich mentions.
vincentmr Oct 16, 2023
0ed2bee
Parametrize mpilib name.
vincentmr Oct 16, 2023
42f9d2f
Add openmpi tests.
vincentmr Oct 16, 2023
3a27060
Build only openmpi python tests.
vincentmr Oct 16, 2023
d7bfd80
Add timeouts
vincentmr Oct 16, 2023
eb17997
test/test_apply.py
vincentmr Oct 16, 2023
a3628fb
Revert pull triggers.
vincentmr Oct 16, 2023
f6e0e4d
Clean gpu-mpi test workflows.
vincentmr Oct 16, 2023
8202ce3
Revert to 804ed24.
vincentmr Oct 17, 2023
4027615
Revert back.
vincentmr Oct 17, 2023
f6e1eea
Update tests_linux_x86_mpi.yml [ci skip]
vincentmr Oct 17, 2023
3be766a
Add jobs dep.
vincentmr Oct 17, 2023
dbd251d
Remove module unload
vincentmr Oct 17, 2023
532364d
Simplify mpi-gpu tests.
vincentmr Oct 17, 2023
816af11
trigger CI
vincentmr Oct 18, 2023
0326c06
unset CFLAGS.
vincentmr Oct 18, 2023
f46a6aa
set CFLAGS
vincentmr Oct 18, 2023
76f8e2d
Revert triggers.
vincentmr Oct 18, 2023
e9589ae
Fix pull_request: [skip ci]
vincentmr Oct 18, 2023
9bae63b
trigger CI
vincentmr Oct 18, 2023
be49289
Rename test_gpu_cu11.yml -> tests_gpu_cu11.yml [skip ci]
vincentmr Oct 18, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/test_gpu_cu11.yml
vincentmr marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Testing::Linux::x86_64 (Lightning-GPU)
name: Testing::Linux::x86_64::LGPU
on:
pull_request:
push:
Expand Down Expand Up @@ -144,7 +144,7 @@ jobs:
if-no-files-found: error

pythontestswithLGPU:
needs: [builddeps]
needs: [builddeps, cpptestswithLGPU_cu11]
strategy:
matrix:
os: [ubuntu-22.04]
Expand Down
291 changes: 291 additions & 0 deletions .github/workflows/tests_linux_x86_mpi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,291 @@
name: Tests::Linux::x86_64::LGPU::MPI
on:
workflow_call:
inputs:
lightning-version:
type: string
required: true
description: The version of lightning to use. Valid values are either '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 'stable' (most recent git-tag) or 'latest' (most recent commit from master)
release:
push:
branches:
- main
pull_request:

env:
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
OMP_NUM_THREADS: "2"
CI_CUDA_ARCH: 86

concurrency:
group: gpu-test-mpi-${{ github.ref }}-${{ inputs.lightning-version }}-${{ inputs.pennylane-version }}
cancel-in-progress: true

jobs:
cpp_tests:
if: contains(github.event.pull_request.labels.*.name, 'ci:use-multi-gpu-runner') || (inputs.lightning-version != '' && inputs.pennylane-version != '')
runs-on:
- self-hosted
- linux
- x64
- ubuntu-22.04
- multi-gpu
strategy:
max-parallel: 1
matrix:
mpilib: ["mpich", "openmpi"]
timeout-minutes: 30

steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-tags: true

- name: Switch to stable build of Lightning-GPU
if: inputs.lightning-version == 'stable'
run: |
git fetch tags --force
git checkout $(git tag | sort -V | tail -1)

- uses: actions/setup-python@v4
id: setup_python
name: Install Python
with:
python-version: '3.9'

# 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

- name: Display Python-Path
id: python_path
run: |
py_path=$(which python)
echo "Python Interpreter Path => $py_path"
echo "python=$py_path" >> $GITHUB_OUTPUT

pip_path=$(which python)
echo "PIP Path => $pip_path"
echo "pip=$pip_path" >> $GITHUB_OUTPUT

- name: Install required packages
run: |
python -m pip install ninja cmake custatevec-cu11

- name: Validate GPU version and installed compiler
run: |
source /etc/profile.d/modules.sh
module use /opt/modules
module load cuda/11.8
which -a nvcc
nvcc --version

- name: Validate Multi-GPU packages
run: |
source /etc/profile.d/modules.sh

module use /opt/modules/

echo 'Checking for OpenMPI'
module load openmpi
mpirun --version
which -a mpicc
which -a mpirun
module unload openmpi

echo 'Checking for MPICH'
module load mpich
mpiexec --version
which -a mpicc
which -a mpiexec
module unload mpich

- name: Install Latest PennyLane
if: inputs.pennylane-version == 'latest'
run: python -m pip install git+https://github.com/PennyLaneAI/pennylane.git@master

- name: Build and run unit tests
run: |
source /etc/profile.d/modules.sh
module use /opt/modules/
module load ${{ matrix.mpilib }}
module unload ${{ matrix.mpilib }}
export CUQUANTUM_SDK=$(python -c "import site; print( f'{site.getsitepackages()[0]}/cuquantum/lib')")
export PATH=$PATH:/usr/local/cuda/bin:/opt/mpi/${{ matrix.mpilib }}/include:/opt/mpi/${{ matrix.mpilib }}/bin
vincentmr marked this conversation as resolved.
Show resolved Hide resolved
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/opt/mpi/${{ matrix.mpilib }}/lib:$CUQUANTUM_SDK
cmake . -BBuild \
-DPL_BACKEND=lightning_gpu \
-DCMAKE_PREFIX_PATH=/opt/mpi/${{ matrix.mpilib }}/ \
-DENABLE_MPI=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DENABLE_COVERAGE=ON \
-DBUILD_TESTS=ON \
-DCMAKE_CXX_COMPILER=mpicxx \
-DCMAKE_CUDA_COMPILER="/usr/local/cuda/bin/nvcc" \
-DCMAKE_CUDA_ARCHITECTURES="86" \
-DPython_EXECUTABLE:FILE="${{ steps.python_path.outputs.python }}" \
-G Ninja
cmake --build ./Build
cd ./Build
mkdir -p ./tests/results
for file in *runner ; do ./$file --order lex --reporter junit --out ./tests/results/report_$file.xml; done;
for file in *runner_mpi ; do /opt/mpi/${{ matrix.mpilib }}/bin/mpirun -np 2 ./$file --order lex --reporter junit --out ./tests/results/report_$file.xml; done;
lcov --directory . -b ../pennylane_lightning/src --capture --output-file coverage.info
lcov --remove coverage.info '/usr/*' --output-file coverage.info
mv coverage.info coverage-${{ github.job }}-lightning_gpu.info

- name: Upload test results
uses: actions/upload-artifact@v3
if: always()
with:
if-no-files-found: error
name: ubuntu-tests-reports
path: ./Build/tests/results/

- name: Upload code coverage results
uses: actions/upload-artifact@v3
with:
if-no-files-found: error
name: ubuntu-codecov-results-cpp
path: ./Build/coverage-${{ github.job }}-lightning_gpu.info

- name: Cleanup
if: always()
run: |
rm -rf ${{ steps.setup_venv.outputs.venv_name }}
rm -rf *
rm -rf .git
rm -rf .gitignore
rm -rf .github
pip cache purge


python_tests:
if: contains(github.event.pull_request.labels.*.name, 'ci:use-multi-gpu-runner') || (inputs.lightning-version != '' && inputs.pennylane-version != '')
runs-on:
- self-hosted
- linux
- x64
- ubuntu-22.04
- multi-gpu
needs: ["cpp_tests"]
strategy:
max-parallel: 1
matrix:
mpilib: ["openmpi"]
timeout-minutes: 30

steps:
- name: Checkout pennyLane-lightning-gpu
uses: actions/checkout@v3
with:
fetch-tags: true

- name: Switch to stable build of Lightning-GPU
if: inputs.lightning-version == 'stable'
run: |
git fetch tags --force
git checkout $(git tag | sort -V | tail -1)

- uses: actions/setup-python@v4
id: setup_python
name: Install Python
with:
python-version: '3.9'

# 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
source ${{ env.VENV_NAME }}/bin/activate
echo "venv_name=${{ env.VENV_NAME }}" >> $GITHUB_OUTPUT

- name: Display Python-Path
id: python_path
run: |
py_path=$(which python)
echo "Python Interpreter Path => $py_path"
echo "python=$py_path" >> $GITHUB_OUTPUT

pip_path=$(which python)
echo "PIP Path => $pip_path"
echo "pip=$pip_path" >> $GITHUB_OUTPUT

- name: Install Latest PennyLane
# We want to install the latest PL on non workflow_call events
if: inputs.pennylane-version == 'latest' || inputs.pennylane-version == ''
run: python -m pip install git+https://github.com/PennyLaneAI/pennylane.git@master

- name: Install required packages
run: |
source /etc/profile.d/modules.sh
module use /opt/modules/
module load ${{ matrix.mpilib }}
module unload ${{ matrix.mpilib }}
export CUQUANTUM_SDK=$(python -c "import site; print( f'{site.getsitepackages()[0]}/cuquantum/lib')")
export PATH=$PATH:/usr/local/cuda/bin:/opt/mpi/${{ matrix.mpilib }}/include:/opt/mpi/${{ matrix.mpilib }}/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/opt/mpi/${{ matrix.mpilib }}/lib:$CUQUANTUM_SDK
python -m pip install pip~=22.0
python -m pip install ninja cmake custatevec-cu11 pytest pytest-mock flaky pytest-cov mpi4py
SKIP_COMPILATION=True PL_BACKEND=lightning_qubit python -m pip install -e . -vv

- name: Build and install package
env:
CUQUANTUM_SDK: $(python -c "import site; print( f'{site.getsitepackages()[0]}/cuquantum/lib')")
run: |
PL_BACKEND=lightning_gpu python setup.py build_ext -i --define="CMAKE_CXX_COMPILER=mpicxx;CMAKE_PREFIX_PATH=/opt/mpi/${{ matrix.mpilib }};ENABLE_MPI=ON;CMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc;CMAKE_CUDA_ARCHITECTURES=${{ env.CI_CUDA_ARCH }};Python_EXECUTABLE=${{ steps.python_path.outputs.python }}"
PL_BACKEND=lightning_gpu python -m pip install -e . --verbose

- name: Run PennyLane-Lightning-GPU unit tests
run: |
source /etc/profile.d/modules.sh
module use /opt/modules/
module load ${{ matrix.mpilib }}
PL_DEVICE=lightning.gpu python -m pytest ./tests/
PL_DEVICE=lightning.gpu /opt/mpi/${{ matrix.mpilib }}/bin/mpirun -np 2 python -m pytest ./mpitests/test_adjoint_jacobian.py

- name: Cleanup
if: always()
run: |
rm -rf ${{ steps.setup_venv.outputs.venv_name }}
rm -rf *
rm -rf .git
rm -rf .gitignore
rm -rf .github
pip cache purge
Loading