Näherungsweise Quantumkompilierung mit Tensornetzwerken (AQC-Tensor)
Das Qiskit-Addon für näherungsweise Quantumkompilierung mit Tensornetzwerken (AQC-Tensor) ermöglicht es, den anfänglichen Teil eines Circuits in eine nahezu äquivalente Näherung dieses Circuits zu kompilieren, jedoch mit deutlich weniger Schichten. Dies wird mithilfe von Tensornetzwerken nach der in [1] beschriebenen Methode erreicht. Die primäre Anwendung liegt in Circuits, die Zeitentwicklung simulieren, aber es kann auf jede Klasse von Circuits angewendet werden, die Zugang zu Folgendem hat:
- Einem guten Zwischenzustand, dem sogenannten „Zielzustand", der durch Tensornetzwerk-Simulation erreicht werden kann; und
- Einem guten Circuit, der eine Näherung an den Zielzustand vorbereitet, aber mit weniger Schichten, wenn er auf das Zielhardwaregerät kompiliert wird.
Die Technik erzeugt einen Ansatz-Circuit auf Basis eines größeren Ziel-Circuits, den ein Nutzer letztlich auf einem QPU ausführen möchte. Dazu wird zunächst ein Teil des Ziel-Circuits mit Tensornetzwerkmethoden simuliert und eine genaue Beschreibung eines Zwischenzustands gewonnen, den der Ansatz-Circuit approximieren soll. Sobald dieser Zwischenzustand gefunden ist, wird er als Kostenfunktion verwendet, um die Parameter des Ansatz-Circuits zu optimieren. Nach Abschluss der Optimierung wird der verbleibende Teil des Ziel-Circuits an den Ansatz angehängt und auf der Quantenhardware ausgeführt.
Das AQC-Tensor-Paket installieren
Es gibt zwei Möglichkeiten, das AQC-Tensor-Paket zu installieren: über PyPI oder durch Bauen aus dem Quellcode. Es wird empfohlen, diese Pakete in einer virtuellen Umgebung zu installieren, um die Paketabhängigkeiten voneinander zu trennen.
Über PyPI installieren
Der einfachste Weg, das AQC-Tensor-Paket zu installieren, ist über PyPI. Um das Paket zu nutzen, musst du außerdem mindestens ein Tensornetzwerk-Backend installieren. Der folgende Codeausschnitt installiert das Addon zusammen mit quimb (für Tensornetzwerk-Unterstützung) und jax (für automatische Differentiation). Wenn du Interesse hast, schau dir das Paket auf GitHub an.
pip install 'qiskit-addon-aqc-tensor[quimb-jax]'
Aus dem Quellcode installieren
Hier klicken, um zu lesen, wie du dieses Paket manuell installierst.
Wenn du zu diesem Paket beitragen oder es manuell installieren möchtest, klone zunächst das Repository:
git clone git clone git@github.com:Qiskit/qiskit-addon-aqc-tensor.git
und installiere das Paket über pip. Wenn du die im Paket-Repository enthaltenen Tutorials ausführen möchtest, installiere auch die Notebook-Abhängigkeiten. Falls du im Repository entwickeln möchtest, kannst du zusätzlich die dev-Abhängigkeiten installieren.
pip install tox jupyterlab -e '.[notebook-dependencies,dev]'
Theoretischer Hintergrund
Das AQC-Tensor-Verfahren wird in [1] ausführlich erläutert. Dieser Abschnitt gibt einen Überblick über die Technik.

