Release Notes¶
cuQuantum Python v22.11.0¶
We are on NVIDIA/cuQuantum GitHub Discussions! For any questions regarding (or exciting works built upon) cuQuantum, please feel free to reach out to us on GitHub Discussions.
Bug reports should still go to our GitHub issue tracker.
Add new APIs and functionalities:
For cuTensorNet low-level APIs, please refer to the release notes of cuTensorNet v2.0.0; no new cuStateVec API is added.
A new API,
cuquantum.CircuitToEinsum.batched_amplitudes()
to compute the amplitudes for a batch of qubits. This is equivalent to the kwargsfixed
support incuquantum.CircuitToEinsum.state_vector()
, which is deprecated and will be removed in a future release.A new API,
cuquantum.CircuitToEinsum.expectation()
to support expectation value computation for Pauli strings.A new helper API,
cuquantum.cutensornet.get_mpi_comm_pointer()
to get the pointer to and size of MPI communicator for the new low-level APIcuquantum.cutensornet.distributed_reset_configuration()
that enables disbtributed parallelism. This capability requiresmpi4py
.The
cuquantum
module now has a command line interface to return the include and library paths and the linker flags for the cuTENSOR and cuQuantum libraries:python -m cuquantum
. See Command Line Support for detail.Support for controlling non-blocking behavior via the new option
cuquantum.NetworkOptions.blocking
.
API changes:
For cuTensorNet low-level APIs, please refer to the release notes of cuTensorNet v2.0.0; cuStateVec low-level APIs remain unchanged.
Users can set the tensor qualifiers by using the dedicated NumPy dtype
cuquantum.cutensornet.tensor_qualifiers_dtype
. See the Python sample (python/samples/cutensornet/coarse/example21.py) for details. For example, complex conjugation can be done on-the-fly, reducing memory pressure.To get/set the contraction path or slicing configurations, users should use
contraction_optimizer_info_get_attribute_dtype()
to get a NumPy custom dtype representing the path or slicing configuration object, in a manner consistent with the method used for all other attributes. Refer to the docstring for details. The (experimental)ContractionPath
object is removed.
Functionality/performance improvements:
Improved performance when contracting two tensors using
cuquantum.contract()
or related APIs.Improved performance for reusing a
Network
object withreset_operands()
.The lightcone construction in
CircuitToEinsum
is improved to further reduce the number of tensors in the network.The build system now supports PEP-517 and standard
pip
command-line flags. The environment variableCUQUANTUM_IGNORE_SOLVER
is no longer used. See Getting Started for more information.
Bugs fixed:
Fix a potential multi-device bug in the internal device context switch.
Fix a bug for using invalid mode labels in
cuquantum.CircuitToEinsum
when input circuit size gets large.
Other changes:
Provide one more distributed (MPI+NCCL) Python sample (
example4_mpi_nccl.py
) to show how to use cuTensorNet and create parallelism.The test infrastructure will show tests that are not runnable as “deselected” instead of “skipped”.
A new pip wheel is released on PyPI:
pip install cuquantum-python-cu11
. Users can still install cuQuantum Python viapip install cuquantum-python
, as before.cuquantum-python
now becomes a meta-wheel pointing tocuquantum-python-cu11
. This may change in a future release when a new CUDA version becomes available. Using wheels with the-cuXX
suffix is encouraged.
Compatibility notes:
cuQuantum Python now requires cuStateVec 1.1.0 or above.
cuQuantum Python now requires cuTensorNet 2.0.0 or above.
cuQuantum Python now requires cuTENSOR 1.6.1 or above.
cuQuantum Python v22.07.1¶
Bugs fixed:
The 22.07.0
cuquantum
wheel had a wrong file layout. (If you are using thecuqauntum
22.07.0.1 or 22.07.0.2 hot-fix wheel, they will work fine.)
cuQuantum Python v22.07.0¶
Add new APIs and functionalities:
For low-level APIs, please refer to the release notes of cuStateVec v1.1.0 and cuTensorNet v1.1.0.
New high-level API
cuquantum.CircuitToEinsum
that supports conversion ofqiskit.QuantumCircuit
andcirq.Circuit
to tensor network contraction:Support state coefficient
Support bitstring amplitude
Support reduced density matrix
Backend support on NumPy, CuPy and PyTorch
Add a keyword-only argument
slices
to thecuquantum.Network.contract()
method to support contracting an arbitrary subset of the slices.Add a new attribute
intermediate_modes
to thecuquantum.OptimizerInfo
object for retrieving the mode labels of all intermediate tensors.Add a new attribute
num_slices
to thecuquantum.OptimizerInfo
object for querying the total number of slices.
Functionality/performance improvements:
Improve the einsum expression parser.
Bugs fixed:
An exception mistakenly raised in
cuquantum.einsum()
whenoptimize
is set toFalse
.Missing f-specifier in the string representation of
cuquantum.OptimizerInfo
.
Other changes:
Drop the dependency on
typing_extensions
.Provide distributed (MPI-based) Python samples that show how easy it is to use cuTensorNet and create parallelism.
mpi4py
is required for running these samples.Update the low-level, non-distributed sample
tensornet_example.py
by improving memory usage and switching to the new contraction APIcontract_slices()
.Provide Jupyter notebooks to show how to convert a quantum circuit to a tensor network contraction.
Add a Python sample to illustrate the usage of the new multi-device bit-swapping
multi_device_swap_index_bits()
API.Restructure the
samples
folder to separate cuStateVec and cuTensorNet samples.
Compatibility notes:
cuQuantum Python now requires cuQuantum v22.07.
cuQuantum Python now requires Python 3.8+.
cuQuantum Python now requires NumPy v1.19+.
cuQuantum Python supports Cirq v0.6.0+.
cuQuantum Python supports Qiskit v0.24.0+.
cuQuantum Python v22.05.0¶
Bugs fixed:
Make
typing_extensions
a required dependency (NVIDIA/cuQuantum#3)Fix issues in the test suite
Other changes:
The Python sample (python/samples/tensornet_example.py) is updated to include a correctness check
cuQuantum Python v22.03.0¶
Stable release:
Starting this release, cuQuantum Python switches to the CalVer versioning scheme, following cuQuantum SDK
pip
wheels are released on PyPI:pip install cuquantum-python
Functionality/performance improvements:
High-level tensor network APIs are now fully NumPy compliant:
Support generalized einsum expressions
Support ellipsis
Support broadcasting
Add new APIs and functionalities for:
For low-level APIs, please refer to the release notes of cuStateVec v1.0.0 and cuTensorNet v1.0.0.
The high-level APIs support an EMM-like memory plugin interface (see Memory management).
API changes:
For low-level APIs, please refer to the release notes of cuStateVec v1.0.0 and cuTensorNet v1.0.0.
No API breaking changes for the high-level APIs.
Compatibility notes:
cuQuantum Python requires cuQuantum v22.03
cuQuantum Python requires Python 3.7+
In the next release, Python 3.7 will be dropped to follow NEP-29.
cuQuantum Python requires NumPy v1.17+
In the next release, NumPy 1.17 & 1.18 will be dropped to follow NEP-29.
cuQuantum Python requires CuPy v9.5+
cuQuantum Python supports PyTorch v1.10+
Known issues:
If you install cuQuantum Python from PyPI (
pip install cuquantum-python
), make sure you also installtyping_extensions
(viapip
orconda
). This only affects the wheel installation and will be fixed in the next release. (NVIDIA/cuQuantum#3)
cuQuantum Python v0.1.0.1¶
Patch release:
Add a
__version__
string
cuQuantum Python v0.1.0.0¶
Initial release (beta 2)
Compatibility notes:
cuQuantum Python requires cuQuantum v0.1.0
cuQuantum Python requires NumPy v1.17+
cuQuantum Python requires CuPy v9.5+
cuQuantum Python supports PyTorch v1.10+
Limitation notes:
In certain environments, if PyTorch is installed
import cuquantum
could fail (with a segmentation fault). It is currently under investigation and a temporary workaround is to importtorch
before importingcuquantum
.