Zum Hauptinhalt springen

Standardeinstellungen und Konfigurationsoptionen für die Transpilierung

Paketversionen

Der Code auf dieser Seite wurde mit den folgenden Anforderungen entwickelt. Wir empfehlen die Verwendung dieser oder neuerer Versionen.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Abstrakte Schaltungen müssen transpiliert werden, da QPUs über eine begrenzte Anzahl von Basis-Gates verfügen und keine beliebigen Operationen ausführen können. Die Funktion des Transpilers besteht darin, beliebige Schaltungen so zu ändern, dass sie auf einer bestimmten QPU ausgeführt werden können. Dies geschieht durch Übersetzung der Schaltungen in die unterstützten Basis-Gates und durch Einführung von SWAP-Gates nach Bedarf, sodass die Konnektivität der Schaltung mit der der QPU übereinstimmt.

Wie in Transpile with pass managers erläutert, kannst du einen Pass Manager mit der Funktion generate_preset_pass_manager erstellen und eine Schaltung oder Liste von Schaltungen an dessen run-Methode übergeben, um sie zu transpilieren. Du kannst generate_preset_pass_manager aufrufen, indem du nur die Optimierungsstufe und das Backend übergibst und die Standardwerte für alle anderen Optionen verwendest, oder du kannst zusätzliche Argumente an die Funktion übergeben, um die Transpilierung feinabzustimmen.

Grundlegende Verwendung ohne Parameter

In diesem Beispiel übergeben wir eine Schaltung und die Ziel-QPU an den Transpiler, ohne weitere Parameter anzugeben.

Erstelle eine Schaltung und zeige das Ergebnis an:

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
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 of the previous code cell

Transpiliere die Schaltung und zeige das Ergebnis an:

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 of the previous code cell

Alle verfügbaren Parameter

Im Folgenden sind alle verfügbaren Parameter für die Funktion generate_preset_pass_manager aufgeführt. Es gibt zwei Klassen von Argumenten: solche, die das Ziel der Kompilierung beschreiben, und solche, die beeinflussen, wie der Transpiler arbeitet.

Alle Parameter außer optimization_level sind optional. Vollständige Details findest du in der Transpiler-API-Dokumentation.

  • optimization_level (int) - Wie viel Optimierung an den Schaltungen durchgeführt werden soll. Ganzzahl im Bereich (0 - 3). Höhere Stufen erzeugen besser optimierte Schaltungen, auf Kosten einer längeren Transpilierungszeit. Weitere Details findest du unter Set transpiler optimization level.

Parameter zur Beschreibung des Kompilierungsziels:

Diese Argumente beschreiben die Ziel-QPU für die Schaltungsausführung, einschließlich Informationen wie der Coupling Map der QPU (die die Konnektivität der Qubits beschreibt), der von der QPU unterstützten Basis-Gates und der Fehlerraten der Gates.

Viele dieser Parameter werden ausführlich unter Commonly used parameters for transpilation beschrieben.

QPU (Backend) Parameter

