Snabbstart: Skicka en krets med Qiskit till Azure Quantum
Lär dig hur du använder paketet för att skicka azure-quantum Python Quantum Circuitskit till ett IonQ- eller Honeywell-kvantberäkningsmål via Azure Quantum tjänsten. Mer information finns i Quantum circuits ( Kvantkretsar).
Förutsättningar
- För att arbeta Azure Quantum behöver du en Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
- Skapa en Azure Quantum och aktivera önskad provider, Honeywell eller IonQ (eller båda), för det här scenariot. Mer information finns i Skapa en Azure Quantum arbetsyta.
Installera Python-paketet azure-quantum
Python-paketet innehåller nödvändiga funktioner för att ansluta till en Azure Quantum-arbetsyta och skicka kvantkretsar till kvantberäkningsmål som azure-quantum IonQ och Honeywell.
Installera Python 3.6 eller senare om du inte redan har gjort det.
Installera PIP och kontrollera att du har version 19.2 eller senare.
Om du använder Miniconda eller Anacondakan du också skapa en ny miljö genom att ladda ned filen environment.yml och köra följande:
conda env create -f environment.ymlDetta skapar en ny conda-miljö som du kan aktivera med följande:
conda activate azurequantumInstallera paketet
azure-quantummed pip. Använd flaggan--upgradeför att se till att hämta den senaste versionen.pip install --upgrade azure-quantum[qiskit]Starta din favoritkodredigerare eller ett interaktivt Python-verktyg, till exempel VS Code, Jupyter eller iPython.
Läsa in nödvändiga importer
Kör först följande cell för att läsa in nödvändiga importer:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Anslut till Azure Quantum tjänsten
För att ansluta Azure Quantum-tjänsten behöver programmet resurs-ID:t och platsen för din Azure Quantum arbetsyta. Logga in på ditt Azure-konto, https://portal.azure.com , gå Azure Quantum din arbetsyta och kopiera värdena från rubriken.

Klistra in värdena i följande AzureQuantumProvider konstruktor för att skapa ett provider -objekt som ansluter till Azure Quantum arbetsyta.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Visa en lista över alla backends
Nu kan du skriva ut alla serverdatorer för kvantberäkning som är tillgängliga på din arbetsyta:
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']
Köra en enkel krets
Skapa först en enkel Qiskit-krets som ska köras.
# 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
Om du snabbt vill få tillbaka ett resultat använder provider.get_backend du för att skapa ett Backend -objekt för att ansluta till IonQ-simulator-backend:
simulator_backend = provider.get_backend("ionq.simulator")
Du kan nu köra programmet via Azure Quantum tjänsten och få resultatet. Följande cell skickar ett jobb som kör kretsen med 100 bilder:
job = simulator_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
Job id 00000000-0000-0000-0000-000000000000
Om du vill övervaka jobbförloppet kan du använda Det Qiskit som importerades tidigare job_monitor för att hålla reda på ' jobbets status. Observera att det här anropet blockerar tills jobbet har slutförts:
job_monitor(job)
Job Status: job has successfully run
Om du vill vänta tills jobbet har slutförts och returnerar resultatet kör du:
result = job.result()
Detta returnerar ett qiskit.Result -objekt.
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'))])
Eftersom det här är ett objekt som är inbyggt i Qiskit-paketet kan du använda Qiskit ' s och för att visualisera result.get_counts plot_histogram resultaten. Se till att alla möjliga bitsträngsetiketter representeras genom att lägga till dem i counts .
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}

Köra på IonQ QPU
Om du vill ansluta till verklig maskinvara (en kvantprocessorenhet (QPU) anger du helt enkelt namnet på "ionq.qpu" målet för provider.get_backend metoden:
qpu_backend = provider.get_backend("ionq.qpu")
Skicka kretsen som ska köras Azure Quantum.
Anteckning
Hur lång tid det tar att köra en krets på QPU:n kan variera beroende på aktuella kötider.
Som tidigare använder du job_monitor för att hålla reda på jobbstatusen och för att rita ut plot_histogram resultaten.
# 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}

Installera Python-paketet azure-quantum
Python-paketet innehåller nödvändiga funktioner för att ansluta till en Azure Quantum-arbetsyta och skicka kvantkretsar till kvantberäkningsmål som azure-quantum IonQ och Honeywell.
Installera Python 3.6 eller senare om du inte redan har gjort det.
Installera PIP och kontrollera att du har version 19.2 eller senare.
Om du använder Miniconda eller Anacondakan du också skapa en ny miljö genom att ladda ned filen environment.yml och köra följande:
conda env create -f environment.ymlDetta skapar en ny Conda-miljö som du kan aktivera med följande:
conda activate azurequantumInstallera paketet
azure-quantummed pip. Använd flaggan--upgradeför att se till att få den senaste versionen.pip install --upgrade azure-quantum[qiskit]Starta din favoritkodredigerare eller interaktiva Python-verktyg, till exempel VS Code, Jupyter eller iPython.
Läsa in nödvändiga importer
Kör först följande cell för att läsa in nödvändiga importer:
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider
Anslut till Azure Quantum tjänsten
För att ansluta Azure Quantum tjänsten behöver programmet resurs-ID:t och platsen för din Azure Quantum arbetsyta. Logga in på ditt Azure-konto, https://portal.azure.com , gå Azure Quantum arbetsytan och kopiera värdena från rubriken.

Klistra in värdena i följande AzureQuantumProvider konstruktor för att skapa ett provider -objekt som ansluter till Azure Quantum arbetsyta.
provider = AzureQuantumProvider(
resource_id="",
location=""
)
Visa en lista över alla backends
Nu kan du skriva ut alla serverdatorer för kvantberäkning som är tillgängliga på din arbetsyta:
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']
Köra på API-valideraren
Anteckning
Honeywell API-valideraren returnerar alltid 0 vid mätning.
# 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}

Köra på en Honeywell QPU
När du har kört på API-valideraren kan du köra jobbet på en av Honeywells maskinvaruprocessorer (en kvantprocessorenhet (QPU)).
Anteckning
Den tid som krävs för att köra en krets på QPU:n kan variera beroende på aktuella kötider.
# 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}
