Aller au contenu principal
Ce projet est en phase bêta. Tu as trouvé un bug ? Ouvrir un ticket GitHub. Une question ou une idée ? Pose ta question dans Discussions — tes retours sont les bienvenus !
Quelle est la qualité de la traduction sur cette page ?

Instructions à calibration spécifique

Par défaut, les portes quantiques et les opérations de lecture des ordinateurs quantiques IBM® sont calibrées pour offrir des performances optimales dans les cas d'usage généraux. Certaines charges de travail bénéficient toutefois d'instructions dont les paramètres sont réglés différemment. Par exemple, MidCircuitMeasure (measure_2) est une opération de lecture conçue pour les mesures en milieu de circuit, et des portes cz plus lentes peuvent améliorer les résultats de certains workflows d'atténuation des erreurs.

Les instructions à calibration spécifique se présentent sous deux formes, auxquelles tu accèdes de manières différentes :

  • Instructions avec des signatures différentes : elles sont calibrées en même temps que les instructions standard dans la calibration par défaut, donc tu les ajoutes à tes circuits comme n'importe quelle autre instruction. Elles sont généralement identifiées par un suffixe, comme measure_2.

  • Calibrations alternatives : elles remplacent certaines parties de la calibration par défaut par des paramètres réglés différemment. Tu en sélectionnes une en passant un calibration_id lorsque tu récupères le backend.

Pour savoir comment les ordinateurs quantiques IBM sont calibrés, consulte Surveiller, calibrer et évaluer les performances.

Instructions avec des signatures différentes​

Ces instructions sont calibrées avec le jeu d'instructions standard, donc tu n'as rien de particulier à faire pour récupérer un backend qui les prend en charge. Pour en utiliser une, ajoute l'instruction qiskit-ibm-runtime correspondante à ton circuit.

InstructionDescriptionCas d'usage typiqueUtilisation dans QiskitFamille de processeurs
measure_2Impulsion de mesure plus courteMesures en milieu de circuitMidCircuitMeasure (v0.43.0 ou ultérieure)Heron, Nighthawk r2
reset_2Impulsion de réinitialisation conditionnelle plus courte qui utilise measure_2Réinitialisation de qubit en milieu de circuitMidCircuitReset (v0.49.0 ou ultérieure)Heron
measure_resetMesure comme measure qui réinitialise aussi le qubit*Mesurer et réinitialiser un qubitMeasureReset (v0.50.0 ou ultérieure)Heron, Nighthawk r2
measure_reset_2Mesure plus courte comme measure_2 qui réinitialise aussi le qubit*Mesurer et réinitialiser un qubit en milieu de circuitInitialise MeasureReset avec name="measure_reset_2" (v0.50.0 ou ultérieure)Heron, Nighthawk r2
xslowPorte de basculement de bit (X) de durée prolongéePost-sélection et atténuation des erreurs. C'est la valeur par défaut de l'option x_pulse_type dans les passes de post-sélectionToutes

. | XSlowGate (v0.50.0 ou ultérieure) | Toutes |

* Sur les processeurs Heron, la réinitialisation dépend du résultat de la mesure. Sur les processeurs Nighthawk r2, la réinitialisation est inconditionnelle.

Comme ces instructions ne sont pas prises en charge sur tous les backends, vérifie les instructions prises en charge par le backend avant de les utiliser :

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("<backend_name>")

print(backend.supported_instructions)

Pour trouver tous les backends qui prennent en charge une instruction, utilise :

service = QiskitRuntimeService()
backends = service.backends(filters=lambda b: "<instruction>" in b.supported_instructions)

Utilise instruction_signatures pour voir les signatures de ces instructions à calibration spécifique :

print(backend.configuration().instruction_signatures)

Calibrations alternatives​

Les calibrations alternatives remplacent certaines parties de la calibration par défaut par des paramètres réglés différemment. Chaque calibration alternative possède un identifiant de calibration, et sa disponibilité dépend du QPU.

Pour utiliser une calibration alternative, passe son calibration_id lorsque tu récupères le backend. La cible (target) du backend, et donc le transpileur, utilise les propriétés d'instruction de cette calibration, et les jobs de primitives que tu exécutes sur le backend s'exécutent avec elle.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.backend("<backend_name>", calibration_id="<calibration_id>")

print(backend.calibration_id)
remarque

Les calibrations alternatives ne sont pas disponibles sur tous les QPU.

Calibrations de portes lentes​

Les calibrations de portes lentes règlent la porte cz pour qu'elle soit plus lente que dans la calibration par défaut. Des portes cz plus lentes peuvent améliorer les performances des workflows d'estimation d'observables à grande échelle avec atténuation des erreurs, mais elles augmentent aussi la durée totale de ton circuit, ce qui provoque un peu de décohérence supplémentaire.

Sur les processeurs Heron, les calibrations de portes lentes sont aussi disponibles avec deux modes de contrôle du biais des systèmes à deux niveaux (TLS) :

  • Le biais TLS DC est optimisé pour obtenir les meilleures performances instantanées. La calibration par défaut utilise le biais TLS DC.

  • Le biais TLS AC module le biais TLS pour stabiliser les erreurs de l'appareil dans le temps, ce qui maintient stable le modèle de bruit de l'appareil pendant les workflows longs. Consulte « Noise stabilization » dans Observable Estimation in the Absence of Classical Verification pour plus de détails.

Les processeurs Nighthawk n'utilisent pas de biais TLS, ils disposent donc d'une seule calibration de portes lentes.

ID de calibrationFamille de processeursBiais TLSRecommandé pour
Aucun (calibration par défaut)ToutesDC (Heron)Usage général. Particulièrement recommandé pour les charges de travail dont les chaînes de bits peuvent être distillées classiquement, comme les circuits piqués et les workflows SQD ou SKQD, et pour les charges de travail avec détection d'erreurs.
slow_gates_dcHeronDCWorkflows d'estimation d'observables à grande échelle, en particulier ceux qui utilisent une atténuation heuristique des erreurs comme l'extrapolation à bruit nul (ZNE).
slow_gates_acHeronACWorkflows qui exigent des taux d'erreur stables sur de longues sessions. Fortement recommandé pour les workflows impliquant un apprentissage du bruit, comme l'amplification probabiliste des erreurs (PEA) et l'annulation probabiliste des erreurs (PEC).
slow_gatesNighthawkSans objetWorkflows d'estimation d'observables qui utilisent l'atténuation des erreurs, comme ZNE, PEA et PEC.

Par exemple :

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")
conseil

Lorsque tu utilises slow_gates_ac, soumets tous les jobs du workflow à une seule session afin qu'ils s'exécutent tant que le bruit de l'appareil reste stable.

Vérifier les durées des portes​

Comme les calibrations de portes lentes augmentent les durées de la porte cz, compare ces durées à celles de la calibration par défaut pour comprendre l'effet sur ton circuit. Utilise la cible (target) du backend pour trouver la durée, en secondes, de la porte cz sur une paire de qubits donnée :

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)

Comme la cible (target) reflète la calibration sélectionnée, transpile tes circuits pour le backend qui utilise le même calibration_id que celui sur lequel tu prévois d'exécuter.

Étapes suivantes​

Recommandations