Skip to main content
IBM Quantum Platform

Qiskit 0.42 Versionshinweise


0.42.1

Terra- 0.23.3

Vorspiel

Qiskit Terra 0.23.3 ist eine kleinere Bugfix-Version.

Fehlerkorrekturen

  • Behebt einen Fehler im Optimize1qGatesDecomposition transformationsdurchgang, bei dem die Punktzahl für Substitutionen falsch berechnet wurde, wenn die Gate-Fehler null sind.

  • Die Methode ECRGate.inverse() gibt nun eine andere ECRGate instanz zurück und nicht mehr ein benutzerdefiniertes Tor, da sie selbst invers ist.

  • Clip-Wahrscheinlichkeiten in den Methoden QuantumState.probabilities() und QuantumState.probabilities_dict() auf das Intervall [0, 1]. Dies behebt Rundungsfehler, bei denen Wahrscheinlichkeiten z.B. größer als 1 sein können, was zu Fehlern in der Shot-Emulation des Samplers führt. Behoben #9761.

  • Es wurde ein Fehler in der BackendSampler behoben, bei dem die binären Wahrscheinlichkeits-Bitstrings auf die minimale Anzahl von Bits abgeschnitten wurden, die erforderlich ist, um das größte Ergebnis als Ganzzahl darzustellen. Das bedeutet, dass wenn z.B. {"0001": 1.0} gemessen wurde, wurde das Ergebnis auf {"1": 1.0} abgeschnitten.

  • Es wurde ein Problem mit der PassManagerConfig.from_backend() konstruktor-Methode, wenn diese mit einem BackendV1 basierten Simulator-Backend verwendet wurde. Bei einigen Simulator-Backends, die einige optionale Felder nicht ausfüllten, führte der Konstruktor zu einem Fehler. Behoben #9265 und #8546

  • Behoben sind die BackendSampler und BackendEstimator erfolgreich mit einer benutzerdefinierten bound_pass_manager ausgeführt. Bisher wurde bei der Ausführung von Einzelschaltungen mit bound_pass_manager eine ValueError ausgegeben, weil in einem der Schritte keine Liste zurückgegeben wurde.

  • Der GateDirection der Transpiler-Durchlauf lehnt nun keine Gates mehr ab, die zwar explizit kalibriert wurden, aber nicht in der generischen Kopplungskarte oder im Ziel vorhanden sind.

  • Es wurde ein Problem mit der CommutationChecker klasse behoben, bei dem versucht wurde, intern ein Array für 2n2^{n} qubits zuzuweisen, obwohl nur ein Array für nn qubits benötigt wurde. Dies könnte zu einem übermäßigen Speicherbedarf für breite Gatter führen, zum Beispiel würde ein 4-Qubit-Gatter 32 Gigabyte statt 2 Kilobyte benötigen. Behoben #9197

  • Das Erhalten einer leeren Kalibrierung von InstructionProperties auf AttributeError wurde behoben. Jetzt gibt es None zurück.

  • Korrigiert qasm() so dass es ; nach der Anweisung reset anhängt.

  • Register- und Parameternamen werden nun beim OpenQASM 3 Export (qasm3.dumps()), wenn sie nicht bereits gültige Bezeichner sind. Behoben #9658.

  • QPY (mit qpy.load()) wird nun korrekt deserialisieren StatePreparation anweisungen. Bisher hatte QPY einen Fehler, wenn es versuchte, eine Datei zu laden, die eine solche Datei enthielt. Behoben #8297.

  • Ein Fehler wurde behoben in random_circuit() mit 64 oder mehr Qubits und conditional=True, bei dem der resultierende Schaltkreis einen falsch eingegebenen Wert in seiner Bedingung haben konnte, was zu einer Vielzahl von Fehlern bei der Transpilierung oder anderen Schaltkreisoperationen führte. Behoben #9649.

  • Es wurde ein Problem mit den Methoden der OneQubitEulerDecomposer methoden der Klasse angles() und angles_and_phase() ein Fehler auftrat, wenn die Eingabematrix einen anderen D-Typ als complex/np.cdouble hatte. In früheren Versionen funktionierte dies gut, aber in Qiskit Terra 0.23.0 funktionierte dies nicht mehr, als die Interna von OneQubitEulerDecomposer in Rust umgeschrieben wurden. Behoben #9827

  • Die Qiskit-Tore CCZGate, CSGate, CSdgGate sind in qelib1.inc nicht definiert und sollten daher bei der Ablage als OpenQASM 2.0 in die Datei eingefügt werden. Behebt die Fehler #9559, #9721 und #9722.

