Skip to main content
IBM Quantum Platform

Qiskit 0.38 Versionshinweise


0.38.0

Terra- 0.21.2

Keine Änderung

Aer- 0.11.0

Vorspiel

Die Highlights der Qiskit Aer 0.11.0 Version sind:

  • Die Migration zu einem neuen, in sich geschlossenen Namensraum Python qiskit_aer
  • Die Einführung der Klasse AerStatevector
  • Die Einführung von Aer-Implementierungen von primitives, Sampler und Estimator
  • Einführung der Unterstützung für den Betrieb mit cuQuantum

Neue Funktionen

  • Unterstützung für BackendV2 auf from_backend(). Jetzt kann es ein NoiseModel Objekt aus einer Eingabe BackendV2 instanz erzeugen. Wenn eine BackendV2 eingabe auf from_backend() verwendet wird, werden die beiden veralteten Optionen standard_gates und warnings gnädigerweise ignoriert.

  • Implementierung von Aer hinzugefügt primitives, Sampler und BaseSampler und BaseEstimator die Schnittstellen nutzen qiskit aer, um die Berechnung der primitiven Operationen effizient durchzuführen. Sie können in den qiskit.primitives dokumentation finden Sie eine ausführlichere Beschreibung der Primitiv-API.

  • Qiskit Aer wurde eine gemeinsame Bibliothek hinzugefügt, die es externen Programmen ermöglicht, die Simulationsmethoden von Aer zu nutzen. Es handelt sich um eine experimentelle Funktion, und ihre API kann ohne die Verfallsfrist geändert werden.

  • Unterstützung für M1 macOS Systeme hinzugefügt. Vorkompilierte Binärdateien für unterstützte Python Versionen >= 3.8 auf arm64 macOS werden jetzt auf PyPI für diese und zukünftige Versionen veröffentlicht.

  • Unterstützung für cuQuantum, NVIDIA 's APIs für Quantencomputer, um Zustandsvektor-, Dichtematrix- und Unitaritätssimulatoren mit Hilfe von GPUs zu beschleunigen. Dies ist eine experimentelle Implementierung für cuQuantum Beta 2. ( 0.1.0 ) cuStateVec APIs werden aktiviert, um anstelle der Aer-Implementierungen zu beschleunigen, indem Aer durch Setzen des Pfades von cuQuantum auf CUSTATEVEC_ROOT gebaut wird. (Eine Binärdistribution ist derzeit nicht verfügbar.) cuStateVector wird durch die Einstellung der Optionen device='GPU' und cuStateVec_threshold aktiviert. cuStateVec wird aktiviert, wenn die Anzahl der Qubits der Eingangsschaltung gleich oder größer als cuStateVec_threshold ist.

  • Teilweise Unterstützung für den Betrieb auf den Plattformen ppc64le und s390x Linux hinzugefügt. Mit dieser Version werden vorkompilierte Binärdateien für die Plattformen ppc64le und s390x Linux auf allen Python Versionen veröffentlicht. Im Gegensatz zu anderen unterstützten Plattformen unterstützen jedoch noch nicht alle Upstream-Abhängigkeiten von Qiskit diese Plattformen. Daher kann ein C/C++-Compiler erforderlich sein, um diese Abhängigkeiten zu erstellen und zu installieren, und ein einfaches pip install qiskit-aer mit einer funktionierenden Python Umgebung wird nicht ausreichen, um Qiskit Aer zu installieren. Außerdem hindern uns dieselben Beschränkungen daran, die vorkompilierten Räder vor der Veröffentlichung zu testen, so dass die gleichen Garantien für die Plattformunterstützung, die für die anderen Plattformen bestehen, für diese Plattformen nicht gelten.

  • Erlaubt die Initialisierung mit einem Label, das aus +-rl besteht. Jetzt funktioniert der folgende Code:

    import qiskit
    from qiskit_aer import AerSimulator
    
    qc = qiskit.QuantumCircuit(4)
    qc.initialize('+-rl')
    qc.save_statevector()
    
    AerSimulator(method="statevector").run(qc)

Bekannte Probleme

  • Bei der Ausführung auf Linux s390x Plattformen (oder anderen Big-Endian-Plattformen) funktionieren Schaltungen, die UnitaryGate operationen enthalten, wegen eines Endianess-Bugs nicht funktionieren. Siehe #1506 für weitere Einzelheiten.

