Freigeben über


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 das azure-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# .

  1. Wählen Sie in VS Code die Optionen Ansicht > Befehlspalette und dann Erstellen aus: Verwenden von Jupyter Notebook.

  2. 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 .

  3. 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"
    )
    
  4. Klicken Sie auf +Code , um eine neue Zelle im Notizbuch hinzuzufügen und Python SDK zu importieren qsharp .

    import qsharp
    
  5. 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")
    
  6. Wählen Sie die Konfigurationen des target Profils, entweder Base, , Adaptive_RIoder Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Hinweis

    Adaptive_RItarget Profilaufträge werden derzeit auf Quantinuum targetsunterstützt. Weitere Informationen finden Sie unter Integrated Hybrid Quantum Computing.

  7. 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 nund ein Array von Winkeln angleals 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;
    }
    
  8. Als Nächstes erstellen Sie eine Sitzung. Angenommen, Sie möchten den Vorgang dreimal ausführen GenerateRandomBit , sodass Sie target.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.compilein 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.

  9. 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.