Skip to main content
IBM Quantum Platform

Paramètres par défaut et options de configuration de la transpilation

  • Le code de cette page a été développé en tenant compte des exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

    qiskit[all]~=2.5.1
    qiskit-ibm-runtime~=0.47.0
    

Les circuits abstraits doivent être transposés parce que les QPU ont un ensemble limité de portes de base et ne peuvent pas exécuter d'opérations arbitraires. La fonction du transpileur est de modifier des circuits arbitraires de manière à ce qu'ils puissent fonctionner sur une QPU donnée. Pour ce faire, les circuits sont convertis en portes de base et des portes SWAP sont introduites si nécessaire, de sorte que la connectivité du circuit corresponde à celle de la QPU.

Comme expliqué dans Transpiler avec les gestionnaires de passage, vous pouvez créer un gestionnaire de passage à l'aide de la fonction generate_preset_pass_manager et passer un circuit ou une liste de circuits à sa méthode run pour les transpiler. Vous pouvez appeler generate_preset_pass_manager en indiquant uniquement le niveau d'optimisation et le backend, en choisissant d'utiliser les valeurs par défaut pour toutes les autres options, ou vous pouvez passer des arguments supplémentaires à la fonction pour affiner la transpilation.


Utilisation de base sans paramètres

Dans cet exemple, nous transmettons un circuit et une QPU cible au transpileur sans spécifier d'autres paramètres.

Créez un circuit et visualisez le résultat :

from qiskit import QuantumCircuit
from qiskit.circuit.library import grover_operator, DiagonalGate
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke

# Create circuit to test transpiler on
oracle = DiagonalGate([1] * 7 + [-1])
qc = QuantumCircuit(3)
qc.h([0, 1, 2])
qc = qc.compose(grover_operator(oracle))

# Add measurements to the circuit
qc.measure_all()

# View the circuit
qc.draw(output="mpl")

Output:

Output of the previous code cell

Transpilez le circuit et visualisez le résultat :

from qiskit.transpiler import generate_preset_pass_manager

# Specify the QPU to target
backend = FakeSherbrooke()

# Transpile the circuit
pass_manager = generate_preset_pass_manager(
    optimization_level=1, backend=backend
)
transpiled_circ = pass_manager.run(qc)

# View the transpiled circuit
transpiled_circ.draw(output="mpl", idle_wires=False)

Output:

Output of the previous code cell

Tous les paramètres disponibles

Voici tous les paramètres disponibles pour la fonction generate_preset_pass_manager sont énumérés ci-dessous. Il existe deux catégories d'arguments : ceux qui décrivent la cible de la compilation et ceux qui influencent le fonctionnement du transpileur.

Tous les paramètres, à l'exception de optimization_level , sont facultatifs. Pour plus de détails, voir la documentation de l'API Transpiler.

  • optimization_level (int) - Le degré d'optimisation à effectuer sur les circuits. Entier dans la plage (0 - 3). Les niveaux supérieurs génèrent des circuits plus optimisés, au prix d'un temps de transpilation plus long. Voir Définir le niveau d'optimisation du transpilateur pour plus de détails.

Paramètres utilisés pour décrire la cible de compilation :

Ces arguments décrivent la QPU cible pour l'exécution du circuit, y compris des informations telles que la carte de couplage de la QPU (qui décrit la connectivité des qubits), les portes de base prises en charge par la QPU et les taux d'erreur des portes.

