-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #24 from qiboteam/qibotn_integration
Qibotn integration to Qibo
- Loading branch information
Showing
25 changed files
with
3,259 additions
and
353 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then | ||
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" | ||
fi | ||
|
||
nix_direnv_watch_file flake.nix | ||
nix_direnv_watch_file flake.lock | ||
if ! use flake . --impure; then | ||
echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2 | ||
fi |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,38 @@ | ||
# A single CI script with github workflow | ||
name: Tests | ||
|
||
env: | ||
CUDA_PATH: | ||
|
||
on: | ||
workflow_dispatch: | ||
push: | ||
pull_request: | ||
types: [labeled] | ||
|
||
jobs: | ||
check: | ||
# job to check cuda availability | ||
runs-on: ubuntu-latest | ||
steps: | ||
- id: step1 | ||
run: echo "test=${{ env.CUDA_PATH != ''}}" >> "$GITHUB_OUTPUT" | ||
- id: step2 | ||
run: echo "test=${{ contains(github.event.pull_request.labels.*.name, 'run-workflow') || github.event_name == 'push' }}" >> "$GITHUB_OUTPUT" | ||
outputs: | ||
cuda_avail: ${{ fromJSON(steps.step1.outputs.test) && fromJSON(steps.step2.outputs.test) }} | ||
|
||
build: | ||
if: contains(github.event.pull_request.labels.*.name, 'run-workflow') || github.event_name == 'push' && {{ $CUDA_PATH != '' }} | ||
# job to build | ||
needs: check | ||
if: ${{fromJSON(needs.check.outputs.cuda_avail)}} | ||
strategy: | ||
matrix: | ||
os: [ubuntu-latest] | ||
python-version: [3.8, 3.9, "3.10"] | ||
uses: qiboteam/workflows/.github/workflows/rules.yml@main | ||
matrix: | ||
os: [ubuntu-latest] | ||
python-version: [3.8, 3.9, "3.10", "3.11"] | ||
uses: qiboteam/workflows/.github/workflows/rules-poetry.yml@main | ||
with: | ||
os: ${{ matrix.os }} | ||
python-version: ${{ matrix.python-version }} | ||
environment: "qibotn" | ||
pip-extras: "analysis,tests" | ||
poetry-extras: "--with analysis,tests" | ||
secrets: inherit |
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,118 @@ | ||
Qibotn is the tensor-network translation module for Qibo to support large-scale simulation of quantum circuits and acceleration. | ||
# Qibotn | ||
|
||
To get started, `python setup.py install` to install the tools and dependencies. | ||
The tensor network translation module for Qibo to support large-scale simulation of quantum circuits and acceleration. | ||
|
||
## Supported Computation | ||
|
||
Tensor Network Types: | ||
|
||
- Tensornet (TN) | ||
- Matrix Product States (MPS) | ||
|
||
Tensor Network contractions to: | ||
|
||
- dense vectors | ||
- expecation values of given Pauli string | ||
|
||
The supported HPC configurations are: | ||
|
||
- single-node CPU | ||
- single-node GPU or GPUs | ||
- multi-node multi-GPU with Message Passing Interface (MPI) | ||
- multi-node multi-GPU with NVIDIA Collective Communications Library (NCCL) | ||
|
||
Currently, the supported tensor network libraries are: | ||
|
||
- [cuQuantum](https://github.com/NVIDIA/cuQuantum), an NVIDIA SDK of optimized libraries and tools for accelerating quantum computing workflows. | ||
- [quimb](https://quimb.readthedocs.io/en/latest/), an easy but fast python library for ‘quantum information many-body’ calculations, focusing primarily on tensor networks. | ||
|
||
## Installation | ||
|
||
To get started: | ||
|
||
```sh | ||
python setup.py install | ||
``` | ||
|
||
to install the tools and dependencies. A few extras are provided, check `setup.py` in | ||
case you need them. | ||
|
||
<!-- TODO: describe extras, after Poetry adoption and its groups --> | ||
|
||
## Sample Codes | ||
|
||
### Single-Node Example | ||
|
||
The code below shows an example of how to activate the Cuquantum TensorNetwork backend of Qibo. | ||
|
||
```py | ||
import numpy as np | ||
from qibo import Circuit, gates | ||
import qibo | ||
|
||
# Below shows how to set the computation_settings | ||
# Note that for MPS_enabled and expectation_enabled parameters the accepted inputs are boolean or a dictionary with the format shown below. | ||
# If computation_settings is not specified, the default setting is used in which all booleans will be False. | ||
# This will trigger the dense vector computation of the tensornet. | ||
|
||
computation_settings = { | ||
"MPI_enabled": False, | ||
"MPS_enabled": { | ||
"qr_method": False, | ||
"svd_method": { | ||
"partition": "UV", | ||
"abs_cutoff": 1e-12, | ||
}, | ||
}, | ||
"NCCL_enabled": False, | ||
"expectation_enabled": False, | ||
} | ||
|
||
|
||
qibo.set_backend( | ||
backend="qibotn", platform="cutensornet", runcard=computation_settings | ||
) # cuQuantum | ||
# qibo.set_backend(backend="qibotn", platform="QuimbBackend", runcard=computation_settings) #quimb | ||
|
||
|
||
# Construct the circuit | ||
c = Circuit(2) | ||
# Add some gates | ||
c.add(gates.H(0)) | ||
c.add(gates.H(1)) | ||
|
||
# Execute the circuit and obtain the final state | ||
result = c() | ||
|
||
print(result.state()) | ||
``` | ||
|
||
Other examples of setting the computation_settings | ||
|
||
```py | ||
# Expectation computation with specific Pauli String pattern | ||
computation_settings = { | ||
"MPI_enabled": False, | ||
"MPS_enabled": False, | ||
"NCCL_enabled": False, | ||
"expectation_enabled": { | ||
"pauli_string_pattern": "IXZ", | ||
}, | ||
} | ||
|
||
# Dense vector computation using multi node through MPI | ||
computation_settings = { | ||
"MPI_enabled": True, | ||
"MPS_enabled": False, | ||
"NCCL_enabled": False, | ||
"expectation_enabled": False, | ||
} | ||
``` | ||
|
||
### Multi-Node Example | ||
|
||
Multi-node is enabled by setting either the MPI or NCCL enabled flag to True in the computation settings. Below shows the script to launch on 2 nodes with 2 GPUs each. $node_list contains the IP of the nodes assigned. | ||
|
||
```sh | ||
mpirun -n 4 -hostfile $node_list python test.py | ||
``` |
Oops, something went wrong.