Erste Schritte mit Sitzungen
Sitzungen sind ein wichtiges Feature von hybridem Quantencomputing, mit dem Sie mehrere Quantencomputingaufträge zusammen gruppieren können.
In diesem Artikel wird die Architektur von Sitzungen in Hybrid Quantum Computing und die Erstellung einer neuen Sitzung erläutert.
Voraussetzungen
Zum Erstellen einer Sitzung benötigen Sie die folgenden Voraussetzungen:
Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie nicht über ein Azure-Konto verfügen, registrieren Sie sich kostenlos, und registrieren Sie sich für ein Kostenpflichtiges Abonnement.
Azure Quantum-Arbeitsbereich Weitere Informationen finden Sie unter Erstellen eines Azure Quantum-Arbeitsbereichs.
Eine Python-Umgebung mit installiertem Python und Pip.
Das Azure Quantum-Paket
azure-quantum
. Wenn Sie Qiskit oder Cirq verwenden möchten, müssen Sie dasazure-quantum
Paket mit den Tags [qiskit] oder [cirq] installieren.pip install --upgrade azure-quantum[qiskit]
Was ist eine Sitzung?
Eine Sitzung ist eine logische Gruppierung einer oder mehrerer Aufträge, die an einen einzelnen targetgesendet werden. Jede Sitzung verfügt über eine eindeutige ID, die an jeden Auftrag in dieser Sitzung angefügt ist.
In Sitzungen kann die Client-Computeressource in die Cloud verschoben werden, was zu geringerer Latenz und der Möglichkeit führt, die Ausführung des Quantenkreises mit verschiedenen Parametern zu wiederholen. Aufträge können logisch in einer Sitzung gruppiert werden, und die Aufträge in dieser Sitzung können über Nichtsitzungsaufträge priorisiert werden. Obwohl die Qubit-Zustände nicht zwischen Aufträgen bestehen, ermöglicht eine Sitzung kürzere Warteschlangenzeiten für Aufträge und längere Ausführungsprobleme.
Sitzungen ermöglichen es Ihnen, mehrere Quantencomputingaufträge mit der Möglichkeit zu organisieren, klassischen Code zwischen Quantenaufträgen auszuführen. Sie können komplexe Algorithmen ausführen, um Ihre individuellen Quantencomputingaufträge besser zu organisieren und nachzuverfolgen.
Ein wichtiges Benutzerszenario, in dem Sie Aufträge in einer Sitzung kombinieren möchten, ist parametrisierte Quantenalgorithmen, bei denen die Ausgabe eines Quantencomputingauftrags die Parameter des nächsten Quantencomputingauftrags informiert. Die häufigsten Beispiele für diesen Algorithmustyp sind Variational Quantum Eigensolvers (VQE) und Quantum Approximate Optimization Algorithms (QAOA).
Unterstützte Hardware
Sitzungen werden für alle Quantencomputing-Hardwareanbieter unterstützt. In einigen Fällen werden aufträge, die innerhalb einer Sitzung übermittelt werden, in der Warteschlange dieses targetVorgangs priorisiert. Weitere Informationen finden Sie unter Target Verhalten.
So erstellen Sie eine Sitzung
Führen Sie die folgenden Schritte aus, um eine Sitzung zu erstellen:
In diesem Beispiel wird gezeigt, wie Sie eine Sitzung mit Q# Inlinecode mithilfe eines Jupyter-Notizbuchs in Visual Studio Code erstellen. Sie können auch Sitzungen mit einem Python-Programm erstellen, das ein angrenzendes Q# Programm aufruft.
Hinweis
Sitzungen werden mit Python verwaltet, auch wenn Inlinecode ausgeführt wird Q# .
Wählen Sie in VS Code die Optionen Ansicht > Befehlspalette und dann Erstellen aus: Verwenden von Jupyter Notebook.
In der oberen rechten Ecke erkennt und zeigt VS Code die Version von Python und die virtuelle Python-Umgebung an, die für das Notizbuch ausgewählt wurde. Wenn Sie über mehrere Python-Umgebungen verfügen, müssen Sie möglicherweise einen Kernel mit der Kernelauswahl oben rechts auswählen. Wenn keine Umgebung erkannt wurde, finden Sie Informationen zum Einrichten unter Jupyter-Notizbücher in VS Code .
Führen Sie in der ersten Zelle des Notizbuchs
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
Klicken Sie auf +Code , um eine neue Zelle im Notizbuch hinzuzufügen und Python SDK zu importieren
qsharp
.import qsharp
Wählen Sie das Quantum target Ihrer Wahl aus. In diesem Beispiel verwenden Sie den IonQ-Simulator als target.
target = workspace.get_targets("ionq.simulator")
Wählen Sie die Konfigurationen des target Profils, entweder
Base
, ,Adaptive_RI
oderUnrestricted
.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
Hinweis
Adaptive_RI
target Profilaufträge werden derzeit auf Quantinuum targetsunterstützt. Weitere Informationen finden Sie unter Integrated Hybrid Quantum Computing.Schreiben Sie Ihr Q# Programm. Beispielsweise generiert das folgende Q# Programm ein zufälliges Bit. Um die Verwendung von Eingabeargumenten zu veranschaulichen, verwendet dieses Programm eine ganze Zahl
n
und ein Array von Winkelnangle
als Eingabe.%%qsharp import Std.Measurement.*; import Std.Arrays.*; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
Als Nächstes erstellen Sie eine Sitzung. Angenommen, Sie möchten den Vorgang dreimal ausführen
GenerateRandomBit
, sodass Sietarget.submit
den Vorgang mit den Q#target
Daten übermitteln und den Code dreimal wiederholen – in einem realen Szenario möchten Sie möglicherweise verschiedene Programme anstelle desselben Codes übermitteln.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Wichtig
Beim Übergeben von Argumenten als Parameter an den Auftrag werden sie beim Aufrufen
qsharp.compile
in den Q# Ausdruck formatiert. Dies bedeutet, dass Sie darauf achten müssen, ihre Argumente als Q# Objekte zu formatieren. In diesem Beispiel, da Arrays in Python bereits als [Element0, Element1, ...] gedruckt werden, stimmen die Eingabeargumente mit der Q# Formatierung überein. Für andere Python-Datenstrukturen benötigen Sie möglicherweise mehr Handhabung, um die Zeichenfolgenwerte auf Q# kompatible Weise abzurufen.Nachdem Sie eine Sitzung erstellt haben, können
workspace.list_session_jobs
Sie eine Liste aller Aufträge in der Sitzung abrufen. Weitere Informationen finden Sie unter Verwalten von Sitzungen.
Verhalten von Target
Jeder Quantenhardwareanbieter definiert ihre eigenen Heuristiken, um die Priorisierung von Aufträgen innerhalb einer Sitzung optimal zu verwalten.
Quantinuum
Wenn Sie sich entscheiden, Aufträge innerhalb einer Sitzung an einen Quantinuum targetzu übermitteln, hat Ihre Sitzung exklusiven Zugriff auf die Hardware, solange Sie Aufträge innerhalb einer Minute voneinander in die Warteschlange stellen. Danach werden Ihre Aufträge mit der Standard-Warteschlangen- und Priorisierungslogik akzeptiert und verarbeitet.