Aer- 0.12.0

Keine Änderung

IBM Q Anbieter 0.20.2

Keine Änderung


0.42.0

Terra- 0.23.2

Keine Änderung

Aer- 0.12.0

Vorspiel

Die Highlights der Qiskit Aer 0.12.0 Version sind:

  • Hinzufügen eines neuen GPU-Tensor-Netzwerk-Simulators basierend auf cuTensorNet
  • Hinzufügen einer neuen AerDensityMatrix Klasse zum qiskit_aer.quantum_info modul
  • Deutliche Verbesserung der Laufzeitleistung der Klassen AerSimulator und QasmSimulator, StatevectorSimulator und UnitarySimulator durch direkte Konvertierung der Eingabeobjekte in eine interne C++-Darstellung QuantumCircuit objekte in eine interne C++-Darstellung konvertiert werden, anstatt die Schaltung zunächst in eine QasmQobj. Diese Verbesserung macht sich vor allem bei Schaltungen mit einer geringen Anzahl von Qubits oder bei parametrisierten Schaltungen bemerkbar, die das Schlüsselwortargument parameter_binds verwenden.

Neue Funktionen

  • Eine neue Klassenmethode from_backend_properties() wurde der NoiseModel hinzugefügt. Dies ermöglicht die Erstellung eines neuen NoiseModel aus einem BackendProperties Objekt. Eine ähnliche Funktionalität war früher im NoiseModel.from_backend() Konstruktor vorhanden, wurde aber entfernt, da ein BackendProperties Objekt allein nicht genügend Informationen enthält, um ein NoiseModel Objekt zu erstellen.

  • Hinzufügen einer neuen Klasse, AerDensityMatrix, zum qiskit_aer.quantum_info modul hinzugefügt. Diese Klasse wird verwendet, um die gleiche Schnittstelle wie die Upstream DensityMatrix klasse in Qiskit, aber unterstützt durch die Simulation von Qiskit Aer.

  • Ein neues Schlüsselwortargument, abelian_grouping, wurde zu der Estimator. Dieses Argument wird verwendet, um zu steuern, ob der Estimator die Eingabeobservablen in Qubit-weise kommutierbare Observablen gruppiert, was die Anzahl der für die Berechnung des Erwartungswerts erforderlichen Schaltkreisausführungen reduziert und die Laufzeitleistung des Estimator. Standardmäßig ist dies auf True eingestellt.

  • AerState hat eine neue Methode initialize_density_matrix() , die eine Dichtematrix auf AER::QV::DensityMatrix setzt. Diese Methode wird in q.i.states.DensityMatrix aufgerufen, um ihre Daten mit ndarray zu initialisieren. initialize_density_matrix() hat ein boolesches Argument, das angibt, ob die Daten von ndarray kopiert oder freigegeben werden sollen. Wenn die Daten von C++ und Python gemeinsam genutzt werden, dürfen die Daten nicht in Python gesammelt werden, während C++ auf sie zugreift.

  • Der Aufwand für die Durchführung von Simulationen mit run() (für alle Backend-Klassen des Simulators) wurde erheblich reduziert. Dies wurde erreicht, indem die interne Serialisierung von QuantumCircuit objekte in QasmQobj und stattdessen das QuantumCircuit objekt direkt in eine interne C++-Schaltkreisstruktur übertragen, die für die Simulation verwendet wird. Diese Verbesserung macht sich vor allem bei Simulationen von Schaltkreisen mit einer geringen Anzahl von Qubits oder parametrisierten Schaltkreisen bemerkbar, die das Schlüsselwortargument parameter_binds von run() verwenden. Beachten Sie, dass die Impulssimulation (über das inzwischen veraltete PulseSimulator) und die DASK-basierte Simulation immer noch die interne Serialisierung verwenden und diese Leistungsverbesserung nicht erfahren werden.

  • Es wurde eine neue Methode zu AerJob hinzugefügt, circuits(), die eine Liste von QuantumCircuit objekten zurückgibt. Diese Methode gibt None zurück, wenn Qobj für die Simulation verwendet wird.

  • AerState und AerStatevector unterstützen jetzt die Anwendung von Kraus betreiber. In AerStatevector wird einer der Kraus-Operatoren auf der Grundlage der Fehlerwahrscheinlichkeiten zufällig auf den Quantenzustand angewendet.

  • Hinzufügen einer neuen Simulationsmethode, die auf den NVIDIA 's cuTensorNet APIs von cuQuantum SDK. Damit steht ein GPU-beschleunigter allgemeiner Tensornetzwerk-Simulator zur Verfügung, der beliebige Quantenschaltungen simulieren kann, indem er die Schaltung intern in ein Tensornetzwerk übersetzt, um die Simulation durchzuführen. Um diese Simulationsmethode zu verwenden, setzen Sie method="tensor_network" und device="GPU" bei der Initialisierung eines AerSimulator Objekts. Zum Beispiel:

    from qiskit_aer import AerSimulator
    
    tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")

    Diese Methode unterstützt sowohl Zustandsvektor- als auch Dichtematrixsimulationen. Die Rauschsimulation kann auch mit einer Density-Matrix-Single-Shot-Simulation durchgeführt werden, wenn es in der Schaltung keine SaveStatevector Operationen gibt.

    Diese neue Simulationsmethode unterstützt auch die Parallelisierung mit mehreren GPUs und MPI-Prozessen durch die Verwendung der Tensor-Netzwerk-Slicing-Technik. Diese Art der Simulation wird jedoch sehr lange dauern, wenn die Eingangsschaltungen kompliziert sind.

  • Die Umgebungsvariable BLA_VENDOR kann nun angegeben werden, um eine andere BLAS-Bibliothek zu verwenden, wenn Qiskit Aer aus dem Quellcode erstellt wird. Wenn dies nicht angegeben wird, wird standardmäßig OpenBLAS verwendet. Wenn die in BLA_VENDOR` angegebene BLAS-Bibliothek nicht gefunden werden kann, wird der Cmake-Erstellungsprozess abgebrochen.

Bekannte Probleme

  • Diese Version von Qiskit Aer ist nicht kompatibel mit der Conan 2.X Release-Serie. Wenn Sie Qiskit Aer manuell aus dem Quellcode erstellen, stellen Sie sicher, dass Sie eine Conan 1.x Version verwenden. Die Kompatibilität mit neueren Versionen von Conan wird in einer zukünftigen Version behoben werden. Weitere Einzelheiten finden Sie in Ausgabe #1730.

Anmerkungen zu Upgrades

  • Das Standardverhalten des Estimator primitivs gruppiert nun die Eingabeobservable in qubit-weise kommutierbare Observables. Die Gruppierung verringert die Anzahl der auszuführenden Schaltungen und verbessert die Leistung. Wenn Sie das vorherige Verhalten wünschen, können Sie Ihre Estimator instanz mit dem Schlüsselwortargument abelian_grouping=False initialisieren.

  • Die Verwendung von Primitiven mit dem Kontextmanager und die Initialisierung mit Schaltkreisen (Observables nur für Estimator) und Parametern, die in der Version Qiskit Terra 0.22.0 im Oktober 2022 veraltet sind, wurden entfernt.

  • Das Verhalten der Methode run() hat sich geändert, wenn ungültige oder anderweitig nicht simulierbare QuantumCircuit objekte als Eingabe übergeben werden. Bisher hat die Methode run() in diesen Fällen ein AerJob zurückgegeben, dessen Methode result() ein Result mit dem ERROR oder PARTIAL COMPLETED zurückgibt (je nachdem, ob alle oder nur einige der Schaltkreiseingänge ungültig waren oder nicht). Ab dieser Version wird statt der Rückgabe eines Ergebnisobjekts mit diesen Zuständen eine Ausnahme ausgelöst. Diese Änderung war wegen der Leistungsverbesserungen notwendig, da die Objekte nicht mehr intern in ein Qobj serialisiert werden, bevor sie an C++ übergeben werden QuantumCircuit objekte nicht mehr intern in ein Qobj serialisiert werden, bevor sie an C++ übergeben werden, sondern die direkte Konvertierung von QuantumCircuit nun direkt zu Fehlern, wenn versucht wird, einen Schaltkreis zu simulieren, den Qiskit Aer nicht ausführen kann. Wenn Sie das vorherige Verhalten wünschen, können Sie Qiskit Aer im Standalone-Modus erstellen und Ihre Objekte manuell in eine JSON-Darstellung serialisieren QuantumCircuit objekte manuell in eine JSON-Darstellung der QasmQobj die Sie dann an die eigenständige Aer-Binärdatei übergeben, die das vorherige Verhalten beibehält.

  • Eine veraltete Methode add_nonlocal_quantum_error() in NoiseModel wurde entfernt. Es ist keine alternative Methode verfügbar. Wenn Sie nichtlokale Quantenfehler hinzufügen möchten, sollten Sie einen Transpiler-Pass schreiben, der Ihren eigenen Quantenfehler in eine Schaltung einfügt, und diesen Pass kurz vor der Ausführung der Schaltung im Aer-Simulator ausführen.

  • Das NoiseModel.from_backend() akzeptiert nun kein BackendProperties Objekt mehr als backend Argument. Verwenden Sie stattdessen die neu hinzugefügte Methode NoiseModel.from_backend_properties() .

  • Ein veraltetes standard_gates Argument, das in mehreren Methoden und Funktionen (siehe unten) im noise Modul verwendet wurde, wurde entfernt.

    • NoiseModel.from_backend() und noise.device.basic_device_gate_errors()
    • kraus_error(), mixed_unitary_error(), pauli_error() und depolarizing_error() in noise.errors.standard_errors
    • QuantumError.__init__()

    Es gibt keine alternativen Möglichkeiten, da der Benutzer nicht wissen sollte, wie der Simulator intern Rauschen (Quantenfehler) darstellt.

  • Der Konstruktor von QuantumError unterstützt jetzt nicht mehr die veraltete json-ähnliche Eingabe für das Argument noise_ops . Verwenden Sie stattdessen z. B. die neue Stileingabe für das Argument noise_ops ,

    from qiskit.circuit.library import IGate, XGate
    from qiskit_aer.noise import QuantumError
    
    error = QuantumError([
        ((IGate(), [1]), 0.9),
        ((XGate(), [1]), 0.1),
    ])
    
    # json-like input is no longer accepted (the following code fails)
    #  error = QuantumError([
    #      ([{"name": "I", "qubits": [1]}], 0.9),
    #      ([{"name": "X", "qubits": [1]}], 0.1),
    #  ])

    Außerdem wurden veraltete Argumente gestrichen:

    • number_of_qubits: Verwenden Sie QuantumCircuit , um stattdessen noise_ops zu definieren.
    • atol: Verwenden Sie stattdessen das Attribut QuantumError.atol .
    • standard_gates: Es gibt keine Alternative (Benutzer sollten sich nicht zu sehr um die interne Darstellung von Quantenfehlern kümmern).
  • Das veraltete Modul noise.errors.errorutils wurde vollständig entfernt und es sind keine Alternativen verfügbar. Alle Funktionen im Modul waren Hilfsfunktionen, die nur für die Implementierung von Funktionen in standard_errors gedacht waren (d.h. sie hätten als private Funktionen bereitgestellt werden sollen) und nicht mehr in diesem Modul verwendet werden.

  • Die veralteten utils.noise_remapper wurden vollständig entfernt, und es sind keine Alternativen verfügbar, da der C++-Code nun automatisch Rauschmodelle abschneidet und neu zuordnet, wenn er Schaltkreise abschneidet.

  • Alle veralteten Funktionen (pauli_operators() und reset_operators()) und Klassen (NoiseTransformer) im Modul utils.noise_transformation wurden entfernt, und es sind keine Alternativen verfügbar. Es handelte sich um private Funktionen/Klassen, die nur für die Implementierung von approximate_quantum_error() verwendet werden und nicht öffentlich sein sollten.

  • Der zuvor veraltete qobj Argumentname der Methode run() der Klassen AerSimulator und PulseSimulator wurde nun entfernt. Dieser Argumentname wurde als Teil der Qiskit Aer 0.8.0 Version veraltet und wurde durch den circuits bzw. schedules Argumentnamen ersetzt.

  • Aer's setup.py wurde aktualisiert und versucht nun nicht mehr, pip aufzurufen, um Build-Anforderungen zu installieren, sowohl manuell als auch über die Option setup_requires in setuptools.setup. Die bevorzugte Methode zur Erstellung von Aer ist die Verwendung eines PEP 517-kompatiblen Builders wie z.B.:

    pip install .

    Diese Änderung bedeutet, dass ein direkter Aufruf von setup.py nicht mehr funktioniert, wenn die Build-Anforderungen nicht installiert sind. Dies steht im Einklang mit den modernen Verpackungsrichtlinien Python.

Hinweise zu veralteten Versionen

  • Die Unterstützung für die Ausführung von Qiskit Aer mit Python 3.7 wurde veraltet und wird in einer zukünftigen Version entfernt. Das bedeutet, dass Sie ab einer zukünftigen Version die von Ihnen verwendete Version von Python auf Python 3.8 oder höher aktualisieren müssen.

  • Das PulseSimulator Backend ist veraltet und wird in einer zukünftigen Version entfernt werden. Wenn Sie das PulseSimulator Backend verwenden, um eine Simulation auf Pulsebene durchzuführen, sollten Sie stattdessen die Qiskit Dynamics Bibliothek verwenden, um die Simulation durchzuführen. Qiskit Dynamics bietet einen flexibleren und robusteren Rahmen für die Simulation auf Impulsebene als das PulseSimulator Backend.

  • Die Methode qobj() der Klasse AerJob ist jetzt veraltet und wird in einer zukünftigen Version entfernt werden. Die Verwendung des qobj-Formats als Eingabe für run() ist seit qiskit-aer 0.9.0 veraltet und in den meisten Fällen würde diese Methode jetzt sowieso None zurückgeben. Wenn Sie jetzt die Eingabe für die Methode run() erhalten möchten, können Sie stattdessen die Methode circuits() verwenden, die die QuantumCircuit objekte zurückgibt, die in dem Auftrag simuliert wurden.

  • Ein warnings Argument, das in mehreren Methoden und Funktionen des noise Moduls verwendet wurde, wurde zugunsten der Verwendung von Filterfunktionen in der Python Standardbibliothek warnings veraltet.

Fehlerkorrekturen

  • Es wurde ein Problem behoben, das bei der Erstellung einer neuen AerStatevector -Instanz aus einer numpy.ndarray mit nicht zusammenhängendem Speicher auftrat. Zuvor führte dies zu unerwartetem Verhalten (und einem möglichen Fehler), da AerStatevector davon ausging, dass das Eingabefeld zusammenhängend ist. Dies wurde behoben, so dass das Speicherlayout überprüft wird und numpy.ndarray intern als zusammenhängendes Array kopiert wird, bevor es verwendet wird.

  • Es wurde ein Problem mit der Sampler klasse behoben, bei dem es früher zu Fehlern kam, wenn die Eingabe QuantumCircuit mehrere klassische Mehrfachregister enthielt. Behoben #1679

  • Die Anzahl der Bits des klassischen Registers, das auf der GPU verwendet wird, wurde nicht vor der Berechnung des freien verfügbaren Speichers für Chunks gesetzt, was eine Endlosschleife verursacht. Diese Korrektur setzt also die Anzahl der Bits vor der Zuweisung von Chunks, wenn die Ausführung von Stapelaufnahmen aktiviert ist.

  • Behebung von Build- und Testfehlern bei Aktivierung der GPU und Deaktivierung von cuQuantum.

  • Ein Problem in der Matrixprodukt-Zustandssimulationsmethode (d.h. das Setzen des Schlüsselwortarguments method="matrix_product_state" bei der Initialisierung eines AerSimulator Objekts) wurde behoben, bei dem der Simulator die Qubits vor der Durchführung der Messung falsch sortierte, was zu einer Endlosschleife führen konnte. Dies wurde behoben, so dass die Messung der Qubits in der Reihenfolge der aktuellen MPS-Struktur erfolgt und die Sortierung anschließend als Nachbearbeitungsschritt durchgeführt wird. Dies wird wahrscheinlich auch die Leistung der Simulationsmethode verbessern und eine genauere Darstellung der verschränkten Zustände ermöglichen. Behoben #1694

  • Das AerSimulator Backend mit Methoden:

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    melden nun, dass sie die Anweisungen break_loop und continue_loop unterstützen, wenn sie als Backends für die Funktion Terra transpile() funktion verwendet werden. Die Simulatoren unterstützten diese bereits, aber sie hatten sie nur nicht gemeldet.

IBM Q Anbieter 0.20.2

In dieser Version werden die allzu restriktiven Versionsbeschränkungen in den Anforderungen für das Paket, das in 0.20.1 hinzugefügt wurde, entfernt. Für die 0.20.1 war die einzige Abhängigkeit, für die eine Versionsobergrenze vorgesehen war, das Paket requests-ntlm , da dessen neue Version die einzige Abhängigkeit war, die derzeit eine Inkompatibilität mit qiskit-ibmq-provider aufweist. Die anderen Versionskappen, die als Teil von 0.20.1 hinzugefügt wurden, verursachten in mehreren Umgebungen Installationsprobleme, da sie das Paket qiskit-ibmq-provider inkompatibel mit den in anderen Paketen verwendeten Abhängigkeitsversionen machten.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.