162 lines
12 KiB
Plaintext
162 lines
12 KiB
Plaintext
---
|
||
title: Qiskit 0.38 release notes
|
||
description: Changes made in Qiskit 0.38
|
||
in_page_toc_max_heading_level: 4
|
||
---
|
||
|
||
# Qiskit 0.38 release notes
|
||
|
||
## 0.38.0
|
||
|
||
<span id="terra-0-21-2" />
|
||
|
||
### Terra 0.21.2
|
||
|
||
No change
|
||
|
||
<span id="release-notes-aer-0-11-0" />
|
||
|
||
<span id="id99" />
|
||
|
||
### Aer 0.11.0
|
||
|
||
<span id="release-notes-aer-0-11-0-prelude" />
|
||
|
||
<span id="id100" />
|
||
|
||
#### 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`](/api/qiskit/0.45/primitives#module-qiskit.primitives "qiskit.primitives"), [`Sampler`](https://qiskit.org/ecosystem/aer/stubs/qiskit_aer.primitives.Sampler.html#qiskit_aer.primitives.Sampler "(in Qiskit Aer v0.13.0)") and [`Estimator`](https://qiskit.org/ecosystem/aer/stubs/qiskit_aer.primitives.Estimator.html#qiskit_aer.primitives.Estimator "(in Qiskit Aer v0.13.0)")
|
||
* Introduction of support for running with [cuQuantum](https://developer.nvidia.com/cuquantum-sdk)
|
||
|
||
<span id="release-notes-aer-0-11-0-new-features" />
|
||
|
||
<span id="id101" />
|
||
|
||
#### New Features
|
||
|
||
* Added support for [`BackendV2`](/api/qiskit/0.45/qiskit.providers.BackendV2 "qiskit.providers.BackendV2") to `from_backend()`. Now it can generate a `NoiseModel` object from an input [`BackendV2`](/api/qiskit/0.45/qiskit.providers.BackendV2 "qiskit.providers.BackendV2") instance. When a [`BackendV2`](/api/qiskit/0.45/qiskit.providers.BackendV2 "qiskit.providers.BackendV2") input is used on `from_backend()` the two deprecated options, `standard_gates` and `warnings`, are gracefully ignored.
|
||
|
||
* Added Aer implementation of [`primitives`](/api/qiskit/0.45/primitives#module-qiskit.primitives "qiskit.primitives"), [`Sampler`](https://qiskit.org/ecosystem/aer/stubs/qiskit_aer.primitives.Sampler.html#qiskit_aer.primitives.Sampler "(in Qiskit Aer v0.13.0)") and `BaseSampler` and [`BaseEstimator`](/api/qiskit/0.45/qiskit.primitives.BaseEstimator "qiskit.primitives.BaseEstimator") interfaces leverage qiskit aer to efficiently perform the computation of the primitive operations. You can refer to the [`qiskit.primitives`](/api/qiskit/0.45/primitives#module-qiskit.primitives "qiskit.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 setting `device='GPU'` and `cuStateVec_threshold` options. cuStateVec is enabled when number of qubits of input circuit is equal or greater than `cuStateVec_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:
|
||
|
||
```python
|
||
import qiskit
|
||
from qiskit_aer import AerSimulator
|
||
|
||
qc = qiskit.QuantumCircuit(4)
|
||
qc.initialize('+-rl')
|
||
qc.save_statevector()
|
||
|
||
AerSimulator(method="statevector").run(qc)
|
||
```
|
||
|
||
<span id="release-notes-aer-0-11-0-known-issues" />
|
||
|
||
<span id="id102" />
|
||
|
||
#### Known Issues
|
||
|
||
* When running on Linux s390x platforms (or other big endian platforms) running circuits that contain [`UnitaryGate`](/api/qiskit/0.45/qiskit.circuit.library.UnitaryGate "qiskit.circuit.library.UnitaryGate") operations will not work because of an endianess bug. See [#1506](https://github.com/Qiskit/qiskit-aer/issues/1506) for more details.
|
||
|
||
<span id="release-notes-aer-0-11-0-upgrade-notes" />
|
||
|
||
<span id="id103" />
|
||
|
||
#### 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` and `fusion_threshold` depending on the configured `method` for `AerSimulator`. Previously, the default values of `fusion_max_qubit` and `fusion_threshold` were `5` and `14` respectively for all simulation methods. However, their optimal values depend on running methods. If you depended on the previous defaults you can explicitly set `fusion_max_qubit=5` or `fusion_threshold=14` to retain the previous default behavior. For example:
|
||
|
||
```python
|
||
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 with `qiskit-terra` by being `qiskit.providers.aer`. [This was problematic for several reasons](https://github.com/Qiskit/qiskit/issues/559), and this release moves away from it. For the time being `import qiskit.providers.aer` will continue to work and redirect to `qiskit_aer` automatically. Imports from the legacy `qiskit.provider.aer` namespace will emit a `DeprecationWarning` in the future. To avoid any potential issues starting with this release, updating all imports from `qiskit.providers.aer` to `qiskit_aer` and from `qiskit.Aer` to `qiskit_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 as `SaveStatevector`).
|
||
|
||
* 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.
|
||
|
||
<span id="release-notes-aer-0-11-0-bug-fixes" />
|
||
|
||
<span id="id104" />
|
||
|
||
#### 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](https://github.com/Qiskit/qiskit-aer/issues/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:
|
||
|
||
```python
|
||
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](https://github.com/Qiskit/qiskit-aer/issues/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](https://github.com/Qiskit/qiskit-aer/issues/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](https://github.com/Qiskit/qiskit-aer/issues/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](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](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.
|
||
|
||
<span id="id105" />
|
||
|
||
### IBM Q Provider 0.19.2
|
||
|
||
No change
|
||
|
||
<span id="qiskit-0-37-2" />
|