Quickstart: Een circuit met Qiskit verzenden naar Azure Quantum
Meer informatie over het gebruik van het pakket om Quantum Circuits van DeKit te verzenden naar een azure-quantum Python IonQ- of Quantum Quantum Computing-doel via de Azure Quantum service. Zie Kwantumcircuits voor meer informatie.
Vereisten
- Als u in Azure Quantum wilt werken, hebt u een Azure-abonnement nodig. Als u nog geen abonnement op Azure hebt, maakt u een gratis account aan.
- Maak een Azure Quantum werkruimte en schakel voor dit scenario de provider van uw voorkeur In, Of IonQ (of beide), in. Zie Create an Azure Quantum workspace (Een werkruimte Azure Quantum maken) voor meer informatie.
Het Python-pakket voor azure-quantum installeren
Het Python-pakket bevat de benodigde functionaliteit voor het maken van verbinding met een Azure Quantum-werkruimte en het verzenden van kwantumcircuits naar de kwantumcomputingdoelen zoals azure-quantum IonQ en Python.
Installeer Python 3.6 of hoger als u dat nog niet hebt gedaan.
Installeer PIP en zorg ervoor dat u versie 19.2 of hoger hebt.
Als u Miniconda of Anacondagebruikt, kunt u desgewenst een nieuwe omgeving maken door het bestand environment.yml te downloaden en het volgende uit te gaan:
conda env create -f environment.ymlHiermee maakt u een nieuwe Conda-omgeving die u met het volgende kunt activeren:
conda activate azurequantumInstalleer het
azure-quantumpakket met behulp van pip. Gebruik de--upgradevlag om ervoor te zorgen dat u de nieuwste versie krijgt.pip install --upgrade azure-quantum[qiskit]Start uw favoriete code-editor of interactief Python-hulpprogramma, zoals VS Code, Jupyter of iPython.
De vereiste importen laden
Voer eerst de volgende cel uit om de vereiste imports te laden:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Verbinding maken aan de Azure Quantum service
Als u verbinding wilt maken met Azure Quantum-service, heeft uw programma de resource-id en de locatie van uw Azure Quantum nodig. Meld u aan bij uw Azure-account, , navigeer naar Azure Quantum werkruimte https://portal.azure.com en kopieer de waarden uit de header.

Plak de waarden in de volgende AzureQuantumProvider constructor om een provider -object te maken dat verbinding maakt met Azure Quantum werkruimte.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Een lijst met alle back-enden maken
U kunt nu alle back-enden van kwantumcomputing afdrukken die beschikbaar zijn in uw werkruimte:
print([backend.name() for backend in provider.backends()])
['ionq.qpu', 'ionq.simulator', 'honeywell.hqs-lt-s1', 'honeywell.hqs-lt-s1-apival', 'honeywell.hqs-lt-s2', 'honeywell.hqs-lt-s2-apival', 'honeywell.hqs-lt-s1-sim']
Een eenvoudig circuit uitvoeren
Maak eerst een eenvoudig Qiskit-circuit om uit te voeren.
# Create a Quantum Circuit acting 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()
┌───┐ ┌─┐
q_0: ┤ H ├──■───────┤M├──────
└───┘┌─┴─┐ └╥┘┌─┐
q_1: ─────┤ X ├──■───╫─┤M├───
└───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
└───┘ ║ ║ └╥┘
c: 3/════════════════╩══╩══╩═
0 1 2
Als u snel een resultaat wilt terug krijgen, gebruikt u om een -object te maken provider.get_backend om verbinding te maken met de Backend back-end van de IonQ Simulator:
simulator_backend = provider.get_backend("ionq.simulator")
U kunt het programma nu uitvoeren via de Azure Quantum service en het resultaat krijgen. De volgende cel verstuurt een taak die het circuit met 100 opnamen wordt uitgevoerd:
job = simulator_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
Job id 00000000-0000-0000-0000-000000000000
Als u de voortgang van de taak wilt controleren, kunt u de Eerder geïmporteerdeKit gebruiken om de status van de taak job_monitor ' bij te houden. Houd er rekening mee dat deze aanroep wordt geblokkeerd totdat de taak is voltooid:
job_monitor(job)
Job Status: job has successfully run
Voer het volgende uit om te wachten tot de taak is voltooid en de resultaten te retourneren:
result = job.result()
Hiermee wordt een qiskit.Result -object retourneert.
type(result)
qiskit.result.result.Result
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=100, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 50, '111': 50}, probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(meas_map='[0, 1, 2]', name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
Omdat dit een object is dat is eigen aan hetKit-pakket, kunt u DeenKit en gebruiken ' om de resultaten te result.get_counts plot_histogram visualiseren. Voeg deze toe aan om ervoor te zorgen dat alle mogelijke bitstringlabels worden counts weergegeven.
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 50, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 50}

