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

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.

  1. Installeer Python 3.6 of hoger als u dat nog niet hebt gedaan.

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

    Hiermee maakt u een nieuwe Conda-omgeving die u met het volgende kunt activeren:

    conda activate azurequantum
    
  3. Installeer het azure-quantum pakket met behulp van pip. Gebruik de --upgrade vlag om ervoor te zorgen dat u de nieuwste versie krijgt.

    pip install --upgrade azure-quantum[qiskit]
    
  4. 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.

De resource-id en locatie ophalen uit een Azure Quantum werkruimte

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}

Resultaat van Het Circuit vanKit in IonQ Simulator

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}

Resultaat van Het Circuit op IonQ QPU

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.

  1. Installeer Python 3.6 of hoger voor het geval u dat nog niet hebt gedaan.

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

    Hiermee maakt u een nieuwe Conda-omgeving die u kunt activeren met het volgende:

    conda activate azurequantum
    
  3. Installeer het azure-quantum pakket met behulp van pip. Gebruik de --upgrade vlag om ervoor te zorgen dat u de nieuwste versie krijgt.

    pip install --upgrade azure-quantum[qiskit]
    
  4. 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.

De resource-id en locatie ophalen uit een Azure Quantum werkruimte

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}

Resultaat van het Qiskit-circuit op De Api-validatie

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}

Resultaat van het Iqskit-circuit op De QPU van Deen