Freigeben über


So übermitteln Sie Qiskit-Programme mit dem QDK an Azure Quantum

Sie können Qiskit-Programme zur Ausführung auf Azure Quantum targets mit dem Microsoft Quantum Development Kit (QDK) übermitteln. Sie können Qiskit-Programme auch auf Ihrem lokalen Computer mit dem integrierten Sparse-Simulator des QDK ausführen. Der QDK unterstützt sowohl Version 1 als auch Version 2 von Qiskit.

In diesem Artikel erfahren Sie, wie Sie Qiskit-Programme mit der QDK-Bibliothek Python aus einem Jupyter-Notizbuch in Visual Studio Code (VS Code) ausführen.

Hinweis

Es ist eine bewährte Methode, Ihr Quantenprogramm auf einem Simulator target auszuführen, bevor Sie einen Auftrag zur Ausführung auf einem Quantencomputer targeteinreichen. Jeder Azure Quantum-Anbieter bietet einen oder mehrere kostenlose Simulatoren targetsan.

Voraussetzungen

Um Qiskit-Aufträge an Azure Quantum zu übermitteln und Qiskit-Programme auf dem lokalen Sparsesimulator auszuführen, müssen Sie folgendes haben:

  • Ein Azure Quantum-Arbeitsbereich in Ihrem Azure-Abonnement. Zur Erstellung eines Arbeitsbereichs, siehe bitte Erstellen eines Azure Quantum Arbeitsbereichs.

  • Eine lokale Python Umgebung (Version 3.10 oder höher) mit Python und Pip installiert.

  • Visual Studio Code (VS Code) mit den Erweiterungen Python und Jupyter installiert.

  • Die qdkPython Bibliothek mit den azure und qiskit Extras sowie dem ipykernel Paket.

    pip install --upgrade "qdk[azure,qiskit]" ipykernel
    

Einen Auftrag an ein Azure Quantum target in Ihrem Quantum-Arbeitsbereich übermitteln

Führen Sie die folgenden Schritte aus, um ein Qiskit-Programm zu übermitteln, das auf einem Azure Quantum targetausgeführt werden soll:

  1. Öffnen Sie im VS Code das Menü "Ansicht" , und wählen Sie "Befehlspalette" aus.

  2. Geben Sie ein und wählen Sie Erstellen: Neues Jupyter-Notizbuch aus. Eine leere Jupyter-Notizbuchdatei wird auf einer neuen Registerkarte geöffnet.

  3. Schreiben Sie in der ersten Zelle Ihres Notizbuchs einen Qiskit-Schaltkreis. Verwenden Sie z. B. den folgenden Schaltkreis:

    from qiskit import QuantumCircuit
    
    # Create a Quantum circuit that acts on the q register
    circuit = QuantumCircuit(3, 3)
    circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.cx(1, 2)
    circuit.measure([0, 1, 2], [0, 1, 2])
    
    # Print out the circuit
    circuit.draw()
    
  4. Stellen Sie eine Verbindung mit Ihrem Azure Quantum-Arbeitsbereich her.

    from qdk.azure import Workspace 
    
    workspace = Workspace(resource_id="") # Add the resource ID of your workspace
    
  5. Erhalten Sie die Anbieter aus Ihrem Arbeitsbereich, die Qiskit-Programme ausführen können, und drucken Sie die verfügbaren targets für jeden Anbieter.

    from qdk.azure.qiskit import AzureQuantumProvider
    
    provider = AzureQuantumProvider(workspace)
    
    for backend in provider.backends():
        print("- " + backend.name)
    
  6. Legen Sie das Azure Quantum-Backend mit target fest, zu dem Sie Ihren Auftrag übermitteln möchten. Der folgende Code richtet z. B. ein Back-End ein, um Ihr Programm als Simulation im Quantinuum H2-1-Emulator auszuführen:

    backend = provider.get_backend('quantinuum.sim.h2-1e')
    
  7. Führen Sie Ihr Programm auf dem Azure Quantum target aus, und erhalten Sie die Ergebnisse. Der folgende Code führt 1.000 Durchläufe Ihres Programms auf den angegebenen Code target aus und speichert die Ergebnisse.

    job = backend.run(circuit, shots=1000)
    
    result = job.result()
    print(result)
    

Überprüfen Sie Ihre Arbeitsergebnisse

Das result Objekt enthält Informationen zu Ihren Arbeitsergebnissen, wie das Messergebnis für jeden Schuss sowie die Gesamtanzahl und Wahrscheinlichkeiten für jede mögliche Messung.

Um ein Histogramm von Messergebnissen zu erstellen, übergeben Sie den Schaltkreis an die get_counts Methode, und übergeben Sie dann die Anzahl an die plot_histogram Funktion aus dem qiskit.visualization Modul. Mit dem folgenden Code wird das counts Objekt neu formatiert, um alle möglichen Messergebnisse anzuzeigen:

from qiskit.visualization import plot_histogram

print("Job ID:", job.job_id())

counts = result.get_counts(circuit)
print('Counts:', counts)

# Reformat counts to include all possible measurement outcomes, even those with zero counts
full_counts = {format(n, "03b"): 0 for n in range(8)}
full_counts.update(counts)

plot_histogram(full_counts)

Hinweis

Um die plot_histogram Funktion von Qiskit zu verwenden, müssen Sie Matplotlib installieren.

pip install matplotlib

Qiskit-Auftragsergebnisse für Programme mit Qubit-Verlust

Einige Arten von Quantenhardware können während einer Programmausführung qubit-Verlust erleben. Wenn Qubit-Verlust irgendwann während eines Durchlaufs für ein Qiskit-Programm auftritt, wird dieser Durchlauf aus den Azure Quantum-Auftragsergebnissen entfernt. Wenn beispielsweise Qubit-Verlust in 10 von 200 Versuchen auftritt, haben die Job-Ergebnisse nur 190 Messungen insgesamt.

Die rohen Ergebnisse für alle Aufnahmen, einschließlich Aufnahmen, bei denen qubit-Verlust aufgetreten ist, sind weiterhin im results Objekt verfügbar. Der folgende Code ruft beide Ergebnisgruppen ab:

# Get results only for shots without qubit loss
print('Counts:', result.results[0].data.counts)
print('Probabilities:', result.results[0].data.probabilities)
print('Memory:', result.results[0].data.memory)

# Get the raw total shot results
print('Raw counts:', result.results[0].data.raw_counts)
print('Raw probabilities:', result.results[0].data.raw_probabilities)
print('Raw memory:', result.results[0].data.raw_memory)

Bei Aufträgen oder targets ohne Qubitverlust sind das Standardergebnis und die Rohdaten identisch.

Hinweis

Das memory Attribut für Qiskit-Auftragsergebnisse ist eine Liste des Messergebnisses für jeden Schuss.

Führen Sie einen Job im QDK-Sparsesimulator aus

Der QDK enthält einen integrierten Sparsesimulator, mit dem Sie Qiskit-Programme auf Ihrem lokalen Computer ausführen können, anstatt einen Auftrag an Azure Quantum zu übermitteln. Verwenden Sie um ein Qiskit-Programm auf dem Sparse Simulator auszuführen, QSharpBackend um eine Instanz eines Backend-Objekts zu erstellen.

from qsharp.interop.qiskit import QSharpBackend

backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()
print(counts)

Nächste Schritte