Aller au contenu principal

Introduction à la transpilation

Une vue d'ensemble de la transpilation et des outils pertinents, en local ou dans le cloud.

La transpilation est le processus de réécriture d'un circuit d'entrée donné pour correspondre à la topologie d'un appareil quantique spécifique, et d'optimisation des instructions du circuit en vue de son exécution sur des ordinateurs quantiques bruités. Cette documentation couvre les outils et les flux de travail pour la transpilation locale, disponibles pour tous les utilisateurs de Qiskit, ainsi que pour le Qiskit Transpiler Service basé sur le cloud, disponible pour les utilisateurs des plans Premium, Flex et On-Prem (via l'API IBM Quantum Platform). Si tu utilises des primitives et que tu t'intéresses uniquement aux options de transpilation par défaut fournies par le service Qiskit Runtime, consulte la rubrique Configurer la compilation au moment de l'exécution pour Qiskit Runtime.

Le processus de transpilation prend un circuit contenant tes instructions :

Un circuit quantique à deux qubits contenant une porte Hadamard et deux portes CNOT.

La transpilation le transforme ensuite de façon à n'utiliser que les instructions disponibles sur un backend choisi, et optimise ces instructions pour minimiser les effets du bruit :

Le même circuit quantique à deux qubits après transpilation. Il contient des portes RZ, X, SX et ECR.


Composant central du SDK Qiskit, le transpiler est conçu pour être modulaire et extensible. Son utilisation principale consiste à écrire de nouvelles transformations de circuit (appelées passes du transpiler), et à les combiner avec d'autres passes existantes, ce qui réduit considérablement la profondeur et la complexité des circuits quantiques. Le choix des passes enchaînées et leur ordre ont un effet majeur sur le résultat final. Ce pipeline est déterminé par les objets PassManager et StagedPassManager. Le StagedPassManager orchestre l'exécution d'un ou plusieurs PassManagers et détermine l'ordre dans lequel ils sont exécutés, tandis que l'objet PassManager est simplement une collection d'une ou plusieurs passes. Imagine le StagedPassManager comme le chef d'orchestre, les PassManagers comme les différentes sections instrumentales, et les objets Pass comme les musiciens individuels. De cette façon, tu peux composer des circuits quantiques efficaces pour le matériel, qui te permettent d'exécuter des travaux à l'échelle utilitaire tout en maintenant le bruit gérable.

Pour en savoir plus sur les étapes du pass manager, consulte la rubrique Étapes du transpiler.

Architecture du jeu d'instructions

En plus de réduire la profondeur et la complexité des circuits quantiques, le transpiler est conçu pour transformer les instructions contenues dans un QuantumCircuit donné afin de respecter l'Architecture du Jeu d'Instructions (ISA) d'un backend particulier. Les circuits respectant l'ISA ne contiennent que des instructions prises en charge par la Target du backend, telles que les portes de base disponibles sur le matériel, les mesures, les réinitialisations et les opérations de flux de contrôle, et se conforment aux contraintes spécifiées par la connectivité du matériel, c'est-à-dire la CouplingMap de la cible. Lors de la soumission d'un travail à un backend IBM Quantum®, les circuits doivent respecter l'ISA du backend.

Étapes du transpiler

Le pipeline de transpilation prédéfini de Qiskit comprend six étapes fondamentales :

  1. init - Cette passe exécute toutes les passes initiales requises avant que le circuit puisse être intégré. Cela implique généralement le déroulement des instructions personnalisées et la conversion du circuit en portes à un et deux qubits uniquement. Par défaut, cela valide les instructions du circuit et traduit les portes multi-qubits en portes à un et deux qubits.
  2. layout - Cette passe applique un layout, en mappant les qubits virtuels de ton circuit vers les qubits physiques du QPU.
  3. routing - Cette passe s'exécute après l'application d'un layout et injecte des portes (c'est-à-dire des SWAPs) dans le circuit original pour le rendre compatible avec la connectivité du QPU (coupling map).
  4. translation - Cette passe traduit les portes du circuit vers le jeu d'instructions de base du QPU.
  5. optimization - Cette passe exécute une boucle d'optimisation pour trouver des décompositions plus efficaces du circuit quantique jusqu'à ce qu'une condition soit remplie (par exemple, une profondeur fixe).
  6. scheduling - Cette étape est dédiée aux passes de planification tenant compte du matériel. Si l'utilisateur spécifie une méthode de planification, cette étape prend en compte tout le temps d'inactivité dans le circuit.

Si tu personnalises un flux de transpilation, utilise ces étapes comme guide lors du développement.

Transpiler avec des pass managers

La méthode recommandée pour transpiler un circuit est de créer un staged pass manager, puis d'exécuter sa méthode run avec ton circuit en entrée. Tu peux utiliser la fonction generate_preset_pass_manager pour générer un staged pass manager avec des valeurs par défaut raisonnables.

Les utilisateurs plus avancés peuvent personnaliser un ensemble d'objets PassManager et StagedPassManager et déterminer l'ordre dans lequel chaque étape est exécutée. Cela peut changer considérablement le circuit de sortie final. En fait, une approche personnalisée de la transpilation d'un algorithme quantique produit souvent une suppression d'erreurs plus efficace que l'approche par défaut. Une approche personnalisée implique la réécriture des circuits quantiques pour correspondre aux contraintes matérielles et supprimer les effets du bruit. Le flux logique de cette chaîne d'outils est personnalisable et n'a pas besoin d'être linéaire. Le processus de transpilation peut préparer des boucles itératives, des branches conditionnelles et d'autres comportements complexes. Un bon point de départ lors du développement d'un ensemble de passes personnalisées est d'examiner la séquence de transformations par défaut.

Pour une vue d'ensemble de la transpilation avec des pass managers, consulte Transpiler avec des pass managers.

Transpilation par défaut

Pour une façon plus simple, mais moins personnalisable, d'utiliser le transpiler « prête à l'emploi », utilise la fonction qiskit.compiler.transpile. Celle-ci génère et exécute l'un des objets StagedPassManager prédéfinis en fonction, entre autres options, d'un indicateur optimization_level pouvant être défini à 0, 1, 2 ou 3. Des niveaux plus élevés génèrent des circuits plus optimisés au prix de temps de transpilation plus longs.

Étapes suivantes

Recommandations