La plupart de ces paramètres sont décrits en détail dans la section Paramètres couramment utilisés pour la transpilation.

  • Paramètres de backend - Si vous spécifiez backend, vous n'avez pas besoin de spécifier target ou d'autres options de backend. De même, si vous spécifiez target, vous n'avez pas besoin de spécifier backend ou d'autres options de backend.

    • backend (Backend) - Si cette option est activée, le transpileur compile le circuit d'entrée dans ce dispositif. Si une autre option ayant un impact sur ces paramètres est définie, telle que coupling_map, elle remplace les paramètres de backend.
    • target (Cible) - Cible du transpondeur dorsal. Normalement, il est spécifié dans l'argument backend, mais si vous avez construit manuellement un objet Target, vous pouvez le spécifier ici. Cela remplace la cible de backend.
    • backend_properties ( BackendProperties ) - Propriétés renvoyées par une QPU, y compris des informations sur les erreurs de porte, les erreurs de lecture, les temps de cohérence des qubits, etc. Trouvez une QPU qui fournit ces informations en exécutant backend.properties().
    • timing_constraints (Dictstr[, int] | None) - Restriction matérielle de contrôle facultative sur la résolution temporelle des instructions. Cette information est fournie par la configuration de la QPU. Si la QPU n'a pas de restriction sur l'allocation du temps d'instruction, timing_constraints est None et aucun ajustement n'est effectué. Une QPU peut signaler un ensemble de restrictions, à savoir
      • granularity: Valeur entière représentant la résolution minimale de la porte d'impulsion en unités de dt. Une porte d'impulsion définie par l'utilisateur doit avoir une durée qui est un multiple de cette valeur de granularité.
      • min_length: Valeur entière représentant la longueur minimale de la porte d'impulsion en unités de dt. Une porte d'impulsion définie par l'utilisateur doit être plus longue que cette longueur.
      • pulse_alignment: Valeur entière représentant une résolution temporelle de l'heure de début de l'instruction de la porte. Les instructions de porte doivent commencer à un moment qui est un multiple de cette valeur.
      • acquire_alignment: Valeur entière représentant une résolution temporelle de l'heure de début de l'instruction de mesure. L'instruction de mesure doit commencer à un moment qui est un multiple de cette valeur.
    • basis_gates ( [Liststr] | None) - Liste de noms de portes de base à dérouler. Par exemple [' u1 ', ' u2 ', ' u3 ', ' cx ']. Si None, ne pas dérouler.
    • coupling_map ( CouplingMap | List[ [Listint] ]) - Carte de couplage dirigée (éventuellement personnalisée) vers la cible dans la cartographie. Si la carte de couplage est symétrique, les deux directions doivent être spécifiées. Les formats suivants sont pris en charge :
      • CouplingMap instance
      • Liste - doit être donnée sous la forme d'une matrice d'adjacence, où chaque entrée spécifie toutes les interactions dirigées à deux qubits prises en charge par la QPU. Par exemple : [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3] ]
    • inst_map ( [ListInstructionScheduleMap] | None) - Correspondance entre les opérations du circuit et les programmes d'impulsions. Si None, c'est la valeur instruction_schedule_map de la QPU qui est utilisée.

Paramètres utilisés pour influencer le fonctionnement du transcompilateur

