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 MPSTNCuda class #704

Merged
merged 70 commits into from
May 14, 2024
Merged
Show file tree
Hide file tree
Changes from 62 commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
44c84c4
init commit
multiphaseCFD Apr 30, 2024
a1997a3
Auto update version from '0.36.0-dev44' to '0.36.0-dev46'
ringo-but-quantum Apr 30, 2024
8c69e91
typo fix
multiphaseCFD Apr 30, 2024
08736b4
fix last blank line error
multiphaseCFD Apr 30, 2024
3ac6d91
fix codecov warnings
multiphaseCFD Apr 30, 2024
8a594fa
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD Apr 30, 2024
245974f
fix CI & change ctor interface
multiphaseCFD Apr 30, 2024
3d29627
remove unused methods
multiphaseCFD Apr 30, 2024
00283ba
tidy up code and add more unit tests
multiphaseCFD Apr 30, 2024
b19200f
add testhelper & tidy up code
multiphaseCFD Apr 30, 2024
60f5695
fix typo
multiphaseCFD Apr 30, 2024
c437c3f
set PL_TENSOR in the root cmakelists
multiphaseCFD Apr 30, 2024
6889198
add more tests for tensor classes
multiphaseCFD Apr 30, 2024
a71c2e4
make format
multiphaseCFD Apr 30, 2024
381f95e
fix sitesExtents_ init & add mpscutn tests
multiphaseCFD Apr 30, 2024
6508c34
only test cutnmps cpp layer
multiphaseCFD Apr 30, 2024
b03e93c
further tidy up code
multiphaseCFD Apr 30, 2024
8b0f0f5
update MPS ctor
multiphaseCFD May 1, 2024
597dc58
refactor MPSCutn to allow easy TN extension
multiphaseCFD May 1, 2024
32f5c9f
move methods to CutnBase class & rename maxextent
multiphaseCFD May 1, 2024
fdcbc6c
update docstring
multiphaseCFD May 1, 2024
ea1e0d0
turn on all ci unit tests
multiphaseCFD May 1, 2024
192cc94
fix codefactor complaining
multiphaseCFD May 1, 2024
e658a40
add changelog
multiphaseCFD May 1, 2024
3f8282f
Trigger CI
multiphaseCFD May 1, 2024
46f050a
quick fix for getFreeMemorySize
multiphaseCFD May 1, 2024
4a822eb
fix based on some comments
multiphaseCFD May 2, 2024
5445bbe
size_t->std::size_t
multiphaseCFD May 2, 2024
e606691
set computeState() as protected & make format
multiphaseCFD May 2, 2024
dc55714
copy ctor -> std::move
multiphaseCFD May 2, 2024
27e3dab
safer store for ptr to sitesExtents and tensor
multiphaseCFD May 2, 2024
81e745e
std::vector<void*> ->std::vector<uint64_t*>
multiphaseCFD May 2, 2024
acc870f
update base on comments
multiphaseCFD May 2, 2024
0a91c9e
update docstring
multiphaseCFD May 3, 2024
1318aa5
update memory set
multiphaseCFD May 3, 2024
a127527
make format
multiphaseCFD May 3, 2024
99824ee
size_t->std::size_t for ->GENERATE
multiphaseCFD May 3, 2024
486e8f8
Auto update version from '0.36.0-dev46' to '0.36.0-dev48'
ringo-but-quantum May 3, 2024
8c12697
On-Board Lightning Linux workflows (that are run on PRs) to large run…
rashidnhm May 3, 2024
45fa5c5
Port PR #705 changes (#711)
AmintorDusko May 3, 2024
932c8f9
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 3, 2024
3aa6a15
fix naming comments and drop initHelper_()
multiphaseCFD May 6, 2024
d87a6b8
move MPSStatus to MPS class & update docstrings
multiphaseCFD May 6, 2024
e90750d
udpate tensornetbase ctor
multiphaseCFD May 6, 2024
0d03cf1
Auto update version from '0.36.0-dev48' to '0.36.0-dev49'
ringo-but-quantum May 6, 2024
0befceb
enum to c++ style
multiphaseCFD May 6, 2024
43e1032
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 6, 2024
858defa
update unit tests
multiphaseCFD May 7, 2024
8170f7a
update class name cutn->TNCuda
multiphaseCFD May 7, 2024
e6248b0
Auto update version from '0.36.0-dev49' to '0.37.0-dev2'
ringo-but-quantum May 7, 2024
b6aa4cd
Syncing master with V0.36.0 branch (#715)
AmintorDusko May 7, 2024
cc2688e
Update Linux wheels to use manylinux_2_28 (#667)
AmintorDusko May 7, 2024
5610531
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 7, 2024
d0a8ca7
change filename
multiphaseCFD May 7, 2024
c79104c
make format
multiphaseCFD May 7, 2024
4df1757
Auto update version from '0.37.0-dev2' to '0.37.0-dev3'
ringo-but-quantum May 7, 2024
6c2fbb4
change path name
multiphaseCFD May 7, 2024
01187c1
Accelerate CI parallelizing over OMP configs (#712)
vincentmr May 7, 2024
bafea32
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 7, 2024
5c46064
add changelog
multiphaseCFD May 1, 2024
2b8b3c7
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 7, 2024
0c06808
Auto update version from '0.37.0-dev3' to '0.37.0-dev4'
ringo-but-quantum May 7, 2024
03b0434
fix multiple reset()/setbasisstate() & resolve comments
multiphaseCFD May 9, 2024
a1c4ea8
add blank lines to the end of each file
multiphaseCFD May 9, 2024
5be542b
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 9, 2024
d55d966
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 10, 2024
d8fcc27
Merge branch 'master' into add_MPSCutn_basis
multiphaseCFD May 13, 2024
3a791ac
Auto update version from '0.37.0-dev8' to '0.37.0-dev9'
ringo-but-quantum May 13, 2024
4434036
Merge branch 'master' into add_MPSCutn_basis
maliasadi May 14, 2024
a653027
Auto update version from '0.37.0-dev9' to '0.37.0-dev10'
ringo-but-quantum May 14, 2024
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
8 changes: 7 additions & 1 deletion .github/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

### New features since last release

* Add `cutensornet` backed `MPS` C++ layer to `lightning.tensor`.
[(#704)](https://github.com/PennyLaneAI/pennylane-lightning/pull/704)

### Breaking changes

### Improvements
Expand All @@ -23,14 +26,17 @@

This release contains contributions from (in alphabetical order):

Amintor Dusko, Pietropaolo Frisoni, Vincent Michaud-Rioux
Amintor Dusko, Pietropaolo Frisoni, Vincent Michaud-Rioux, Shuli Shu

---

# Release 0.36.0

### New features since last release

* Add `cutensornet` backed `MPS` C++ layer to `lightning.tensor`.
[(#704)](https://github.com/PennyLaneAI/pennylane-lightning/pull/704)

* Add Python class for the `lightning.tensor` device which uses the new device API and the interface for `quimb` based on the MPS method.
[(#671)](https://github.com/PennyLaneAI/pennylane-lightning/pull/671)

Expand Down
192 changes: 192 additions & 0 deletions .github/workflows/tests_lmps_tncuda_cpp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
name: Testing::Linux::x86_64::MPSTNCuda::C++
# TODO remove MPS from the workflow name and the workflow filename once exact is in.
# TODO remove the `PL_TENSOR_METHOD` option once exact TN is added.
# TODO remove the `pl_tensor_method` once exact TN is added.
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)
release:
pull_request:
paths:
- .github/workflows/tests_lmps_tncuda_cpp.yml
- pennylane_lightning/core/src/**
- '!pennylane_lightning/core/src/simulators/lightning_kokkos/**'
- '!pennylane_lightning/core/src/simulators/lightning_qubit/**'
- '!pennylane_lightning/core/src/simulators/lightning_gpu/**'
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

concurrency:
group: tests_lmps_tncuda_cpp-${{ github.ref }}-${{ github.event }}-${{ inputs.lightning-version }}-${{ inputs.pennylane-version }}
cancel-in-progress: true

jobs:
builddeps:
runs-on:
- self-hosted
- ubuntu-22.04
- gpu

strategy:
max-parallel: 1
matrix:
os: [ubuntu-22.04]
pl_backend: ["lightning_tensor"]
cuda_version: ["12"]

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 }}
echo "${PATH}" >> $GITHUB_PATH
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV
nvcc --version
nvidia-smi

cpptestswithMPSTNCuda:
if: ${{ !contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }}
needs: [builddeps]
strategy:
matrix:
os: [ubuntu-22.04]
pl_backend: ["lightning_tensor"]
pl_tensor_method: ["mps"]
pl_tensor_backend: ["cutensornet"]
cuda_version: ["12"]

name: C++ tests (Lightning-Tensor-MPS-TNCuda)
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 }}
echo "${PATH}" >> $GITHUB_PATH
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> $GITHUB_ENV
nvcc --version
nvidia-smi
- name: Checkout PennyLane-Lightning-Tensor-MPS-TNCuda
uses: actions/checkout@v4
with:
path: main

- uses: actions/setup-python@v5
name: Install Python
with:
python-version: '3.9'

- 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 scipy custatevec-cu${{ matrix.cuda_version }} cutensornet-cu${{ matrix.cuda_version }}
- name: Build and run unit tests
run: |
set -x
cd main
cmake . -BBuild \
-DCUQUANTUM_SDK=$(python -c "import site; print( f'{site.getsitepackages()[0]}/cuquantum')")\
-DBUILD_TESTS=ON \
-DENABLE_PYTHON=OFF \
-DPL_BACKEND=${{ matrix.pl_backend }} \
-DPL_TENSOR_METHOD=${{ matrix.pl_tensor_method }} \
-DPL_TENSOR_BACKEND=${{ matrix.pl_tensor_backend }} \
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \
-DENABLE_COVERAGE=ON \
-G Ninja
cmake --build ./Build
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
set +x
- name: Upload test results
uses: actions/upload-artifact@v3
if: always()
with:
name: ubuntu-tests-reports-${{ github.job }}_${{ matrix.pl_backend }}
path: ./main/Build/tests/results_${{ github.job }}_${{ matrix.pl_backend }}
if-no-files-found: error

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


upload-to-codecov-linux-cpp:
needs: [cpptestswithMPSTNCuda]
name: Upload coverage data to codecov
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download coverage reports
uses: actions/download-artifact@v3
with:
name: ubuntu-codecov-results-cpp

- name: Upload to Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
verbose: true
token: ${{ secrets.CODECOV_TOKEN }}

- 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
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ endif()
# Print PL_BACKEND
foreach(BACKEND ${PL_BACKEND})
message(STATUS "PL_BACKEND: ${BACKEND}")
if("${BACKEND}" STREQUAL "lightning_tensor")
set(PL_TENSOR_METHOD "mps" CACHE STRING "PennyLane LightningTensor MPS simulator.")
set(PL_TENSOR_BACKEND "cutensornet" CACHE STRING "PennyLane LightningTensor backed by cutensornet")
set(PL_TENSOR "${PL_BACKEND}_${PL_TENSOR_METHOD}_${PL_TENSOR_BACKEND}")
endif()
endforeach()

# Process compile options
Expand Down
54 changes: 54 additions & 0 deletions cmake/support_pltensortncuda.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
###############################################################################################
# This file provides macros to process cuTensorNet external libraries.
###############################################################################################

# Include this only once
include_guard()

# Macro to aid in finding cuTensorNet lib
macro(findCutensornet external_libs)
find_library(CUTENSORNET_LIB
NAMES libcutensornet.so.2 libcutensornet.so
HINTS /usr/lib
/usr/local/cuda
/usr/local/lib
/opt
/opt/cuda
lib
lib64
${CUQUANTUM_SDK}/lib
${CUQUANTUM_SDK}/lib64
${CUDAToolkit_LIBRARY_DIR}
${CUDA_TOOLKIT_ROOT_DIR}/lib
${CUDA_TOOLKIT_ROOT_DIR}/lib64
${Python_SITELIB}/cuquantum/lib
ENV LD_LIBRARY_PATH
)

find_file( CUTENSORNET_INC
NAMES cutensornet.h
HINTS /usr/include
/usr/local/cuda
/usr/local/include
/opt
/opt/cuda
include
${CUQUANTUM_SDK}/include
${CUDAToolkit_INCLUDE_DIRS}
${CUDA_TOOLKIT_ROOT_DIR}/include
${Python_SITELIB}/cuquantum/include
ENV CPATH
)

if(NOT CUTENSORNET_LIB OR NOT CUTENSORNET_INC)
message(FATAL_ERROR "\nUnable to find cuQuantum SDK installation. Please ensure it is correctly installed and available on path.")
else()
add_library(cutensornet SHARED IMPORTED GLOBAL)

get_filename_component(CUTENSORNET_INC_DIR ${CUTENSORNET_INC} DIRECTORY)
target_include_directories(cutensornet INTERFACE ${CUTENSORNET_INC_DIR})
set_target_properties(cutensornet PROPERTIES IMPORTED_LOCATION ${CUTENSORNET_LIB})

target_link_libraries(${external_libs} INTERFACE cutensornet)
endif()
endmacro()
2 changes: 1 addition & 1 deletion pennylane_lightning/core/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,4 @@
Version number (major.minor.patch[-label])
"""

__version__ = "0.37.0-dev3"
__version__ = "0.37.0-dev4"
12 changes: 9 additions & 3 deletions pennylane_lightning/core/src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,15 @@ set(COMPONENT_SUBDIRS algorithms
simulators
utils
)
foreach(COMP ${COMPONENT_SUBDIRS})
add_subdirectory(${COMP})
endforeach()

if("${PL_BACKEND}" STREQUAL "lightning_tensor")
add_subdirectory(simulators)
add_subdirectory(utils)
else()
foreach(COMP ${COMPONENT_SUBDIRS})
add_subdirectory(${COMP})
endforeach()
endif()

if (BUILD_TESTS)
# Include macros supporting tests.
Expand Down
5 changes: 3 additions & 2 deletions pennylane_lightning/core/src/simulators/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ cmake_minimum_required(VERSION 3.20)

project(lightning_simulators LANGUAGES CXX)

add_subdirectory(base)

if(NOT "${PL_BACKEND}" STREQUAL "lightning_tensor")
add_subdirectory(base)
endif()
###############################################################################
# Determine simulator and include its directory
###############################################################################
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 3.20)

project(lightning_tensor LANGUAGES CXX)

###############################################################################
# Include all nested sources directories
###############################################################################
set(COMPONENT_SUBDIRS utils
tensor)

if("${PL_TENSOR_BACKEND}" STREQUAL "cutensornet")
list(APPEND COMPONENT_SUBDIRS tncuda)
else()
message(FATAL_ERROR "Lightning Tensor currently doesn't support ${PL_TENSOR_BACKEND} method")
endif()

foreach(COMP ${COMPONENT_SUBDIRS})
add_subdirectory(${COMP})
endforeach()
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
cmake_minimum_required(VERSION 3.20)
project(${PL_BACKEND}_tensor LANGUAGES CXX)

add_library(${PL_BACKEND}_tensor INTERFACE)

add_subdirectory(base)

set(TNCUDA_UTILS_ADDED FALSE CACHE BOOL "Add tncuda_utils header files")

if("${PL_TENSOR_BACKEND}" STREQUAL "cutensornet" AND NOT TNCUDA_UTILS_ADDED)
add_subdirectory(tncuda)
target_include_directories(${PL_BACKEND}_tensor INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/tncuda)
target_link_libraries(${PL_BACKEND}_tensor INTERFACE tensor_cuda)
set(CUDA_UTILS_ADDED TRUE)
endif()

target_include_directories(${PL_BACKEND}_tensor INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/base)
target_link_libraries(${PL_BACKEND}_tensor INTERFACE tensorBase lightning_utils lightning_compile_options lightning_external_libs)

set_property(TARGET ${PL_BACKEND}_tensor PROPERTY POSITION_INDEPENDENT_CODE ON)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.20)
project(tensorBase LANGUAGES CXX)

add_library(tensorBase INTERFACE)


target_include_directories(tensorBase INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(tensorBase INTERFACE lightning_utils lightning_compile_options lightning_external_libs)

set_property(TARGET tensorBase PROPERTY POSITION_INDEPENDENT_CODE ON)
Loading
Loading