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, sowie den cloudbasierten Qiskit Transpiler Service für Nutzer des Premium-Plans, Flex-Plans und On-Prem-Plans (über die IBM Quantum Platform API). Wenn du Primitives verwendest und nur an den Standard-Transpilationsoptionen des Qiskit Runtime-Dienstes interessiert bist, lies das Thema Laufzeitkompilierung für Qiskit Runtime konfigurieren.
Der Transpilationsprozess nimmt einen 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:
Als zentrales Bestandteil des Qiskit SDK ist der Transpiler auf Modularität und Erweiterbarkeit ausgelegt. Sein Hauptzweck ist es, neue Schaltkreistransformationen (bekannt als Transpiler-Passes) zu schreiben und diese mit anderen vorhandenen Passes zu kombinieren, wodurch Tiefe und Komplexität von Quantenschaltkreisen erheblich reduziert werden. Welche Passes miteinander verknüpft werden und in welcher Reihenfolge, hat einen großen Einfluss auf das Endergebnis. Diese Pipeline wird durch die Objekte PassManager und StagedPassManager bestimmt. Der StagedPassManager orchestriert die Ausführung eines oder mehrerer PassManager und bestimmt die Reihenfolge, 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 den Dirigenten eines Orchesters vor, die PassManager als die verschiedenen Instrumentensektionen und die Pass-Objekte als die einzelnen Musiker. Auf diese Weise kannst du hardwareeffiziente Quantenschaltkreise erstellen, mit denen du Arbeit im Utility-Maßstab ausführen und gleichzeitig das Rauschen beherrschbar halten kannst.
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 Basistransformationen 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 Konvertierung des Schaltkreises in einzelne 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 des 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 des QPU (Coupling Map) kompatibel zu machen.translation– Dieser Pass übersetzt die Gates im Schaltkreis in den Basissatz von Anweisungen des 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 hardwarebewussten 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 einen 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. - Lerne weiter über Transpilation mit dem 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.