Anmerkungen zu Upgrades

  • Die MPI-Parallelisierung für eine große Anzahl von Qubits ist optimiert, um mehrere Chunk-Swaps als All-to-All-Kommunikation anzuwenden, die die über MPI-Prozesse ausgetauschte Datengröße verringern kann. Dieses Upgrade verbessert die Skalierbarkeit der Parallelisierung.

  • Legen Sie die Standardwerte für fusion_max_qubit und fusion_threshold fest, je nachdem, wie method für AerSimulator konfiguriert ist. Zuvor waren die Standardwerte von fusion_max_qubit und fusion_threshold für alle Simulationsmethoden 5 bzw. 14 . Ihre optimalen Werte hängen jedoch von den verwendeten Methoden ab. Wenn Sie sich auf die vorherigen Standardeinstellungen verlassen haben, können Sie fusion_max_qubit=5 oder fusion_threshold=14 explizit einstellen, um das vorherige Standardverhalten beizubehalten. Zum Beispiel:

    from qiskit_aer import AerSimulator
    
    sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14)
  • Dies ist ein Update zur Unterstützung von cuQuantum 22.5.0.41 einschließlich Fehlerbehebung der Threadsicherheit in einigen cuStateVec APIs. Jetzt schaltet Qiskit Aer Multi-Threading für Multi-Shots und Multi-Chunk-Parallelisierung ein, wenn cuStateVec aktiviert wird.

  • Der Betrieb von qiskit-aer mit Python 3.6 wird nicht mehr unterstützt. Python >= 3.7 ist nun erforderlich, um qiskit-aer zu installieren und auszuführen.

  • Das Paket qiskit-aer Python ist in einen eigenständigen Namensraum qiskit_aer umgezogen. Zuvor teilte es sich einen Namensraum mit qiskit-terra , indem es qiskit.providers.aer hieß. Dies war aus mehreren Gründen problematisch, und mit dieser Version wird davon abgerückt. Bis auf Weiteres wird import qiskit.providers.aer weiterhin funktionieren und automatisch auf qiskit_aer umgeleitet werden. Importe aus dem alten Namespace qiskit.provider.aer werden in Zukunft eine DeprecationWarning ausgeben. Um mögliche Probleme mit dieser Version zu vermeiden, wird empfohlen, alle Importe von qiskit.providers.aer auf qiskit_aer und von qiskit.Aer auf qiskit_aer.Aer zu aktualisieren.

  • Snapshot-Anweisungen (wie SnapshotStatevector), die seit 0.9.0 veraltet sind, wurden entfernt. Anwendungen, die diese Befehle verwenden, müssen so geändert werden, dass sie die entsprechenden Speicherbefehle verwenden (z. B. SaveStatevector).

  • Das Modul qiskit_aer.extensions wurde vollständig entfernt. Mit dem Wegfall der Schnappschuss-Anweisungen ist dieses Modul leer geworden und erfüllt keinen Zweck mehr.

  • Die erforderliche Version von Qiskit Terra wurde auf 0.20.0 angehoben.

