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,SamplerundEstimator - Einführung der Unterstützung für den Betrieb mit cuQuantum
Neue Funktionen
-
Unterstützung für
BackendV2auffrom_backend(). Jetzt kann es einNoiseModelObjekt aus einer EingabeBackendV2instanz erzeugen. Wenn eineBackendV2eingabe auffrom_backend()verwendet wird, werden die beiden veralteten Optionenstandard_gatesundwarningsgnädigerweise ignoriert. -
Implementierung von Aer hinzugefügt
primitives,SamplerundBaseSamplerundBaseEstimatordie Schnittstellen nutzen qiskit aer, um die Berechnung der primitiven Operationen effizient durchzuführen. Sie können in denqiskit.primitivesdokumentation 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_ROOTgebaut wird. (Eine Binärdistribution ist derzeit nicht verfügbar.) cuStateVector wird durch die Einstellung der Optionendevice='GPU'undcuStateVec_thresholdaktiviert. cuStateVec wird aktiviert, wenn die Anzahl der Qubits der Eingangsschaltung gleich oder größer alscuStateVec_thresholdist. -
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-aermit 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
+-rlbesteht. 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
UnitaryGateoperationen 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_qubitundfusion_thresholdfest, je nachdem, wiemethodfürAerSimulatorkonfiguriert ist. Zuvor waren die Standardwerte vonfusion_max_qubitundfusion_thresholdfür alle Simulationsmethoden5bzw.14. Ihre optimalen Werte hängen jedoch von den verwendeten Methoden ab. Wenn Sie sich auf die vorherigen Standardeinstellungen verlassen haben, können Siefusion_max_qubit=5oderfusion_threshold=14explizit 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-aerPython ist in einen eigenständigen Namensraumqiskit_aerumgezogen. Zuvor teilte es sich einen Namensraum mitqiskit-terra, indem esqiskit.providers.aerhieß. Dies war aus mehreren Gründen problematisch, und mit dieser Version wird davon abgerückt. Bis auf Weiteres wirdimport qiskit.providers.aerweiterhin funktionieren und automatisch aufqiskit_aerumgeleitet werden. Importe aus dem alten Namespaceqiskit.provider.aerwerden in Zukunft eineDeprecationWarningausgeben. Um mögliche Probleme mit dieser Version zu vermeiden, wird empfohlen, alle Importe vonqiskit.providers.aeraufqiskit_aerund vonqiskit.Aeraufqiskit_aer.Aerzu 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.extensionswurde 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 hatteNoiseModel.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