Backend-Parameter - Wenn du backend angibst, musst du weder target noch andere Backend-Optionen angeben. Ebenso musst du bei Angabe von target weder backend noch andere Backend-Optionen angeben.

  • backend (Backend) - Wenn dies gesetzt ist, kompiliert der Transpiler die Eingabeschaltung für dieses Gerät. Wenn eine andere Option gesetzt ist, die diese Einstellungen beeinflusst, wie z. B. coupling_map, überschreibt sie die Einstellungen von backend.
  • target (Target) - Ein Backend-Transpiler-Ziel. Normalerweise wird dies als Teil des Backend-Arguments angegeben, aber wenn du manuell ein Target-Objekt erstellt hast, kannst du es hier angeben. Dies überschreibt das Ziel von backend.
  • backend_properties (BackendProperties) - Von einer QPU zurückgegebene Eigenschaften, einschließlich Informationen über Gate-Fehler, Auslesefehler, Qubit-Kohärenzzeiten usw. Finde eine QPU, die diese Informationen bereitstellt, indem du backend.properties() ausführst.
  • timing_constraints (Dict[str, int] | None) - Eine optionale Hardware-Beschränkung für die Zeitauflösung von Anweisungen. Diese Information wird durch die QPU-Konfiguration bereitgestellt. Wenn die QPU keine Beschränkung für die Zeitaufteilung von Anweisungen hat, ist timing_constraints None und es wird keine Anpassung vorgenommen. Eine QPU kann eine Reihe von Beschränkungen melden, nämlich:
    • granularity: Ein ganzzahliger Wert, der die minimale Puls-Gate-Auflösung in Einheiten von dt darstellt. Ein benutzerdefiniertes Puls-Gate sollte eine Dauer haben, die ein Vielfaches dieses Granularitätswerts ist.
    • min_length: Ein ganzzahliger Wert, der die minimale Puls-Gate-Länge in Einheiten von dt darstellt. Ein benutzerdefiniertes Puls-Gate sollte länger als diese Länge sein.
    • pulse_alignment: Ein ganzzahliger Wert, der eine Zeitauflösung der Startzeit von Gate-Anweisungen darstellt. Gate-Anweisungen sollten zu einem Zeitpunkt beginnen, der ein Vielfaches dieses Werts ist.
    • acquire_alignment: Ein ganzzahliger Wert, der eine Zeitauflösung der Startzeit von Messanweisungen darstellt. Messanweisungen sollten zu einem Zeitpunkt beginnen, der ein Vielfaches dieses Werts ist.

Layout- und Topologie-Parameter

  • basis_gates (List[str] | None) - Liste der Basis-Gate-Namen, zu denen aufgerollt werden soll. Zum Beispiel ['u1', 'u2', 'u3', 'cx']. Wenn None, nicht aufrollen.
  • coupling_map (CouplingMap | List[List[int]]) - Gerichtete Coupling Map (möglicherweise benutzerdefiniert), die beim Mapping angesteuert werden soll. Wenn die Coupling Map symmetrisch ist, müssen beide Richtungen angegeben werden. Diese Formate werden unterstützt:
    • CouplingMap-Instanz
    • Liste - muss als Adjazenzmatrix angegeben werden, wobei jeder Eintrag alle gerichteten Zwei-Qubit-Interaktionen spezifiziert, die von der QPU unterstützt werden. Zum Beispiel: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
  • inst_map (List[InstructionScheduleMap] | None) - Zuordnung von Schaltungsoperationen zu Pulssequenzen. Wenn None, wird die instruction_schedule_map der QPU verwendet.

Parameter zur Beeinflussung der Funktionsweise des Transpilers

Diese Parameter beeinflussen bestimmte Transpilierungsstufen. Einige von ihnen können mehrere Stufen beeinflussen, wurden aber der Einfachheit halber nur unter einer Stufe aufgeführt. Wenn du ein Argument angibst, wie z. B. initial_layout für die Qubits, die du verwenden möchtest, überschreibt dieser Wert alle Passes, die ihn ändern könnten. Mit anderen Worten, der Transpiler ändert nichts, was du manuell angibst. Einzelheiten zu bestimmten Stufen findest du unter Transpiler stages.

