Speziell kalibrierte Anweisungen
Standardmäßig sind die Quanten-Gates und Auslese-Operationen auf IBM® Quantencomputern für optimale Leistung in allgemeinen Anwendungsfällen kalibriert. Einige Workloads profitieren jedoch von Anweisungen, deren Parameter anders abgestimmt sind. Zum Beispiel ist MidCircuitMeasure (measure_2) eine Auslese-Operation, die auf Messungen mitten im Circuit zugeschnitten ist, und langsamere cz-Gates können die Ergebnisse einiger Fehlerminderungs-Workflows verbessern.
Speziell kalibrierte Anweisungen gibt es in zwei Formen, auf die du unterschiedlich zugreifst:
-
Anweisungen mit anderen Signaturen werden zusammen mit den Standardanweisungen in der Standardkalibrierung kalibriert, sodass du sie wie jede andere Anweisung zu deinen Circuits hinzufügst. Sie sind meist an einem Suffix erkennbar, etwa
measure_2. -
Alternative Kalibrierungen ersetzen Teile der Standardkalibrierung durch anders abgestimmte Parameter. Du wählst eine aus, indem du beim Abrufen des Backends eine
calibration_idübergibst.
Wie IBM Quantencomputer kalibriert werden, erfährst du unter Überwachen, kalibrieren und benchmarken.
Anweisungen mit anderen Signaturen
Diese Anweisungen werden mit dem Standard-Anweisungssatz kalibriert, daher musst du nichts Besonderes tun, um ein Backend abzurufen, das sie unterstützt. Um eine zu verwenden, füge die entsprechende qiskit-ibm-runtime-Anweisung zu deinem Circuit hinzu.
| Anweisung | Beschreibung | Typischer Anwendungsfall | Verwendung in Qiskit | Prozessorfamilie |
|---|---|---|---|---|
measure_2 | Kürzerer Messpuls | Mid-Circuit-Messungen | MidCircuitMeasure (ab v0.43.0) | Heron, Nighthawk r2 |
reset_2 | Kürzerer bedingter Reset-Puls, der measure_2 verwendet | Mid-Circuit-Qubit-Reset | MidCircuitReset (ab v0.49.0) | Heron |
measure_reset | Messung wie measure, die das Qubit zusätzlich zurücksetzt* | Ein Qubit messen und zurücksetzen | MeasureReset (ab v0.50.0) | Heron, Nighthawk r2 |
measure_reset_2 | Kürzere Messung wie measure_2, die das Qubit zusätzlich zurücksetzt* | Ein Qubit mitten im Circuit messen und zurücksetzen | MeasureReset mit name="measure_reset_2" initialisieren (ab v0.50.0) | Heron, Nighthawk r2 |
xslow | Bitflip-Gate (X) mit verlängerter Dauer | Postselektion und Fehlerminderung. Es ist der Standardwert der Option x_pulse_type in Postselektions-Passes | Alle |
. | XSlowGate (ab v0.50.0) | Alle |
* Auf Heron-Prozessoren ist der Reset vom Messergebnis abhängig. Auf Nighthawk-r2-Prozessoren ist der Reset unbedingt.
Da diese Anweisungen nicht auf jedem Backend unterstützt werden, prüfe die unterstützten Anweisungen des Backends, bevor du sie verwendest:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("<backend_name>")
print(backend.supported_instructions)
Um alle Backends zu finden, die eine Anweisung unterstützen, verwende:
service = QiskitRuntimeService()
backends = service.backends(filters=lambda b: "<instruction>" in b.supported_instructions)
Verwende instruction_signatures, um die Signaturen dieser speziell kalibrierten Anweisungen anzuzeigen:
print(backend.configuration().instruction_signatures)
Alternative Kalibrierungen
Alternative Kalibrierungen ersetzen Teile der Standardkalibrierung durch anders abgestimmte Parameter. Jede alternative Kalibrierung hat eine Kalibrierungs-ID, und ihre Verfügbarkeit hängt von der QPU ab.
Um eine alternative Kalibrierung zu verwenden, übergib ihre calibration_id, wenn du das Backend abrufst. Das Target des Backends und damit der Transpiler nutzt die Anweisungseigenschaften aus dieser Kalibrierung, und Primitive-Jobs, die du auf dem Backend ausführst, laufen mit ihr.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.backend("<backend_name>", calibration_id="<calibration_id>")
print(backend.calibration_id)
Alternative Kalibrierungen sind nicht auf allen QPUs verfügbar.
Kalibrierungen mit langsamen Gates
Kalibrierungen mit langsamen Gates stimmen das cz-Gate so ab, dass es langsamer ist als in der Standardkalibrierung. Langsamere cz-Gates können die Leistung bei großskaligen Workflows zur Observablen-Schätzung mit Fehlerminderung verbessern, verlängern aber auch die Gesamtdauer deines Circuits, was zusätzliche Dekohärenz verursacht.
Auf Heron-Prozessoren sind Kalibrierungen mit langsamen Gates außerdem mit zwei Modi der Steuerung des Zwei-Niveau-System-Bias (TLS-Bias) verfügbar:
-
DC-TLS-Bias ist auf die beste momentane Leistung optimiert. Die Standardkalibrierung verwendet DC-TLS-Bias.
-
AC-TLS-Bias moduliert den TLS-Bias, um Gerätefehler über die Zeit zu stabilisieren, wodurch das Rauschmodell des Geräts während langer Workflows stabil bleibt. Details findest du unter „Noise stabilization“ in Observable Estimation in the Absence of Classical Verification.
Nighthawk-Prozessoren verwenden keinen TLS-Bias, daher haben sie nur eine Kalibrierung mit langsamen Gates.
| Kalibrierungs-ID | Prozessorfamilie | TLS-Bias | Empfohlen für |
|---|---|---|---|
| Keine (Standardkalibrierung) | Alle | DC (Heron) | Allgemeine Verwendung. Besonders empfohlen für Workloads, deren Bitstrings klassisch destilliert werden können, etwa Peaked Circuits und SQD- oder SKQD-Workflows, sowie für Workloads mit Fehlererkennung. |
slow_gates_dc | Heron | DC | Großskalige Workflows zur Observablen-Schätzung, insbesondere solche mit heuristischer Fehlerminderung wie Zero-Noise-Extrapolation (ZNE). |
slow_gates_ac | Heron | AC | Workflows, die über lange Sessions stabile Fehlerraten erfordern. Dringend empfohlen für Workflows mit Rauschlernen, etwa Probabilistic Error Amplification (PEA) und Probabilistic Error Cancellation (PEC). |
slow_gates | Nighthawk | Nicht zutreffend | Workflows zur Observablen-Schätzung mit Fehlerminderung, etwa ZNE, PEA und PEC. |
Zum Beispiel:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
# On a Heron QPU
backend = service.backend("ibm_kingston", calibration_id="slow_gates_ac")
# backend = service.backend("ibm_kingston", calibration_id="slow_gates_dc")
# On a Nighthawk QPU
backend = service.backend("ibm_phoenix", calibration_id="slow_gates")
Wenn du slow_gates_ac verwendest, sende alle Jobs des Workflows an eine einzelne Session, damit sie laufen, solange das Rauschen des Geräts stabil bleibt.
Gate-Dauern prüfen
Da Kalibrierungen mit langsamen Gates die Dauer von cz-Gates erhöhen, vergleiche die Dauern mit der Standardkalibrierung, um die Auswirkung auf deinen Circuit zu verstehen. Verwende das Target des Backends, um die Dauer des cz-Gates auf einem bestimmten Qubit-Paar in Sekunden zu ermitteln:
default_backend = service.backend("<backend_name>")
slow_backend = service.backend(
"<backend_name>", calibration_id="slow_gates_ac"
) # Or slow_gates_dc, or slow_gates on Nighthawk
qubits = (0, 1) # Replace with a connected qubit pair on the backend
print(default_backend.target["cz"][qubits].duration)
print(slow_backend.target["cz"][qubits].duration)
Da das Target die gewählte Kalibrierung widerspiegelt, transpiliere deine Circuits für das Backend, das dieselbe calibration_id verwendet, mit der du sie ausführen willst.
Nächste Schritte
- Erfahre, wie du dynamische Circuits ausführst mit Mid-Circuit-Messungen.
- Nutze Postselektion, um Ergebnisse herauszufiltern, die von korreliertem Rauschen betroffen sind.
- Lies, wie IBM Quantencomputer überwacht, kalibriert und gebenchmarkt werden.