Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 denazureundqiskitExtras sowie demipykernelPaket.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:
Öffnen Sie im VS Code das Menü "Ansicht" , und wählen Sie "Befehlspalette" aus.
Geben Sie ein und wählen Sie Erstellen: Neues Jupyter-Notizbuch aus. Eine leere Jupyter-Notizbuchdatei wird auf einer neuen Registerkarte geöffnet.
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()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 workspaceErhalten 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)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')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)