The Qiskit Aer 0.11.0 release highlights are:
- The migration to a new self-contained Python namespace
- The introduction of the
- The introduction of Aer implementations of
Sampler(opens in a new tab) and
Estimator(opens in a new tab)
- Introduction of support for running with cuQuantum (opens in a new tab)
Added support for
from_backend(). Now it can generate a
NoiseModelobject from an input
BackendV2instance. When a
BackendV2input is used on
from_backend()the two deprecated options,
warnings, are gracefully ignored.
Added Aer implementation of
Sampler(opens in a new tab) and
BaseEstimatorinterfaces leverage qiskit aer to efficiently perform the computation of the primitive operations. You can refer to the
qiskit.primitivesdocs for a more detailed description of the primitives API.
Added a shared library to Qiskit Aer that allows external programs to use Aer’s simulation methods. This is an experimental feature and its API may be changed without the deprecation period.
Added support for M1 macOS systems. Precompiled binaries for supported Python versions >=3.8 on arm64 macOS will now be published on PyPI for this and future releases.
Added support for cuQuantum, NVIDIA’s APIs for quantum computing, to accelerate statevector, density matrix and unitary simulators by using GPUs. This is experiemental implementation for cuQuantum Beta 2. (0.1.0) cuStateVec APIs are enabled to accelerate instead of Aer’s implementations by building Aer by setting path of cuQuantum to
CUSTATEVEC_ROOT. (binary distribution is not available currently.) cuStateVector is enabled by setting
cuStateVec_thresholdoptions. cuStateVec is enabled when number of qubits of input circuit is equal or greater than
Added partial support for running on ppc64le and s390x Linux platforms. This release will start publishing pre-compiled binaries for ppc64le and s390x Linux platforms on all Python versions. However, unlike other supported platforms not all of Qiskit’s upstream dependencies support these platforms yet. So a C/C++ compiler may be required to build and install these dependencies and a simple
pip install qiskit-aerwith just a working Python environment will not be sufficient to install Qiskit Aer. Additionally, these same constraints prevent us from testing the pre-compiled wheels before publishing them, so the same guarantees around platform support that exist for the other platforms don’t apply to these platforms.
Allow initialization with a label, that consists of
+-rl. Now the following code works:
import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(4) qc.initialize('+-rl') qc.save_statevector() AerSimulator(method="statevector").run(qc)
- When running on Linux s390x platforms (or other big endian platforms) running circuits that contain
UnitaryGateoperations will not work because of an endianess bug. See #1506 (opens in a new tab) for more details.
MPI parallelization for large number of qubits is optimized to apply multiple chunk-swaps as all-to-all communication that can decrease data size exchanged over MPI processes. This upgrade improve scalability of parallelization.
fusion_thresholddepending on the configured
AerSimulator. Previously, the default values of
14respectively for all simulation methods. However, their optimal values depend on running methods. If you depended on the previous defaults you can explicitly set
fusion_threshold=14to retain the previous default behavior. For example:
from qiskit_aer import AerSimulator sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14)
This is update to support cuQuantum 22.214.171.124 including bug fix of thread safety in some cuStateVec APIs. Now Qiskit Aer turns on multi-threading for multi-shots and multi-chunk parallelization when enabling cuStateVec.
Running qiskit-aer with Python 3.6 is no longer supported. Python >= 3.7 is now required to install and run qiskit-aer.
qiskit-aerPython package has moved to be a self-contained namespace,
qiskit_aer. Previously, it shared a namespace with
qiskit.providers.aer. This was problematic for several reasons (opens in a new tab), and this release moves away from it. For the time being
import qiskit.providers.aerwill continue to work and redirect to
qiskit_aerautomatically. Imports from the legacy
qiskit.provider.aernamespace will emit a
DeprecationWarningin the future. To avoid any potential issues starting with this release, updating all imports from
Removed snapshot instructions (such as
SnapshotStatevector) which were deprecated since 0.9.0. Applications that use these instructions need to be modified to use corresponding save instructions (such as
qiskit_aer.extensionsmodule completely. With the removal of the snapshot instructions, this module has become empty and no longer serves a purpose.
The required version of Qiskit Terra has been bumped to 0.20.0.
Fixes for MPI chunk distribution. Including fix for global indexing for Thrust implementations, fix for cache blocking of non-gate operations. Also savestatevector returns same statevector to all processes (only 1st process received statevector previously.)
Handles a multiplexer gate as a unitary gate if it has no control qubits. Previously, if a multiplexer gate does not have control qubits, quantum state was not updated.
Fixes a bug in
RelaxationNoisePasswhere instruction durations were always assumed to be in dt time units, regardless of the actual unit of the isntruction. Now unit conversion is correctly handled for all instruction duration units.
See #1453 (opens in a new tab) for details.
Fixed simulation of
forloops where the loop parameter was not used in the body of the loop. For example, previously this code would fail, but will now succeed:
import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc)
Fixes a bug in
NoiseModel.from_backend()that raised an error when T2 value greater than 2 * T1 was supplied by the backend. After this fix, it becomes to truncate T2 value up to 2 * T1 and issue a user warning if truncates. The bug was introduced at #1391 and, before that,
NoiseModel.from_backend()had truncated the T2 value up to 2 * T1 silently.
See Issue 1464 (opens in a new tab) for details.
Fix performance regression in noisy simulations due to large increase in serialization overhead for loading noise models from Python into C++ resulting from unintended nested Python multiprocessing calls. See issue 1407 (opens in a new tab) for details.
This is the fix for Issue #1557. Different seed numbers are generated for each process if seed_simulator option is not set. This fix average seed set in Circuit for all processes to use the same seed number.
This is a fix of MPI parallelization for multi-chunk parallelization and multi-shot distribution over parallel processes. There were missing distribution configuration that prevents MPI distribution, is now fixed.
This is fix for cache blocking transpiler and chunk parallelization for GPUs or MPI. This fix fixes issue with qubits which has many control or target qubits (> blocking_qubits). From this fix, only target qubits of the multi-controlled gate is cache blocked in blocking_qubits. But it does not support case if number of target qubits is still larger than blocking_qubits (i.e. large unitary matrix multiplication)
Fixes a bug in
QuantumError.to_dict()where N-qubit circuit instructions where the assembled instruction always applied to qubits
[0, ..., N-1]rather than the instruction qubits. This bug also affected device and fake backend noise models.
See Issue 1415 (opens in a new tab) for details.
Because a seed was randomly assigned to each circuit if seed_simulator is not set, multi-circuit simulation was not reproducible with another multi-circuit simulation. Users needed to run multiple single-circuit simulation with the seed_simulator which is randomly assigned in the multi-circuit simulation. This fix allows users to reproduce multi-circuit simulation with another multi-circuit simulation by setting seed_simulator of the first circuit in the first multi-circuit simulation. This fix also resolve an issue reported in https://github.com/Qiskit/qiskit-aer/issues/1511 (opens in a new tab), where simulation with parameter-binds returns identical results for each circuit instance.
Fix performance issue in multi-shots batched optimization for GPU when using Pauli noise. This fix allows multi-threading to runtime noise sampling, and uses nested OpenMP parallelization when using multiple GPUs. This is fix for issue 1473 <https://github.com/Qiskit/qiskit-aer/issues/1473 (opens in a new tab)>
This is the fix for cuStateVec support, fix for build error because of specification change of some APIs of cuStateVec from cuQuantum version 0.40.
Fixes an issue when while_loop is the tail of QuantumCircuit. while_loop is translated to jump and mark instructions. However, if a while_loop is at the end of a circuit, its mark instruction is truncated wrongly. This fix corrects the truncation algorithm to always remain mark instructions.