Im Allgemeinen benötigt AQC-Tensor drei Dinge als Eingabe:
- Eine Beschreibung des Zielzustands in Form eines Tensornetzwerks. Dieser kann durch Simulation eines Circuits auf einem Tensornetzwerk-Simulator erzeugt werden oder auf andere Weise (zum Beispiel durch Zeitentwicklung eines Matrix-Produkt-Zustands mithilfe des zeitabhängigen Variationsprinzips).
- Einen parametrisierten Ansatz-Circuit. Idealerweise einen mit hardwareeffizienter Konnektivität, sodass er eine vernünftige Tiefe auf der Zielhardware aufweist.
- Anfangsparameter, die in den Ansatz-Circuit eingesetzt werden, sodass der resultierende Zustand bereits eine gute Näherung des Zielzustands ist. (Dies ist im Prinzip für AQC nicht zwingend erforderlich, hilft dem Optimierer aber, einen sinnvollen Startpunkt zu haben.)
Die Technik besteht dann darin, die Parameter des Ansatz-Circuits iterativ zu optimieren, sodass der von ihm erzeugte Zustand dem Zielzustand so nahe wie möglich kommt.
Ansatz-Erzeugung
Um (2) und (3) aus der obigen Liste zu erzeugen, besitzt das Paket qiskit-addon-aqc eine Funktion generated_ansatz_from_circuit(), die einen Eingabe-Circuit aufnimmt und einen parametrisierten Ansatz sowie einen initialen Parametersatz ausgibt. Die von der Funktion zurückgegebenen Parameter sind so gewählt, dass sie, wenn sie in den Ansatz eingesetzt werden, einen Zustand erzeugen, der genau äquivalent zum Eingabe-Circuit ist, bis auf eine globale Phase.
Der von dieser Funktion erzeugte Ansatz verwendet 9 Parameter pro Zwei-Qubit-Block und basiert auf der KAK-Zerlegung, die jedes Zwei-Qubit-Gate durch drei Parameter parametrisiert, zuzüglich Einzelqubit-Rotationen. Die Einzelqubit-Rotationen werden dann als zerlegt, die jeweils drei Parameter haben. Dies führt dazu, dass der Ansatz-Circuit 3 Parameter für jeden Zwei-Qubit-Block des ursprünglichen Circuits enthält, plus 3 Parameter für eine ausgehende Einzelqubit-Rotation auf jedem der beiden Qubits (insgesamt 9 Parameter). Nach dem Hinzufügen dieser Blöcke wird der Ansatz vervollständigt, indem am Anfang des Circuits eine Schicht Einzelqubit-Rotationen auf jeden aktiven Qubit aufgesetzt wird.
Tensornetzwerk-Simulation
Um eine Beschreibung des gewünschten Zielzustands zu erhalten, verwendet dieses Addon einen Matrix-Produkt-Zustand (die einfachste Form eines Tensornetzwerks) und unterstützt die folgenden Tensornetzwerk-Simulatoren:
- MPS-Simulator in Qiskit Aer
- Quimbs eager
CircuitMPS-Simulator - Quimbs lazy
Circuit-Simulator
Der wichtigste Parameter eines Tensornetzwerks ist seine maximale Bindungsdimension, . Dieser Parameter begrenzt, wie viel Verschränkung durch ein Tensornetzwerk dargestellt werden kann, und damit, bis zu welcher Tiefe ein gegebener Circuit originalgetreu simuliert werden kann.
Bei einem Circuit mit Qubits benötigt ein Matrix-Produkt-Zustand höchstens eine Bindungsdimension von , um den Circuit bis zu beliebiger Tiefe exakt zu simulieren. Dies ist für allgemeine Utility-Scale-Circuits mit 100+ Qubits nicht erreichbar. Wenn du daher versuchst, dieses Addon mit einem kleinen Spielzeugproblem mit wenigen Qubits auszuprobieren, ist es wichtig sicherzustellen, dass . Auf diese Weise bleibt der Zielzustand klassisch simulierbar, wenn du das Problem auf einen größeren Circuit skalierst.
Nächste Schritte
- Lies die Seite zu Erste Schritte mit AQC-Tensor
- Lies das Tutorial zur Verwendung von AQC, um die Trotterisierte Zeitentwicklung zu verbessern.
Referenzen
[1] Robertson, Niall F., et al. "Approximate Quantum Compiling for Quantum Simulation: A Tensor Network based approach" arXiv preprint arXiv:2301.08609 (2023).