Einführung in die Transpilation
Transpilation ist der Prozess, einen gegebenen Eingangsschaltkreis so umzuschreiben, dass er der Topologie eines bestimmten Quantengeräts entspricht, und die Schaltkreisanweisungen für die Ausführung auf verrauschten Quantencomputern zu optimieren. Diese Dokumentation behandelt die Werkzeuge und Workflows für die lokale Transpilation, die allen Qiskit-Nutzern zur Verfügung stehen. Wenn du Primitives verwendest und nur an den Standard-Transpilationsoptionen des IBM Quantum Compute Service interessiert bist, lies das Thema Fehlerminderungs- und -unterdrückungstechniken.
Ausgangspunkt der Transpilation ist ein Schaltkreis mit deinen Anweisungen:
Die Transpilation transformiert ihn dann so, dass nur Anweisungen verwendet werden, die auf einem gewählten Backend verfügbar sind, und optimiert diese Anweisungen, um die Auswirkungen von Rauschen zu minimieren:
Der Transpiler ist eine zentrale Komponente des Qiskit SDK und für Modularität und Erweiterbarkeit konzipiert. Sein Hauptzweck ist es, neue Schaltkreis-Transformationen zu schreiben (bekannt als Transpiler-Passes) und sie mit anderen bestehenden Passes zu kombinieren, wodurch die Tiefe und Komplexität von Quantenschaltkreisen erheblich reduziert wird. Welche Passes miteinander verkettet werden und in welcher Reihenfolge, hat einen wesentlichen Einfluss auf das Endergebnis. Diese Pipeline wird durch die Objekte PassManager und StagedPassManager bestimmt. Der StagedPassManager orchestriert die Ausführung eines oder mehrerer PassManagers und legt die Reihenfolge fest, in der sie ausgeführt werden, während das PassManager-Objekt lediglich eine Sammlung von einem oder mehreren Passes ist. Stell dir den StagedPassManager als Dirigenten eines Orchesters vor, die PassManagers als die verschiedenen Instrumentengruppen und die Pass-Objekte als die einzelnen Musiker. Auf diese Weise kannst du hardwareeffiziente Quantenschaltkreise erstellen, mit denen du Arbeiten im Utility-Maßstab ausführen kannst, während das Rauschen beherrschbar bleibt.
Weitere Informationen zu den Pass-Manager-Stufen findest du im Thema Transpilerstufen.
Instruction Set Architecture
Neben der Reduzierung von Tiefe und Komplexität von Quantenschaltkreisen ist der Transpiler darauf ausgelegt, die in einem gegebenen QuantumCircuit enthaltenen Anweisungen so zu transformieren, dass sie der Instruction Set Architecture (ISA) eines bestimmten Backends entsprechen. Schaltkreise, die der ISA entsprechen, bestehen nur aus Anweisungen, die vom Target des Backends unterstützt werden, wie die verfügbaren Basis-Gates der Hardware, Messungen, Resets und Ablaufsteuerungsoperationen, und erfüllen die durch die Konnektivität der Hardware vorgegebenen Einschränkungen, also die CouplingMap des Targets. Beim Einreichen eines Jobs an ein IBM Quantum®-Backend müssen die Schaltkreise der ISA des Backends entsprechen.
Transpilerstufen
Qiskits vorkonfigurierte Transpilationspipeline besteht aus sechs grundlegenden Stufen:
-
init– Dieser Pass führt alle initialen Passes aus, die erforderlich sind, bevor der Schaltkreis eingebettet werden kann. Dies umfasst typischerweise das Entfalten benutzerdefinierter Anweisungen und die Umwandlung des Schaltkreises in ausschließlich Ein- und Zwei-Qubit-Gates. Standardmäßig werden dabei die Schaltkreisanweisungen validiert und Multi-Qubit-Gates in Ein- und Zwei-Qubit-Gates übersetzt. -
layout– Dieser Pass wendet ein Layout an und ordnet die virtuellen Qubits in deinem Schaltkreis den physischen Qubits der QPU zu. -
routing– Dieser Pass läuft nach der Anwendung eines Layouts und fügt Gates (d. h. SWAPs) in den ursprünglichen Schaltkreis ein, um ihn mit der Konnektivität der QPU (Coupling Map) kompatibel zu machen. -
translation– Dieser Pass übersetzt die Gates im Schaltkreis in den Basis-Befehlssatz der QPU. -
optimization– Dieser Pass führt eine Optimierungsschleife aus, um effizientere Zerlegungen des Quantenschaltkreises zu finden, bis eine Bedingung erfüllt ist (z. B. eine feste Tiefe). -
scheduling– Diese Stufe umfasst alle hardwarenahen Scheduling-Passes. Wenn der Nutzer eine Scheduling-Methode angibt, berücksichtigt diese Stufe alle Leerlaufzeiten im Schaltkreis.
Wenn du einen Transpilations-Workflow anpasst, nutze diese Stufen als Richtlinie bei der Entwicklung.
Transpilieren mit Pass-Managern
Der empfohlene Weg, einen Schaltkreis zu transpilieren, besteht darin, einen Staged Pass Manager zu erstellen und dann dessen run-Methode mit deinem Schaltkreis als Eingabe auszuführen. Du kannst die Funktion generate_preset_pass_manager verwenden, um einen Staged Pass Manager mit sinnvollen Standardwerten zu generieren.
Fortgeschrittene Nutzer können eine Reihe von PassManager- und StagedPassManager-Objekten anpassen und die Reihenfolge festlegen, in der jede Stufe ausgeführt wird. Dies kann das endgültige Ergebnis des Schaltkreises erheblich verändern. Tatsächlich führt ein benutzerdefinierter Ansatz zur Transpilation eines Quantenalgorithmus häufig zu einer effizienteren Fehlerunterdrückung als der Standardansatz. Ein solcher Ansatz beinhaltet das Umschreiben von Quantenschaltkreisen, um Hardwareeinschränkungen zu erfüllen und die Auswirkungen von Rauschen zu unterdrücken. Die Ablauflogik dieser Toolchain ist anpassbar und muss nicht linear sein. Der Transpilationsprozess kann iterative Schleifen, bedingte Verzweigungen und andere komplexe Verhaltensweisen vorbereiten. Ein guter Ausgangspunkt bei der Entwicklung benutzerdefinierter Passes ist die Untersuchung der Standardsequenz von Transformationen.
Eine Übersicht der Transpilation mit Pass Managern findest du unter Transpilieren mit Pass Managern.
Standard-Transpilation
Für einen einfacheren, aber weniger anpassbaren „Out-of-the-Box“-Ansatz zur Verwendung des Transpilers kannst du die Funktion qiskit.compiler.transpile verwenden. Diese generiert und führt eines der vordefinierten StagedPassManager-Objekte aus, basierend auf – neben anderen Optionen – einem optimization_level-Flag, das auf 0, 1, 2 oder 3 gesetzt werden kann. Höhere Stufen erzeugen stärker optimierte Schaltkreise auf Kosten längerer Transpilationszeiten.
Nächste Schritte
- Um zu lernen, wie du die Funktion
generate_preset_passmanagerverwendest, beginne mit dem Thema Standard-Transpilationseinstellungen und Konfigurationsoptionen. - Mehr über Transpilation erfährst du im Thema Transpilerstufen.
- Probiere die Anleitung Transpilereinstellungen vergleichen aus.
- Probiere ein End-to-End-Beispiel, das transpilierte Schaltkreise im Tutorial Grundzustandsenergieschätzung der Heisenberg-Kette mit VQE verwendet.
- Sieh dir die Transpile-API-Dokumentation an.
- Lerne, wie du Schaltkreise transpilierst.