Quickstart: Een circuit met Cirq verzenden naar Azure Quantum
Meer informatie over het gebruik van het pakket voor het verzenden van Cirq-kwantumcircuits naar een azure-quantum Python IonQ- of Quantum-kwantumcomputingdoel 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 uw voorkeursprovider, Provider of IonQ (of beide), in voor dit scenario. Zie 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, maakt u desgewenst een nieuwe omgeving 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[cirq]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 azure.quantum.cirq import AzureQuantumService
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 AzureQuantumService constructor om een service object te maken dat verbinding maakt met Azure Quantum werkruimte.
U kunt desgewenst een standaarddoel opgeven, in dit geval de IonQ-simulator:
service = AzureQuantumService(
resource_id="",
location="",
default_target="ionq.simulator"
)
Een lijst met alle doelen maken
U kunt nu een lijst maken met alle doelen waar u toegang tot hebt, inclusief de huidige wachtrijtijd en beschikbaarheid.
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>]
Een eenvoudig circuit uitvoeren
Maak vervolgens een eenvoudig Cirq-circuit om uit te voeren. Dit circuit maakt gebruik van de vierkantswortel van X-gate, systeemeigen voor het IonQ-hardwaresysteem.
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────────
U kunt het programma nu uitvoeren via de Azure Quantum service en het resultaat krijgen. De volgende cel verstuurt een taak (naar de standaard IonQ-simulator) waarmee het circuit wordt uitgevoerd met 100 opnamen, wordt gewacht tot de taak is voltooid en de resultaten retourneert.
result = service.run(program=circuit, repetitions=100)
Hiermee wordt een cirq.Result -object retourneert.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
Uitvoeren op IonQ QPU
De vorige taak is op de standaardsimulator, "ionq.simulator" . U kunt deze echter ook uitvoeren op de hardwareprocessor van IonQ (een Quantum Processor Unit (QPU)). Als u wilt uitvoeren op de IonQ QPU, geeft "ionq.qpu" u op als het target argument:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Ook hier wordt een cirq.Result -object retourneert.
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
Asynchroon model met taken
Voor langlopende circuits kan het handig zijn om ze asynchroon uit te voeren.
De service.create_job methode retourneert een -object, dat u kunt gebruiken om de resultaten te Job krijgen nadat de taak is uitgevoerd.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
Als u de taakstatus wilt controleren, gebruikt job.status() u :
print(job.status())
'completed'
Als u wilt wachten tot de taak is voltooid en vervolgens de resultaten krijgt, gebruikt u de blokkerende aanroep job.results() :
result = job.results()
print(result)
00: 0.5
11: 0.5
Houd er rekening mee dat hiermee geen -object wordt cirq.Result retourneren. In plaats daarvan wordt een resultaatobject retourneert dat specifiek is voor de IonQ-simulator en dat gebruikmaakt van toestandskansen in plaats van opgenomen gegevens.
type(result)
cirq_ionq.results.SimulatorResult
Als u dit wilt converteren naar cirq.Result een -object, gebruikt result.to_cirq_result() u :
print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100
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, maakt u desgewenst een nieuwe omgeving 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[cirq]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 azure.quantum.cirq import AzureQuantumService
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, https://portal.azure.com , navigeer naar Azure Quantum werkruimte en kopieer de waarden uit de header.

Plak de waarden in de volgende AzureQuantumService constructor om een service object te maken dat verbinding maakt met Azure Quantum werkruimte.
Geef desgewenst een standaarddoel op:
from azure.quantum.cirq import AzureQuantumService
service = AzureQuantumService(
resource_id="",
location="",
default_target="honeywell.hqs-lt-s1-apival"
)
Een lijst met alle doelen maken
U kunt nu een lijst maken met alle doelen waar u toegang tot hebt, met inbegrip van de huidige wachtrijtijd en beschikbaarheid.
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>]
Een eenvoudig circuit uitvoeren op de API-validatie
Notitie
Het validatiedoel van de Api voor Den Controleren retourneren altijd 0 bij meting.
Maak vervolgens een eenvoudig Cirq-circuit om uit te voeren.
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────────
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, wacht totdat de taak is voltooid en retourneert de resultaten.
result = service.run(program=circuit, repetitions=100)
Hiermee wordt een cirq.Result -object retourneert.
print(result)
b=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
U kunt de resultaten in een histogram plotten:
pl.hist(result.data)
pl.ylabel("Counts")
pl.xlabel("Result")
Asynchrone werkstroom met taken
Voor langlopende circuits kan het handig zijn om ze asynchroon uit te voeren.
De service.create_job methode retourneert een -object, dat u kunt gebruiken om de resultaten te Job krijgen nadat de taak is uitgevoerd.
job = service.create_job(
program=circuit,
repetitions=100
)
Als u de taakstatus wilt controleren, gebruikt job.status() u :
print(job.status())
'Waiting'
Als u wilt wachten tot de taak is voltooid en vervolgens de resultaten krijgt, gebruikt u de blokkerende aanroep 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']}
Houd er rekening mee dat hiermee geen -object wordt cirq.Result retourneren. In plaats daarvan wordt een woordenlijst met bitstringmetingresultaten die zijn geïndexeerd door de metingssleutel.