Optimisations de transpilation avec SABRE
Estimation d'utilisation : moins d'une minute sur un processeur Heron r2 (REMARQUE : Il s'agit uniquement d'une estimation. Votre temps d'exécution peut varier.)
Contexte
La transpilation est une étape cruciale dans Qiskit qui convertit les circuits quantiques en formes compatibles avec un matériel quantique spécifique. Elle implique deux étapes clés : le placement des qubits (correspondance entre les qubits logiques et les qubits physiques sur le dispositif) et le routage des portes (garantir que les portes multi-qubits respectent la connectivité du dispositif en insérant des portes SWAP si nécessaire).
SABRE (SWAP-Based Bidirectional heuristic search algorithm) est un puissant outil d'optimisation pour le placement et le routage. Il est particulièrement efficace pour les circuits à grande échelle (100+ qubits) et les dispositifs avec des cartes de couplage complexes, comme l'IBM® Heron, où la croissance exponentielle des correspondances possibles entre qubits exige des solutions efficaces.
Pourquoi utiliser SABRE ?
SABRE minimise le nombre de portes SWAP et réduit la profondeur du circuit, améliorant ainsi les performances du circuit sur du matériel réel. Son approche basée sur des heuristiques le rend idéal pour le matériel avancé et les circuits grands et complexes. Les améliorations récentes introduites dans l'algorithme LightSABRE optimisent davantage les performances de SABRE, offrant des temps d'exécution plus rapides et moins de portes SWAP. Ces améliorations le rendent encore plus efficace pour les circuits à grande échelle.
Ce que vous apprendrez
Ce tutoriel est divisé en deux parties :
- Apprendre à utiliser SABRE avec les patterns Qiskit pour l'optimisation avancée de grands circuits.
- Exploiter qiskit_serverless pour maximiser le potentiel de SABRE en vue d'une transpilation évolutive et efficace.
Vous allez :
- Optimiser SABRE pour des circuits de 100+ qubits, dépassant les paramètres de transpilation par défaut comme
optimization_level=3. - Explorer les améliorations LightSABRE qui réduisent le temps d'exécution et le nombre de portes.
- Personnaliser les paramètres clés de SABRE (
swap_trials,layout_trials,max_iterations,heuristic) pour équilibrer la qualité du circuit et le temps de transpilation.
Prérequis
Avant de commencer ce tutoriel, assurez-vous d'avoir installé les éléments suivants :
- Qiskit SDK v1.0 ou ultérieur, avec le support de visualisation
- Qiskit Runtime v0.28 ou ultérieur (
pip install qiskit-ibm-runtime) - Serverless (
pip install qiskit-ibm-catalog qiskit_serverless)
Configuration
# Added by doQumentation — installs packages not in the Binder environment
%pip install -q qiskit-serverless
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit_ibm_catalog import QiskitServerless, QiskitFunction
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorOptions
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.transpiler import CouplingMap
from qiskit.transpiler.passes import SabreLayout, SabreSwap
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
import matplotlib.pyplot as plt
import numpy as np
import time
Partie I. Utilisation de SABRE avec les patterns Qiskit
SABRE peut être utilisé dans Qiskit pour optimiser les circuits quantiques en gérant à la fois les étapes de placement des qubits et de routage des portes. Dans cette section, nous vous guiderons à travers l'exemple minimal d'utilisation de SABRE avec les patterns Qiskit, en mettant l'accent principal sur l'étape 2 d'optimisation.
Pour exécuter SABRE, vous avez besoin de :
- Une représentation DAG (Directed Acyclic Graph) de votre circuit quantique.
- La carte de couplage du backend, qui spécifie comment les qubits sont physiquement connectés.
- La passe SABRE, qui applique l'algorithme pour optimiser le placement et le routage.
Pour cette partie, nous nous concentrerons sur la passe SabreLayout. Elle effectue à la fois des essais de placement et de routage, cherchant à trouver le placement initial le plus efficace tout en minimisant le nombre de portes SWAP nécessaires. Fait important, SabreLayout, à elle seule, optimise en interne à la fois le placement et le routage en conservant la solution qui ajoute le moins de portes SWAP. Notez que lorsque vous utilisez uniquement SabreLayout, vous ne pouvez pas changer l'heuristique de SABRE, mais vous pouvez personnaliser le nombre de layout_trials.
Étape 1 : Traduire les entrées classiques en un problème quantique
Un circuit GHZ (Greenberger-Horne-Zeilinger) est un circuit quantique qui prépare un état intriqué où tous les qubits sont soit dans l'état |0...0⟩ soit dans l'état |1...1⟩. L'état GHZ pour qubits est mathématiquement représenté comme :
Il est construit en appliquant :
- Une porte Hadamard au premier qubit pour créer une superposition.
- Une série de portes CNOT pour intriquer les qubits restants avec le premier.
Pour cet exemple, nous construisons intentionnellement un circuit GHZ en topologie étoile au lieu d'une topologie linéaire. Dans la topologie étoile, le premier qubit agit comme le « concentrateur » et tous les autres qubits sont intriqués directement avec lui à l'aide de portes CNOT. Ce choix est délibéré car, bien que l'état GHZ en topologie linéaire puisse théoriquement être implémenté en profondeur sur une carte de couplage linéaire sans aucune porte SWAP, SABRE trouverait trivialement une solution optimale en faisant correspondre un circuit GHZ de 100 qubits à un sous-graphe de la carte de couplage heavy-hex du backend.
Le circuit GHZ en topologie étoile pose un problème nettement plus complexe. Bien qu'il puisse toujours théoriquement être exécuté en profondeur sans portes SWAP, trouver cette solution nécessite d'identifier un placement initial optimal, ce qui est beaucoup plus difficile en raison de la connectivité non linéaire du circuit. Cette topologie constitue un meilleur cas de test pour évaluer SABRE, car elle démontre comment les paramètres de configuration impactent les performances de placement et de routage dans des conditions plus complexes.

Points importants :
- L'outil HighLevelSynthesis peut produire la solution optimale en profondeur pour le circuit GHZ en topologie étoile sans introduire de portes SWAP, comme illustré dans l'image ci-dessus.
- Alternativement, la passe StarPrerouting peut réduire davantage la profondeur en guidant les décisions de routage de SABRE, bien qu'elle puisse encore introduire quelques portes SWAP. Cependant, StarPrerouting augmente le temps d'exécution et nécessite une intégration dans le processus initial de transpilation.
Pour les besoins de ce tutoriel, nous excluons à la fois HighLevelSynthesis et StarPrerouting afin d'isoler et de mettre en évidence l'impact direct de la configuration de SABRE sur le temps d'exécution et la profondeur du circuit. En mesurant la valeur d'attente pour chaque paire de qubits, nous analysons :
- Dans quelle mesure SABRE réduit les portes SWAP et la profondeur du circuit.
- L'effet de ces optimisations sur la fidélité du circuit exécuté, où les écarts par rapport à