Qiskit 0.38 release notes
0.38.0
Terra 0.21.2
No change
Aer 0.11.0
Prelude
The Qiskit Aer 0.11.0 release highlights are:
- The migration to a new self-contained Python namespace
qiskit_aer
- The introduction of the
AerStatevector
class - The introduction of Aer implementations of
primitives
,Sampler
andEstimator
- Introduction of support for running with cuQuantum
New Features
-
Added support for
BackendV2
tofrom_backend()
. Now it can generate aNoiseModel
object from an inputBackendV2
instance. When aBackendV2
input is used onfrom_backend()
the two deprecated options,standard_gates
andwarnings
, are gracefully ignored. -
Added Aer implementation of
primitives
,Sampler
andBaseSampler
andBaseEstimator
interfaces leverage qiskit aer to efficiently perform the computation of the primitive operations. You can refer to theqiskit.primitives
docs 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 settingdevice='GPU'
andcuStateVec_threshold
options. cuStateVec is enabled when number of qubits of input circuit is equal or greater thancuStateVec_threshold
. -
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-aer
with 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)
Known Issues
- When running on Linux s390x platforms (or other big endian platforms) running circuits that contain
UnitaryGate
operations will not work because of an endianess bug. See #1506 for more details.
Upgrade Notes
-
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.
-
Set default
fusion_max_qubit
andfusion_threshold
depending on the configuredmethod
forAerSimulator
. Previously, the default values offusion_max_qubit
andfusion_threshold
were5
and14
respectively for all simulation methods. However, their optimal values depend on running methods. If you depended on the previous defaults you can explicitly setfusion_max_qubit=5
orfusion_threshold=14
to 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.5.0.41 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.
-
The
qiskit-aer
Python package has moved to be a self-contained namespace,qiskit_aer
. Previously, it shared a namespace withqiskit-terra
by beingqiskit.providers.aer
. This was problematic for several reasons, and this release moves away from it. For the time beingimport qiskit.providers.aer
will continue to work and redirect toqiskit_aer
automatically. Imports from the legacyqiskit.provider.aer
namespace will emit aDeprecationWarning
in the future. To avoid any potential issues starting with this release, updating all imports fromqiskit.providers.aer
toqiskit_aer
and fromqiskit.Aer
toqiskit_aer.Aer
is recommended. -
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 asSaveStatevector
). -
Removed the
qiskit_aer.extensions
module 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.
Bug Fixes
-
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
RelaxationNoisePass
where 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 for details.
-
Fixed simulation of
for
loops 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 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 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 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, 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>
-
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.
IBM Q Provider 0.19.2
No change