Snabbstart: Skicka en krets med Cirq för att Azure Quantum
Lär dig hur du använder -paketet för att skicka Cirq-kvantkretsar till ett azure-quantum Python 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 i 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 de funktioner som krävs 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[cirq]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 azure.quantum.cirq import AzureQuantumService
Anslut till Azure Quantum tjänsten
För att ansluta till Azure Quantum-tjänsten behöver programmet resurs-ID:t och platsen för din Azure Quantum arbetsyta. Logga in på ditt https://portal.azure.com Azure-konto, , gå Azure Quantum arbetsytan och kopiera värdena från rubriken.

Klistra in värdena i följande AzureQuantumService konstruktor för att skapa ett service -objekt som ansluter till Azure Quantum arbetsyta.
Du kan också ange ett standardmål, i det här fallet IonQ-simulatorn:
service = AzureQuantumService(
resource_id="",
location="",
default_target="ionq.simulator"
)
Lista alla mål
Nu kan du lista alla mål som du har åtkomst till, inklusive aktuell kötid och tillgänglighet.
print(service.targets())
[<Target name="ionq.qpu", avg. queue time=345 s, Available>,
<Target name="ionq.simulator", avg. queue time=4 s, Available>,
<Target name="honeywell.hqs-lt-s1", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s2", avg. queue time=313169 s, Available>,
<Target name="honeywell.hqs-lt-s2-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-sim", avg. queue time=1062 s, Available>]
Köra en enkel krets
Skapa sedan en enkel Cirq-krets som ska köras. Den här kretsen använder kvadratroten av X-grinden, som är inbyggd i IonQ-maskinvarusystemet.
import cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.X(q0)**0.5, # Square root of X
cirq.CX(q0, q1), # CNOT
cirq.measure(q0, q1, key='b') # Measure both qubits
)
print(circuit)
0: ───X^0.5───@───M────────
│ │
1: ───────────X───M────────
Nu kan du köra programmet via Azure Quantum-tjänsten och få resultatet. Följande cell skickar ett jobb (till IonQ-standardsimulatorn) som kör kretsen med 100 bilder, väntar tills jobbet har slutförts och returnerar resultatet.
result = service.run(program=circuit, repetitions=100)
Detta returnerar ett cirq.Result -objekt.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
Köra på IonQ QPU
Föregående jobb kördes på standardsimulatorn, "ionq.simulator" . Du kan dock även köra den på IonQ:s maskinvaruprocessor (en kvantprocessorenhet (QPU)). Om du vill köra på IonQ QPU anger "ionq.qpu" du som target argument:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Detta returnerar återigen ett cirq.Result -objekt.
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
Asynkron modell med jobb
För långvariga kretsar kan det vara användbart att köra dem asynkront.
Metoden service.create_job returnerar ett Job -objekt som du kan använda för att hämta resultatet när jobbet har körts.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
Om du vill kontrollera jobbstatusen använder du job.status() :
print(job.status())
'completed'
Om du vill vänta tills jobbet har slutförts och sedan få resultatet använder du blockerings-anropet job.results() :
result = job.results()
print(result)
00: 0.5
11: 0.5
Observera att detta inte returnerar ett cirq.Result -objekt. I stället returneras ett resultatobjekt som är specifikt för IonQ-simulatorn och som använder tillståndssannabilities i stället för bilddata.
type(result)
cirq_ionq.results.SimulatorResult
Om du vill konvertera detta till cirq.Result ett -objekt använder du result.to_cirq_result() :
print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100
Installera Python-paketet azure-quantum
Python-paketet innehåller de funktioner som krävs 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[cirq]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 azure.quantum.cirq import AzureQuantumService
Anslut till Azure Quantum tjänsten
För att ansluta till Azure Quantum-tjänsten behöver programmet resurs-ID:t och platsen för din Azure Quantum arbetsyta. Logga in på ditt https://portal.azure.com Azure-konto, , gå Azure Quantum arbetsytan och kopiera värdena från rubriken.

Klistra in värdena i följande AzureQuantumService konstruktor för att skapa ett service -objekt som ansluter till Azure Quantum arbetsyta.
Du kan också ange ett standardmål:
from azure.quantum.cirq import AzureQuantumService
service = AzureQuantumService(
resource_id="",
location="",
default_target="honeywell.hqs-lt-s1-apival"
)
Lista alla mål
Nu kan du lista alla mål som du har åtkomst till, inklusive aktuell kötid och tillgänglighet.
print(service.targets())
[<Target name="ionq.qpu", avg. queue time=345 s, Available>,
<Target name="ionq.simulator", avg. queue time=4 s, Available>,
<Target name="honeywell.hqs-lt-s1", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s2", avg. queue time=313169 s, Available>,
<Target name="honeywell.hqs-lt-s2-apival", avg. queue time=0 s, Available>,
<Target name="honeywell.hqs-lt-s1-sim", avg. queue time=1062 s, Available>]
Köra en enkel krets på API-valideraren
Anteckning
Honeywell API-valideringsmålet returnerar alltid 0 vid mätning.
Skapa sedan en enkel Cirq-krets som ska köras.
import cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.H(q0), # Hadamard
cirq.CNOT(q0, q1), # CNOT
cirq.measure(q0, q1, key='b') # Measure both qubits
)
print(circuit)
0: ───H───@───M────────
│ │
1: ───────X───M────────
Nu kan du köra programmet via Azure Quantum-tjänsten och få resultatet. Följande cell skickar ett jobb som kör kretsen med 100 bilder, väntar tills jobbet har slutförts och returnerar resultatet.
result = service.run(program=circuit, repetitions=100)
Detta returnerar ett cirq.Result -objekt.
print(result)
b=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Du kan rita resultatet i ett histogram:
pl.hist(result.data)
pl.ylabel("Counts")
pl.xlabel("Result")
Asynkront arbetsflöde med jobb
För långvariga kretsar kan det vara användbart att köra dem asynkront.
Metoden service.create_job returnerar ett Job -objekt som du kan använda för att hämta resultatet när jobbet har körts.
job = service.create_job(
program=circuit,
repetitions=100
)
Om du vill kontrollera jobbstatusen använder du job.status() :
print(job.status())
'Waiting'
Om du vill vänta tills jobbet har slutförts och sedan få resultatet använder du blockerings-anropet job.results() :
result = job.results()
print(result)
{'m_b': ['00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00', '00']}
Observera att detta inte returnerar ett cirq.Result -objekt. I stället returneras en ordlista med bitstringsmåttresultat som indexerats av måttnyckeln.