Initialisierungsstufe

  • hls_config (HLSConfig) - Eine optionale Konfigurationsklasse HLSConfig, die direkt an den HighLevelSynthesis-Transformationspass übergeben wird. Mit dieser Konfigurationsklasse kannst du die Listen der Synthese-Algorithmen und deren Parameter für verschiedene High-Level-Objekte angeben.
  • init_method (str) - Der Plugin-Name, der für die Initialisierungsstufe verwendet werden soll. Standardmäßig wird kein externes Plugin verwendet. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit init als Stage-Name-Argument ausführst.
  • unitary_synthesis_method (str) - Der Name der zu verwendenden unitären Synthesemethode. Standardmäßig wird default verwendet. Du kannst eine Liste der installierten Plugins anzeigen, indem du unitary_synthesis_plugin_names() ausführst.
  • unitary_synthesis_plugin_config (dict) - Ein optionales Konfigurationswörterbuch, das direkt an das unitäre Synthese-Plugin übergeben wird. Standardmäßig hat diese Einstellung keine Auswirkung, da die standardmäßige unitäre Synthesemethode keine benutzerdefinierte Konfiguration annimmt. Die Anwendung einer benutzerdefinierten Konfiguration sollte nur notwendig sein, wenn ein unitäres Synthese-Plugin mit dem Argument unitary_synthesis angegeben wird. Da dies für jedes unitäre Synthese-Plugin spezifisch ist, lies bitte die Dokumentation des Plugins, um zu erfahren, wie du diese Option verwendest.

Layout-Stufe

  • initial_layout (Layout | Dict | List) - Anfangsposition der virtuellen Qubits auf physischen Qubits. Wenn dieses Layout die Schaltung mit den coupling_map-Beschränkungen kompatibel macht, wird es verwendet. Das endgültige Layout ist nicht garantiert gleich, da der Transpiler Qubits durch Swaps oder andere Mittel permutieren kann. Vollständige Details findest du im Initial layout-Abschnitt.
  • layout_method (str) - Name des Layout-Auswahlpasses (default, dense, sabre und trivial). Dies kann auch der externe Plugin-Name sein, der für die Layout-Stufe verwendet werden soll. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit layout als stage_name-Argument ausführst. Der Standardwert ist sabre.

Routing-Stufe

  • routing_method (str) - Name des Routing-Passes (basic, lookahead, default, sabre oder none). Dies kann auch der externe Plugin-Name sein, der für die Routing-Stufe verwendet werden soll. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit routing als stage_name-Argument ausführst. Der Standardwert ist sabre.

Übersetzungsstufe

  • translation_method (str) - Name des Übersetzungspasses (default, synthesis, translator, ibm_backend, ibm_dynamic_circuits, ibm_fractional). Dies kann auch der externe Plugin-Name sein, der für die Übersetzungsstufe verwendet werden soll. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit translation als stage_name-Argument ausführst. Der Standardwert ist translator.

Optimierungsstufe

  • approximation_degree (float, im Bereich 0-1 | None) - Heuristisches Maß für die Schaltungsapproximation (1.0 = keine Approximation, 0.0 = maximale Approximation). Der Standardwert ist 1.0. Die Angabe von None setzt den Approximationsgrad auf die gemeldete Fehlerrate. Weitere Details findest du im Approximation degree-Abschnitt.
  • optimization_method (str) - Der Plugin-Name, der für die Optimierungsstufe verwendet werden soll. Standardmäßig wird kein externes Plugin verwendet. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit optimization als stage_name-Argument ausführst.

Scheduling-Stufe

  • scheduling_method (str) - Name des Scheduling-Passes. Dies kann auch der externe Plugin-Name sein, der für die Scheduling-Stufe verwendet werden soll. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit scheduling als stage_name-Argument ausführst.
    • 'as_soon_as_possible': Plant Anweisungen gierig, so früh wie möglich auf einer Qubit-Ressource (Alias: asap).
    • 'as_late_as_possible': Plant Anweisungen spät, d.h. hält Qubits nach Möglichkeit im Grundzustand (Alias: alap). Dies ist die Standardeinstellung.

Transpiler-Ausführung

  • seed_transpiler (int) - Setzt Zufallszahlen-Seeds für die stochastischen Teile des Transpilers.

Die folgenden Standardwerte werden verwendet, wenn du keinen der oben genannten Parameter angibst. Weitere Informationen findest du auf der API-Referenzseite der Methode:

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,
)
<qiskit.transpiler.passmanager.StagedPassManager at 0x7fa3e6dab110>

Nächste Schritte

Empfehlungen