Ces paramètres ont une incidence sur des étapes spécifiques de la transpilation. Certains d'entre eux peuvent avoir un impact sur plusieurs étapes, mais n'ont été répertoriés que sous une seule étape pour des raisons de simplicité. Si vous spécifiez un argument, tel que initial_layout pour les qubits que vous souhaitez utiliser, cette valeur prévaut sur toutes les passes qui pourraient la modifier. En d'autres termes, le transpileur ne modifiera rien de ce que vous aurez spécifié manuellement. Pour plus d'informations sur les étapes spécifiques, voir les étapes du Transpiler.

    • hls_config (HLSConfig) - Une classe de configuration facultative HLSConfig qui est transmise directement à la passe de transformation HighLevelSynthesis . Cette classe de configuration permet de spécifier les listes d'algorithmes de synthèse et leurs paramètres pour divers objets de haut niveau.
    • init_method (str) - Le nom du plugin à utiliser pour l'étape d'initialisation. Par défaut, un plugin externe n'est pas utilisé. Vous pouvez voir la liste des plugins installés en exécutant list_stage_plugins() avec init comme argument de nom de scène.
    • unitary_synthesis_method (str) - Le nom de la méthode de synthèse unitaire à utiliser. Par défaut, default est utilisé. Vous pouvez voir la liste des plugins installés en lançant unitary_synthesis_plugin_names().
    • unitary_synthesis_plugin_config (dict) - Un dictionnaire de configuration optionnel qui est transmis directement au plugin de synthèse unitaire. Par défaut, ce paramètre n'a pas d'effet car la méthode de synthèse unitaire par défaut ne prend pas en compte la configuration personnalisée. L'application d'une configuration personnalisée ne devrait être nécessaire que lorsqu'un plugin de synthèse unitaire est spécifié avec l'argument unitary_synthesis . Comme cette option est propre à chaque plugin de synthèse unitaire, reportez-vous à la documentation du plugin pour savoir comment l'utiliser.
    • initial_layout (Disposition | Dictionnaire | Liste) - Position initiale des qubits virtuels sur les qubits physiques. Si cette disposition rend le circuit compatible avec les coupling_map contraintes, elle sera utilisée. La disposition finale n'est pas garantie d'être identique, car le transcompilateur peut permuter les qubits par des échanges ou d'autres moyens. Pour plus de détails, consultez la section Mise en page initiale.
    • layout_method (str) - Nom de la passe de sélection de la mise en page (default, dense, sabre, et trivial). Il peut également s'agir du nom du plugin externe à utiliser pour la phase de mise en page. Vous pouvez obtenir une liste des plugins installés en lançant list_stage_plugins() avec layout comme argument stage_name . La valeur par défaut est sabre.
    • routing_method (str) - Nom de la passe de routage (basic, lookahead, default, sabre, ou none). Il peut également s'agir du nom du plugin externe à utiliser pour l'étape de routage. Vous pouvez obtenir une liste des plugins installés en lançant list_stage_plugins() avec routing comme argument stage_name . La valeur par défaut est sabre.
    • translation_method (str) - Nom de la passe de traduction (default, synthesis, translator, ibm_backend, ibm_dynamic_circuits, ibm_fractional) Il peut également s'agir du nom du plugin externe à utiliser pour l'étape de traduction. Vous pouvez obtenir une liste des plugins installés en lançant list_stage_plugins() avec translation comme argument stage_name . La valeur par défaut est translator.
    • approximation_degree (float, in the range 0-1 | None) - Cadran heuristique utilisé pour l'approximation du circuit ( 1.0 = pas d'approximation, 0.0 = approximation maximale). La valeur par défaut est 1.0. En spécifiant None , on fixe le degré d'approximation au taux d'erreur signalé. Voir la section Degré d'approximation pour plus de détails.
    • optimization_method (str) - Le nom du plugin à utiliser pour l'étape d'optimisation. Par défaut, un plugin externe n'est pas utilisé. Vous pouvez obtenir une liste des plugins installés en lançant list_stage_plugins() avec optimization comme argument stage_name .
    • scheduling_method (str) - Nom de la passe d'ordonnancement. Il peut également s'agir du nom du plugin externe à utiliser pour l'étape de planification. Vous pouvez obtenir une liste des plugins installés en lançant list_stage_plugins() avec scheduling comme argument stage_name .
      • as_soon_as_possible" : Programmer les instructions avec avidité, le plus tôt possible sur une ressource qubit (alias : asap).
      • as_late_as_possible" : Programmation tardive des instructions, c'est-à-dire maintien des qubits dans l'état fondamental lorsque cela est possible (alias : alap). Il s'agit de la valeur par défaut.
    • seed_transpiler (int) - Définit des graines aléatoires pour les parties stochastiques du transpilateur.

Les valeurs par défaut suivantes sont utilisées si vous ne spécifiez aucun des paramètres ci-dessus. Pour plus d'informations, reportez-vous à la page de référence de l'API de la méthode :

generate_preset_pass_manager(
    optimization_level=1,
    backend=None,
    target=None,
    basis_gates=None,
    coupling_map=None,
    initial_layout=None,
    layout_method=None,
    routing_method=None,
    translation_method=None,
    scheduling_method=None,
    approximation_degree=1.0,
    seed_transpiler=None,
    unitary_synthesis_method="default",
    unitary_synthesis_plugin_config=None,
    hls_config=None,
    init_method=None,
    optimization_method=None,
)

Output:

<qiskit.transpiler.passmanager.StagedPassManager at 0x7f1b3d2d0c90>

Etapes suivantes

Recommandations
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.