Einführung in die Transpilation
Transpilation ist der Prozess, bei dem eine gegebene Eingabeschaltung so umgeschrieben wird, dass sie der Topologie eines bestimmten Quantenbauelements entspricht, und bei dem die Schaltungsanweisungen für die Ausführung auf rauschbehafteten Quantencomputern optimiert werden. Diese Dokumentation behandelt die Werkzeuge und Arbeitsabläufe für die lokale Transpilierung, die allen Qiskit-Nutzern zur Verfügung stehen. Wenn Sie Primitive verwenden und sich ausschließlich für die vom „ IBM Quantum -Compute-Service“ bereitgestellten Standardoptionen für die Transpilierung interessieren, lesen Sie den Abschnitt „Techniken zur Fehlerminderung und -unterdrückung “.
Für die Umsetzung wird ein Schaltkreis benötigt, der Ihre Anweisungen enthält:

Die Transpilierung wandelt sie dann so um, dass nur Befehle verwendet werden, die auf einem ausgewählten Backend verfügbar sind, und optimiert diese Befehle, um die Auswirkungen von Störungen zu minimieren:

Als zentrale Komponente des Qiskit SDK ist der Transpiler auf Modularität und Erweiterbarkeit ausgelegt. Sein Hauptzweck besteht darin, neue Schaltkreistransformationen (so genannte Transpiler-Passes ) zu schreiben und sie mit anderen bestehenden Passes zu kombinieren, wodurch die Tiefe und Komplexität von Quantenschaltungen erheblich reduziert wird. Welche Pässe in welcher Reihenfolge aneinandergereiht werden, hat einen großen Einfluss auf das Endergebnis. Diese Pipeline wird bestimmt durch die PassManager und StagedPassManager objekte. Das Objekt StagedPassManager orchestriert die Ausführung von einem oder mehreren PassManagers und bestimmt die Reihenfolge, in der sie ausgeführt werden, während das Objekt PassManager lediglich eine Sammlung von einem oder mehreren Durchläufen ist. Stellen Sie sich die StagedPassManager als Dirigent eines Orchesters vor, die PassManagers als die verschiedenen Instrumentengruppen und die Pass Objekte als die einzelnen Musiker. Auf diese Weise können Sie hardwareeffiziente Quantenschaltungen zusammenstellen, die es Ihnen ermöglichen, Arbeiten im großen Maßstab auszuführen und dabei das Rauschen in Grenzen zu halten.
Weitere Informationen zu den Stufen des Passmanagers finden Sie im Thema Transpilerstufen.
Befehlssatzarchitektur
Neben der Verringerung der Tiefe und Komplexität von Quantenschaltungen ist der Transpiler so konzipiert, dass er die in einer bestimmten QuantumCircuit enthaltenen Befehle so umwandelt, dass sie der Befehlssatzarchitektur (ISA) eines bestimmten Backends entsprechen. Schaltungen, die dem ISA gehorchen, bestehen nur aus Anweisungen, die vom Backend unterstützt werden Targetunterstützt werden, wie z. B. die verfügbaren Basisgatter der Hardware, Messungen, Rücksetzungen und Kontrollflussoperationen, und die den Beschränkungen entsprechen, die durch die Konnektivität der Hardware, d. h. durch die CouplingMap. Wenn ein Auftrag an ein IBM Quantum® Backend übermittelt wird, müssen die Schaltkreise die ISA des Backends einhalten.
Transpiler-Stufen
Die vorgefertigte Transpiler-Pipeline von Qiskit besteht aus sechs grundlegenden Schritten:
init- In diesem Durchlauf werden alle ersten Durchläufe ausgeführt, die erforderlich sind, bevor die Schaltung eingebettet werden kann. Dies beinhaltet in der Regel das Abwickeln benutzerdefinierter Anweisungen und die Umwandlung der Schaltung in alle Ein- und Zwei-Qubit-Gatter. Standardmäßig werden dabei die Schaltungsanweisungen validiert und Multi-Qubit-Gatter in Ein- und Zwei-Qubit-Gatter übersetzt.layout- In diesem Durchgang wird ein Layout angewendet, das die virtuellen Qubits in Ihrer Schaltung auf die physischen Qubits der QPU abbildet.routing- Dieser Durchlauf erfolgt nach der Anwendung eines Layouts und injiziert Gatter (d. h. SWAPs) in die ursprüngliche Schaltung, um sie mit der Konnektivität der QPU (Kopplungskarte) kompatibel zu machen.translation- Bei diesem Durchlauf werden die Gatter in der Schaltung in den Basisbefehlssatz der QPU übersetzt.optimization- In diesem Durchgang wird eine Optimierungsschleife ausgeführt, um effizientere Zerlegungen des Quantenschaltkreises zu finden, bis eine Bedingung erfüllt ist (z. B. eine feste Tiefe).scheduling- Diese Phase ist für alle hardwareabhängigen Planungsdurchläufe vorgesehen. Wenn der Benutzer eine Zeitplanungsmethode angibt, werden in dieser Phase alle Leerlaufzeiten im Stromkreis berücksichtigt.
Wenn Sie einen Transpilierungs-Workflow anpassen, sollten Sie diese Phasen als Leitfaden für die Entwicklung verwenden.
Transpilieren mit Pass-Managern
Es wird empfohlen, einen Schaltkreis zu transpilieren, indem Sie einen gestuften Passmanager erstellen und dann dessen Methode run mit Ihrem Schaltkreis als Eingabe ausführen. Sie können mit der Funktion generate_preset_pass_manager funktion können Sie einen Staged-Pass-Manager mit vernünftigen Standardwerten erzeugen.
Fortgeschrittene Benutzer können eine Reihe von PassManager und StagedPassManager Objekten anpassen und die Reihenfolge festlegen, in der jede Phase ausgeführt wird. Dies kann die endgültige Ausgangsschaltung drastisch verändern. Tatsächlich führt ein benutzerdefinierter Ansatz zur Transpilierung eines Quantenalgorithmus oft zu einer effizienteren Fehlerunterdrückung als der Standardansatz. Ein benutzerdefinierter Ansatz besteht darin, Quantenschaltungen so umzuschreiben, dass sie den Hardware-Bedingungen entsprechen und die Auswirkungen des Rauschens unterdrücken. Der logische Ablauf dieser Werkzeugkette ist anpassbar und muss nicht linear sein. Der Transpilierungsprozess kann iterative Schleifen, bedingte Verzweigungen und andere komplexe Verhaltensweisen vorbereiten. Ein guter Ausgangspunkt für die Entwicklung einer Reihe von benutzerdefinierten Übergängen ist die Untersuchung der standardmäßigen Abfolge von Transformationen.
Einen Überblick über das Transpilieren mit Pass-Managern finden Sie unter Transpilieren mit Pass-Managern.
Standard-Transpilation
Für eine einfachere, aber weniger anpassbare „Out-of-the-Box”-Methode zur Verwendung des Transpilers verwenden Sie die qiskit.compiler.transpile Funktion. Dadurch wird eines der voreingestellten StagedPassManager Objekte generiert und ausgeführt, basierend unter anderem auf einem optimization_level Flag, das auf 0, 1, 2 oder 3 gesetzt werden kann. Höhere Stufen erzeugen optimiertere Schaltungen, allerdings auf Kosten längerer Transpilierungszeiten.
Nächste Schritte
- Wenn Sie wissen möchten, wie Sie die Funktion
generate_preset_passmanagerverwenden, beginnen Sie mit dem Thema Transpilations-Standardeinstellungen und Konfigurationsoptionen. - Erfahren Sie mehr über die Transpilierung mit dem Thema Transpiler-Stufen.
- Probieren Sie die Anleitung zum Vergleichen der Transpiler-Einstellungen aus.
- Probieren Sie ein End-to-End-Beispiel aus, das transpilierte Schaltkreise in der Anleitung zur Abschätzung der Grundzustandsenergie der Heisenberg-Kette mit VQE verwendet.
- Siehe die Transpile-API-Dokumentation.
- Lernen Sie, wie man Schaltkreise transpiliert.