Fehlerkorrekturen

  • Korrekturen für die MPI-Chunk-Verteilung. Einschließlich Korrektur der globalen Indexierung für Thrust-Implementierungen, Korrektur der Cache-Blockierung von Nicht-Gate-Operationen. Außerdem gibt savestatevector denselben Zustandsvektor an alle Prozesse zurück (nur der 1. Prozess hat vorher einen Zustandsvektor erhalten)

  • Behandelt ein Multiplexer-Gatter als unitäres Gatter, wenn es keine Steuerqubits hat. Wenn ein Multiplexer-Gatter keine Kontroll-Qubits hat, wurde der Quantenzustand bisher nicht aktualisiert.

  • Behebt einen Fehler in RelaxationNoisePass , bei dem die Dauer von Anweisungen immer in dt-Zeiteinheiten angenommen wurde, unabhängig von der tatsächlichen Einheit der Konstruktion. Die Einheitenumrechnung wird nun für alle Einheiten der Befehlsdauer korrekt gehandhabt.

    Siehe #1453 für weitere Informationen.

  • Die Simulation von for -Schleifen, bei denen der Schleifenparameter nicht im Körper der Schleife verwendet wurde, wurde korrigiert. Dieser Code würde zum Beispiel früher fehlschlagen, aber jetzt wird er erfolgreich sein:

    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)
  • Behebt einen Fehler in NoiseModel.from_backend() , der einen Fehler auslöste, wenn T2 einen Wert größer als 2 * T1 vom Backend geliefert wurde. Nach dieser Korrektur wird der Wert von T2 bis zu 2 * T1 abgeschnitten und eine Benutzerwarnung ausgegeben, wenn er abgeschnitten wird. Der Fehler wurde in #1391 eingeführt, und davor hatte NoiseModel.from_backend() den Wert T2 bis zu 2 * T1 stillschweigend abgeschnitten.

    Siehe Ausgabe 1464 für weitere Einzelheiten.

  • Behebung von Leistungseinbußen bei verrauschten Simulationen aufgrund eines starken Anstiegs des Serialisierungs-Overheads beim Laden von Rauschmodellen von Python nach C++, der durch unbeabsichtigte verschachtelte Python Multiprocessing-Aufrufe verursacht wurde. Siehe Ausgabe 1407 für weitere Informationen.

  • Dies ist die Lösung für Problem #1557. Wenn die Option seed_simulator nicht gesetzt ist, werden für jeden Prozess unterschiedliche Seed-Nummern erzeugt. Dadurch wird der durchschnittliche Seed in Circuit so eingestellt, dass alle Prozesse die gleiche Seed-Nummer verwenden.

  • Dies ist ein Fix der MPI-Parallelisierung für Multi-Chunk-Parallelisierung und Multi-Shot-Verteilung auf parallele Prozesse. Es fehlte eine Verteilungskonfiguration, die eine MPI-Verteilung verhindert, dies ist nun behoben.

  • Dies ist ein Fix für Cache-Blocking-Transpiler und Chunk-Parallelisierung für GPUs oder MPI. Diese Korrektur behebt Probleme mit Qubits, die viele Kontroll- oder Ziel-Qubits haben (> blocking_qubits). Daher werden nur die Ziel-Qubits des mehrfach kontrollierten Gatters im Cache blockiert. Sie unterstützt jedoch nicht den Fall, dass die Anzahl der Ziel-Qubits immer noch größer ist als die Anzahl der blockierten Qubits (d. h. große unitäre Matrixmultiplikation)

  • Behebt einen Fehler in QuantumError.to_dict() , bei dem N-Qubit-Schaltkreisanweisungen, bei denen die zusammengesetzte Anweisung immer auf die Qubits [0, ..., N-1] und nicht auf die Anweisungsqubits angewendet wurde. Dieser Fehler betraf auch Geräte- und Fake-Backend-Geräuschmodelle.

    Siehe Ausgabe 1415 für weitere Einzelheiten.

  • Da jedem Schaltkreis ein zufälliger Seed zugewiesen wurde, wenn seed_simulator nicht eingestellt ist, war die Simulation mehrerer Schaltkreise nicht mit einer anderen Simulation mehrerer Schaltkreise reproduzierbar. Die Benutzer mussten mehrere Einkreis-Simulationen mit dem Seed-Simulator durchführen, der bei der Mehrkreis-Simulation zufällig zugewiesen wird. Mit dieser Korrektur können Benutzer eine Mehrkreis-Simulation mit einer anderen Mehrkreis-Simulation reproduzieren, indem sie seed_simulator des ersten Kreises in der ersten Mehrkreis-Simulation einstellen. Diese Korrektur behebt auch ein Problem, das in https://github.com/Qiskit/qiskit-aer/issues/1511 berichtet wurde, bei dem die Simulation mit Parameter-Binds identische Ergebnisse für jede Schaltungsinstanz liefert.

  • Behebung eines Leistungsproblems bei der Stapeloptimierung mit mehreren Aufnahmen für GPU bei Verwendung von Pauli-Rauschen. Diese Korrektur ermöglicht Multi-Threading für die Rauschabtastung zur Laufzeit und verwendet verschachtelte OpenMP Parallelisierung, wenn mehrere GPUs verwendet werden. Dies ist die Lösung für Problem 1473 <https://github.com/Qiskit/qiskit-aer/issues/1473>

  • Dies ist der Fix für cuStateVec Unterstützung, Fix für Build-Fehler aufgrund der Spezifikationsänderung einiger APIs von cuStateVec von cuQuantum Version 0.40.

  • Behebt ein Problem, wenn while_loop das Ende von QuantumCircuit ist. while_loop wird in Sprung- und Markierungsanweisungen übersetzt. Befindet sich jedoch eine while-Schleife am Ende eines Schaltkreises, wird ihre Markierungsanweisung falsch abgeschnitten. Mit dieser Korrektur wird der Trunkierungsalgorithmus so korrigiert, dass die Markierungsanweisungen immer erhalten bleiben.

IBM Q Anbieter 0.19.2

Keine Änderung

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