Introduction à la transpilation
La transpilation est le processus qui consiste à réécrire un circuit d'entrée donné afin de l'adapter à la topologie d'un dispositif quantique spécifique, et à optimiser les instructions du circuit en vue de leur exécution sur des ordinateurs quantiques sujets au bruit. Cette documentation présente les outils et les workflows de transpilation locale mis à la disposition de tous les utilisateurs de Qiskit. Si vous utilisez des primitives et que vous souhaitez uniquement connaître les options de transpilation par défaut fournies par le service de calcul d' IBM Quantum, consultez la rubrique « Techniques d'atténuation et de suppression des erreurs ».
Le processus de transpilation s'effectue à partir d'un circuit qui contient vos instructions :

La transpilation le transforme ensuite de manière à ce que seules les instructions disponibles sur un backend choisi soient utilisées, et optimise ces instructions pour minimiser les effets du bruit :

Composant central du SDK Qiskit, le transpileur est conçu pour être modulaire et extensible. Sa principale utilité est d'écrire de nouvelles transformations de circuits (connues sous le nom de passes de transpilation) et de les combiner avec d'autres passes existantes, réduisant ainsi considérablement la profondeur et la complexité des circuits quantiques. Le choix des passes qui s'enchaînent et l'ordre dans lequel elles se succèdent ont une incidence majeure sur le résultat final. Cette canalisation est déterminée par les PassManager et StagedPassManager objets. L'objet StagedPassManager orchestre l'exécution d'une ou plusieurs PassManagers et détermine l'ordre dans lequel elles sont exécutées, tandis que l'objet PassManager n'est qu'une collection d'une ou plusieurs passes. Imaginez que le site StagedPassManager est le chef d'orchestre, que les sites PassManagers sont les différentes sections d'instruments et que les objets Pass sont les musiciens. De cette manière, vous pouvez composer des circuits quantiques efficaces sur le plan matériel qui vous permettent d'exécuter des travaux à l'échelle de l'utilité tout en gardant un niveau de bruit gérable.
Pour plus d'informations sur les étapes du gestionnaire de passe, voir la rubrique Étapes du transpondeur.
Architecture du jeu d'instructions
Outre la réduction de la profondeur et de la complexité des circuits quantiques, le transpileur est conçu pour transformer les instructions contenues dans un site QuantumCircuit donné afin d'obéir à l'architecture du jeu d'instructions (ISA) d'un backend particulier. Les circuits obéissant à l'ISA se composent uniquement d'instructions qui sont prises en charge par le backend Targetcomme les portes de base disponibles du matériel, les mesures, les réinitialisations et les opérations de flux de contrôle, et qui respectent les contraintes spécifiées par la connectivité du matériel, c'est-à-dire la norme CouplingMap. Lorsqu'un travail est soumis à un backend IBM Quantum®, les circuits doivent respecter l'ISA du backend.
Étapes du transpilateur
Le pipeline de transposition préconstruit de Qiskit se compose de six étapes fondamentales :
init- Cette passe exécute toutes les passes initiales qui sont nécessaires avant que le circuit puisse être intégré. Cela implique généralement de dérouler les instructions personnalisées et de convertir le circuit en portes à un ou deux qubits. Par défaut, il valide les instructions du circuit et traduit les portes à plusieurs qubits en portes à un ou deux qubits.layout- Cette passe applique une mise en page, faisant correspondre les qubits virtuels de votre circuit aux qubits physiques du QPU.routing- Cette passe s'exécute après l'application d'une disposition et injecte des portes (c'est-à-dire des SWAP) dans le circuit original pour le rendre compatible avec la connectivité de la QPU (carte de couplage).translation- Ce passage traduit les portes du circuit en un ensemble d'instructions de base de la QPU.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 (telle qu'une profondeur fixe).scheduling- Cette étape est destinée aux passes d'ordonnancement tenant compte du matériel. Si l'utilisateur spécifie une méthode d'ordonnancement, cette étape prend en compte tous les temps morts du circuit.
Si vous personnalisez un flux de travail de transpilation, utilisez ces étapes comme lignes directrices pendant le développement.
Transpiler avec gestionnaires de passes
La méthode recommandée pour transpiler un circuit est de créer un gestionnaire de passes par étapes, puis d'exécuter sa méthode run avec votre circuit en entrée. Vous pouvez utiliser la fonction generate_preset_pass_manager pour générer un gestionnaire de passe par étapes avec des valeurs par défaut raisonnables.
Les utilisateurs plus expérimenté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 modifier considérablement le circuit de sortie final. En fait, une approche personnalisée de la transposition d'un algorithme quantique produit souvent une suppression des erreurs plus efficace que l'approche par défaut. Une approche personnalisée consiste à réécrire les circuits quantiques pour les adapter 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 pour développer un ensemble de passes personnalisées est d'examiner la séquence de transformations par défaut.
Pour une vue d'ensemble de la transposition à l'aide de gestionnaires de passe, voir Transpiler avec des gestionnaires de passe.
Transpilation par défaut
Pour une utilisation plus simple, mais moins personnalisable, du transpilateur, utilisez la qiskit.compiler.transpile fonction. Cela génère et exécute l'un des objets StagedPassManager prédéfinis en fonction, entre autres options, d'un optimization_level indicateur qui peut être défini sur 0, 1, 2 ou 3. Des niveaux plus élevés génèrent des circuits plus optimisés, mais au détriment de temps de transpilation plus longs.
Etapes suivantes
- Pour apprendre à utiliser la fonction
generate_preset_passmanager, commencez par la rubrique Paramètres par défaut et options de configuration de la transpilation. - Poursuivez votre apprentissage de la transpilation avec le thème des étapes de la transpilation.
- Consultez le guide Comparer les paramètres du transpiler.
- Essayez un exemple de bout en bout qui utilise des circuits transpilés dans le tutoriel Estimation de l'énergie de l'état fondamental de la chaîne de Heisenberg avec VQE.
- Consultez la documentation de l'API Transpile.
- Apprenez à transposer des circuits.