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.

  1. Installera Python 3.6 eller senare om du inte redan har gjort det.

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

    Detta skapar en ny conda-miljö som du kan aktivera med följande:

    conda activate azurequantum
    
  3. Installera paketet azure-quantum med pip. Använd flaggan --upgrade för att se till att hämta den senaste versionen.

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

Så här hämtar du resurs-ID:t och platsen från en Azure Quantum arbetsyta

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}

Result för Entitetskit-krets i IonQ-simulatorn

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}

Result för En IonQ QPU med En IonQ-krets

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.

  1. Installera Python 3.6 eller senare om du inte redan har gjort det.

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

    Detta skapar en ny Conda-miljö som du kan aktivera med följande:

    conda activate azurequantum
    
  3. Installera paketet azure-quantum med pip. Använd flaggan --upgrade för att se till att få den senaste versionen.

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

Så här hämtar du resurs-ID:t och platsen från en Azure Quantum arbetsyta

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}

Resultat av En Qiskit-krets på Honeywell API-valideraren

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}

Qiskit-kretsresultat på Honeywell QPU