Uitvoeren op IonQ QPU
Als u verbinding wilt maken met echte hardware (een Quantum Processor Unit (QPU), geeft u de naam van het doel op voor de methode "ionq.qpu" provider.get_backend :
qpu_backend = provider.get_backend("ionq.qpu")
Verzend het circuit om te worden uitgevoerd op Azure Quantum.
Notitie
De tijd die nodig is om een circuit op de QPU uit te voeren, kan variëren, afhankelijk van de huidige wachtrijtijden.
Gebruik net als voorheen job_monitor om de taakstatus bij te houden en plot_histogram de resultaten te plotten.
# Submit the circuit to run on Azure Quantum
qpu_job = qpu_backend.run(circuit, shots=1024)
job_id = qpu_job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(qpu_job)
# Get the job results (this method also waits for the Job to complete):
result = qpu_job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'0': 505, '1': 6, '2': 1, '3': 1, '4': 1, '5': 10, '6': 11, '7': 488}, probabilities={'0': 0.4932, '1': 0.0059, '2': 0.001, '3': 0.001, '4': 0.001, '5': 0.0098, '6': 0.0117, '7': 0.4766}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
{'000': 505, '001': 6, '010': 1, '011': 1, '100': 1, '101': 10, '110': 11, '111': 488}

Het Python-pakket voor azure-quantum installeren
Het Python-pakket bevat de benodigde functionaliteit voor het maken van verbinding met een Azure Quantum-werkruimte en het verzenden van kwantumcircuits naar de kwantumcomputingdoelen zoals azure-quantum IonQ en Python.
Installeer Python 3.6 of hoger voor het geval u dat nog niet hebt gedaan.
Installeer PIP en zorg ervoor dat u versie 19.2 of hoger hebt.
Als u Miniconda of Anacondagebruikt, kunt u eventueel een nieuwe omgeving maken door het bestand environment.yml te downloaden en het volgende uit te gaan:
conda env create -f environment.ymlHiermee maakt u een nieuwe Conda-omgeving die u kunt activeren met het volgende:
conda activate azurequantumInstalleer het
azure-quantumpakket met behulp van pip. Gebruik de--upgradevlag om ervoor te zorgen dat u de nieuwste versie krijgt.pip install --upgrade azure-quantum[qiskit]Start uw favoriete code-editor of interactief Python-hulpprogramma, zoals VS Code, Jupyter of iPython.
De vereiste importen laden
Voer eerst de volgende cel uit om de vereiste imports te laden:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Verbinding maken naar de Azure Quantum service
Als u verbinding wilt maken met Azure Quantum-service, heeft uw programma de resource-id en de locatie van uw Azure Quantum nodig. Meld u aan bij uw Azure-account, https://portal.azure.com , navigeer naar Azure Quantum werkruimte en kopieer de waarden uit de header.

Plak de waarden in de volgende AzureQuantumProvider constructor om een provider object te maken dat verbinding maakt met uw Azure Quantum werkruimte.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Een lijst met alle back-enden maken
U kunt nu alle back-enden voor kwantumcomputing afdrukken die beschikbaar zijn in uw werkruimte:
print([backend.name() for backend in provider.backends()])
['ionq.simulator', 'ionq.qpu', 'honeywell.hqs-lt-s1', 'honeywell.hqs-lt-s1-apival', 'honeywell.hqs-lt-s1-sim']
Uitvoeren op de API-validatie
Notitie
De Back-of-the-validatie-back-en-api van DenAtor retourneren altijd 0 bij meting.
# Get Honeywell's API validator backend:
apival_backend = provider.get_backend("honeywell.hqs-lt-s1-apival")
# Create a Quantum Circuit acting 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()
┌───┐ ┌─┐
q_0: ┤ H ├──■───────┤M├──────
└───┘┌─┴─┐ └╥┘┌─┐
q_1: ─────┤ X ├──■───╫─┤M├───
└───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
└───┘ ║ ║ └╥┘
c: 3/════════════════╩══╩══╩═
0 1 2
# Submit the circuit to run on Azure Quantum
job = apival_backend.run(circuit, count=1024)
job_id = job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(job)
# Get the job results (this method also waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='honeywell.hqs-lt-s1-apival', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 1024}, probabilities={'000': 1.0}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 1024, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 0}

Uitvoeren op een QPU voor Een Uur
Nadat de API-validatie is uitgevoerd, kunt u uw taak uitvoeren op een van de hardwareprocessors vanCore (een Quantum Processor Unit (QPU)).
Notitie
De tijd die nodig is om een circuit op de QPU uit te voeren, kan variëren, afhankelijk van de huidige wachtrijtijden.
# Get Honeywell's QPU backend:
qpu_backend = provider.get_backend("honeywell.hqs-lt-s1")
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, count=500)
job_id = job.id()
print("Job id", job_id)
# Monitor job progress and wait until complete:
job_monitor(job)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
# Get the job results (this method also waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Result(backend_name='honeywell.hqs-lt-s1-apival', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'011': 16, '010': 5, '001': 1, '000': 500, '111': 471, '101': 6, '100': 17, '110': 8}, probabilities={'011': 0.015625, '010': 0.0048828125, '001': 0.0009765625, '000': 0.48828125, '111': 0.4599609375, '101': 0.005859375, '100': 0.0166015625, '110': 0.0078125}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 500, '001': 1, '010': 5, '011': 16, '100': 17, '101': 6, '110': 8, '111': 471}
