Interaktives Quantencomputing: Sitzungen

In diesem Artikel wird die Architektur des interaktiven Quantencomputings( auch als Sitzungen bezeichnet) und das Erstellen einer neuen Sitzung erläutert.

In diesem Modell des hybriden Quantencomputings kann die Clientcomputeressource in die Cloud verschoben werden, was zu einer geringeren Latenz und der Möglichkeit führt, die Ausführung der Quantenschaltung mit verschiedenen Parametern zu wiederholen. Aufträge können logisch in einer Sitzung gruppiert werden, und die Aufträge in dieser Sitzung können gegenüber Nichtsitzungsaufträgen priorisiert werden. Obwohl die Qubitzustände zwischen Aufträgen nicht beibehalten werden, ermöglicht eine Sitzung kürzere Warteschlangenzeiten für Aufträge und länger ausgeführte Probleme.

Interaktives Quantencomputing

Voraussetzungen

Um eine Sitzung zu erstellen, benötigen Sie die folgenden Voraussetzungen:

  • Ein Azure-Konto mit einem aktiven Abonnement. Wenn Sie kein Azure-Konto besitzen, registrieren Sie sich kostenlos, und registrieren Sie sich für ein Abonnement mit nutzungsbasierter Bezahlung.

  • Azure Quantum-Arbeitsbereich Weitere Informationen finden Sie unter Erstellen eines Azure Quantum-Arbeitsbereichs.

  • Eine Python-Umgebung, in der Python und Pip installiert sind.

  • 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 von einem oder mehreren Aufträgen, die an eine einzelne targetübermittelt werden. Jede Sitzung verfügt über eine eindeutige ID, die an jeden Auftrag in dieser Sitzung angefügt ist.

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, sind 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 von allen Quantencomputing-Hardwareanbietern unterstützt, derzeit IonQ, Quantinuum und Rigetti. In einigen Fällen werden aufträge, die innerhalb einer Sitzung übermittelt werden, in der Warteschlange dieser targetpriorisiert. Weitere Informationen finden Sie unter Zielverhalten.

Erste Schritte mit Sitzungen

Sitzungen werden mit Python verwaltet und können für alle QIR-Quantenprogramme wie Q#, Qiskit und Cirq-Programme erstellt werden.

In diesem Beispiel wird gezeigt, wie Sie eine Sitzung mit Q# Inlinecode mithilfe einer Jupyter Notebook in Visual Studio Code erstellen. Sie können Sitzungen auch 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 Befehlspalette anzeigen > und dann Erstellen: Neue Jupyter Notebook aus.

  2. Oben rechts erkennt VS Code die Version von Python und die virtuelle Python-Umgebung, die für das Notebook ausgewählt wurde, und zeigt sie an. Wenn Sie über mehrere Python-Umgebungen verfügen, müssen Sie möglicherweise einen Kernel mithilfe der Kernelauswahl oben rechts auswählen. Wenn keine Umgebung erkannt wurde, finden Sie unter Jupyter Notebooks in VS Code Setupinformationen.

  3. Führen Sie in der ersten Zelle des Notebooks aus.

    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 Notebook hinzuzufügen und das 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 Ihres target Profils aus, entweder Base oder Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
    
  7. Schreiben Sie Ihr Q# Programm. Das folgende Q# Programm generiert beispielsweise ein zufälliges Bit. Um die Verwendung von Eingabeargumenten zu veranschaulichen, verwendet dieses Programm eine ganze Zahl, nund ein Array von Winkeln, angle, als Eingabe.

    %%qsharp
    open Microsoft.Quantum.Measurement;
    open Microsoft.Quantum.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 . Verwenden target.submit Sie also , um den Q# Vorgang mit den target Daten zu übermitteln und den Code dreimal zu wiederholen. In einem realen Szenario möchten Sie möglicherweise unterschiedliche 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

    Wenn Argumente als Parameter an den Auftrag übergeben, werden sie beim Aufrufen qsharp.compilevon in den Q# Ausdruck formatiert. Dies bedeutet, dass Sie darauf achten müssen, Ihre Argumente als Q# Objekte zu formatieren. Da Arrays in Python in diesem Beispiel bereits als [item0, item1, ...] gedruckt werden, stimmen die Eingabeargumente mit der Q# Formatierung überein. Für andere Python-Datenstrukturen benötigen Sie möglicherweise mehr Behandlung, um die Zeichenfolgenwerte auf kompatible Weise in das Q# -Objekt einzufügen.

  9. Nachdem Sie eine Sitzung erstellt haben, können Sie verwenden workspace.list_session_jobs , um eine Liste aller Aufträge in der Sitzung abzurufen. Weitere Informationen finden Sie unter Verwalten von Sitzungen.

Überwachungssitzungen

Sie können das Blatt Auftragsverwaltung in Ihrem Quantum-Arbeitsbereich verwenden, um alle übermittelten Elemente der obersten Ebene anzuzeigen, einschließlich Sitzungen und einzelnen Aufträgen, die keiner Sitzung zugeordnet sind.

  1. Wählen Sie in Ihrem Quantum-Arbeitsbereich das Blatt Auftragsverwaltung aus.
  2. Identifizieren Sie die Aufträge vom Typ Sitzung. In dieser Ansicht können Sie die eindeutige ID einer Sitzung in der Spalte ID anzeigen und deren Status überwachen. Die Zustände einer Sitzung sind:
    • Wartend: Aufträge innerhalb der Sitzung werden ausgeführt.
    • Erfolgreich: Die Sitzung wurde erfolgreich beendet.
    • TimeOut: Wenn innerhalb der Sitzung 10 Minuten lang kein neuer Auftrag übermittelt wird, tritt für diese Sitzung ein Timeout auf. Weitere Informationen finden Sie unter Sitzungstimeouts.
    • Fehler: Wenn ein Auftrag innerhalb einer Sitzung fehlschlägt, wird diese Sitzung beendet und meldet die status Fehler. Weitere Informationen finden Sie unter Auftragsfehlerrichtlinie innerhalb von Sitzungen.
  3. Klicken Sie auf den Namen einer Sitzung, um weitere Details anzuzeigen.
  4. Sie können die Liste aller Aufträge innerhalb der Sitzung anzeigen und deren status überwachen.

Zielverhalten

Jeder Quantenhardwareanbieter definiert seine eigenen Heuristiken, um die Priorisierung von Aufträgen innerhalb einer Sitzung am besten zu verwalten.

Quantinuum

Wenn Sie Aufträge innerhalb einer Sitzung an ein Quantinuum targetü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 akzeptiert und mit der Standardwarteschlangen- und Priorisierungslogik behandelt.