Lightning Tensor device¶
The lightning.tensor device is a tensor network simulator, supporting both the Matrix Product State (MPS) and Exact Tensor Network (TN) methods. The device is built on top of the cutensornet library from the NVIDIA cuQuantum SDK, enabling GPU-accelerated simulation of quantum tensor network evolution. This device is designed to simulate large-scale quantum circuits using tensor networks. For small circuits, state-vector simulator plugins may be more suitable.
The lightning.tensor device defaults to the Matrix Product State (MPS) method, and can be loaded using:
import pennylane as qml
dev = qml.device("lightning.tensor", wires=100)
By default, the device approximates the quantum state using an MPS. The default setup for the MPS tensor network approximation is:
max_bond_dim(maximum bond dimension) defaults to128.
cutoff(singular value truncation threshold) defaults to0.
cutoff_mode(singular value truncation mode) defaults toabs, considering the absolute values of the singular values; Alternatively, users can opt to setcutoff_modetorelto consider the relative values of the singular values.
Note that cutensornet will automatically determine the reduced extent of the bond dimension based on the lowest among the multiple truncation cutoffs (max_bond_dim, cutoff-abs or cutoff-rel). For more details on how the cutoff works, please check the cuQuantum documentation.
Users also have the flexibility to customize MPS parameters according to their specific needs with:
import pennylane as qml
num_qubits = 100
device_kwargs_mps = {
"max_bond_dim": 64,
"cutoff": 1e-10,
"cutoff_mode": "abs",
}
dev = qml.device("lightning.tensor", wires=num_qubits, method="mps", **device_kwargs_mps)
Users can also run the lightning.tensor device in the Exact Tensor Network mode by setting the method argument to "tn":
import pennylane as qml
dev = qml.device("lightning.tensor", wires=100, method="tn")
The lightning.tensor device dispatches all operations to be performed on a CUDA-capable GPU of generation SM 7.0
and greater (Volta and later). This device supports both exact and finite shots measurements. Currently, the supported differentiation methods are parameter-shift and finite-diff. Note that the MPS backend of lightning.tensor supports multi-wire gates via Matrix Product Operators (MPO).
The lightning.tensor device is designed for expectation value calculations. Measurements of probs() or state() return dense vectors of dimension \(2^{\text{n_qubits}}\), so they should only be used for small systems.
Note
Currently only single-wire Hermitian observables are supported. You can use pauli_decompose() on smaller matrices to obtain a compatible Pauli decomposition in the meantime.
The lightning.tensor device allows users to get quantum circuit gradients using the param_shift() method. This can be enabled at the PennyLane QNode level with:
@qml.qnode(dev, diff_method="parameter-shift")
def circuit(params):
...
Check out the Lightning-Tensor installation guide for more information.
Note that lightning.tensor cannot be cleaned up like other state-vector devices since the data is attached to the graph. It is recommended to create a new lightning.tensor device per circuit to ensure resources are correctly handled.
See also
DefaultTensor for a CPU only tensor network simulator device.
Operations and observables support¶
The lightning.tensor supports all gate operations supported by PennyLane, with the exception of StatePrep, which is not supported by the Exact Tensor Network method.
Supported operations:
Prepares a single computational basis state. |
|
Construct a unitary \(U(A)\) such that an arbitrary matrix \(A\) is encoded in the top-left block. |
|
The controlled-NOT operator |
|
A qubit controlled phase shift. |
|
Apply an arbitrary fixed unitary matrix |
|
The controlled-Rot operator |
|
The controlled-RX operator |
|
The controlled-RY operator |
|
The controlled-RZ operator |
|
The controlled-swap operator |
|
The controlled-Y operator |
|
The controlled-Z operator |
|
Apply an arbitrary diagonal unitary matrix with a dimension that is a power of two. |
|
Double excitation rotation. |
|
Double excitation rotation with negative phase-shift outside the rotation subspace. |
|
Double excitation rotation with positive phase-shift outside the rotation subspace. |
|
An echoed RZX(\(\pi/2\)) gate. |
|
A global phase operation that multiplies all components of the state by \(e^{-i \phi}\). |
|
The Hadamard operator |
|
The Identity operator |
|
Ising XX coupling gate |
|
Ising (XX + YY) coupling gate |
|
Ising YY coupling gate |
|
Ising ZZ coupling gate |
|
The i-swap operator |
|
Spin-adapted spatial orbital rotation. |
|
The Pauli X operator |
|
The Pauli Y operator |
|
The Pauli Z operator |
|
Arbitrary single qubit local phase shift |
|
Phase SWAP gate |
|
Apply the |
|
Apply a |
|
Apply an arbitrary unitary matrix with a dimension that is a power of two. |
|
Arbitrary single qubit rotation |
|
The single qubit X rotation |
|
The single qubit Y rotation |
|
The single qubit Z rotation |
|
The single-qubit phase gate |
|
Single excitation rotation. |
|
Single excitation rotation with negative phase-shift outside the rotation subspace. |
|
Single excitation rotation with positive phase-shift outside the rotation subspace. |
|
Prepare subsystems using a state vector in the computational basis. |
|
The square root of i-swap operator. |
|
alias of |
|
The swap operator |
|
The single-qubit Square-Root X operator. |
|
The single-qubit T gate |
|
Toffoli (controlled-controlled-X) gate. |
Supported observables:
The lightning.tensor supports all observables supported by the Lightning state-vector simulators, besides SparseHamiltonian, Projector and limited support to Sum, Prod since lightning.tensor only supports 1-wire Hermitian observables.
Users cannot create a Sum observable or a Prod observable from Sum observables.
A symbolic operator representing the exponential of a operator. |
|
The Hadamard operator |
|
An arbitrary Hermitian observable. |
|
The Identity operator |
|
The Pauli X operator |
|
The Pauli Y operator |
|
The Pauli Z operator |
|
Symbolic operator representing the product of operators. |
|
Arithmetic operator representing the scalar product of an operator with the given scalar. |
|
Symbolic operator representing the sum of operators. |
Unsupported observables:
A Hamiltonian represented directly as a sparse matrix in Compressed Sparse Row (CSR) format. |
|
Observable corresponding to the state projector \(P=\ket{\phi}\bra{\phi}\). |