Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zjistěte, jak odeslat kvantový okruh Cirq pomocí podmodulu qdk.azure.cirqPython. Okruhy Cirq můžete do Azure Quantum odesílat pomocí sady Microsoft Quantum Development Kit (QDK) a Jupyter Notebook v editoru Visual Studio Code (VS Code) z místního počítače.
Další informace najdete v tématu Kvantové obvody.
Požadavky
Podrobnosti o instalaci najdete v tématu Nastavení rozšíření QDK.
Pracovní prostor Azure Quantum ve vašem předplatném Azure Pokud chcete vytvořit pracovní prostor, přečtěte si téma Vytvoření pracovního prostoru Azure Quantum.
Prostředí Python s nainstalovaným Python nástrojem Pip .
Knihovna
qdkPython s rozšířenímiazureacirqa balíčkemipykernel.python -m pip install --upgrade "qdk[azure,cirq]" ipykernelPoznámka:
Pokud se nerozpoznalo jádro Python Jupyter
ipykernel, nástroj VS Code vás vyzve k jeho instalaci.
Vytvoření nového poznámkového bloku Jupyter
- Ve VS Code otevřete nabídku Zobrazení a zvolte Paleta příkazů.
- Zadejte a vyberte Vytvořit: Nový poznámkový blok Jupyter.
- VS Code zjistí a zobrazí verzi Python a virtuální Python prostředí vybrané pro poznámkový blok. Pokud máte více Python prostředí, možná budete muset vybrat jádro pomocí nástroje pro výběr jádra v pravém horním rohu. Pokud nebylo zjištěno žádné prostředí, informace o nastavení najdete v poznámkových blocích Jupyter v editoru VS Code .
Načtení požadovaných importů
V první buňce poznámkového bloku spusťte následující kód, který načte požadované importy:
from qdk.azure import Workspace
from qdk.azure.cirq import AzureQuantumService
Připojení ke službě Azure Quantum
Pokud se chcete připojit ke službě Azure Quantum, váš program potřebuje ID prostředku vašeho pracovního prostoru Azure Quantum.
- Přihlaste se ke svému účtu Azure, https://portal.azure.com
- Vyberte pracovní prostor Azure Quantum a přejděte na Přehled.
- Zkopírujte hodnotu v poli ID zdroje .
Přidejte novou buňku a pomocí informací o účtu vytvořte Workspace a AzureQuantumService objekty pro připojení k pracovnímu prostoru Azure Quantum.
workspace = Workspace(resource_id="") # Add the resource ID of your workspace
service = AzureQuantumService(workspace)
Zobrazit seznam všech targets
targets()Pomocí této metody můžete vytvořit seznam všech položek ve vašem pracovním prostorutargets, které mohou spouštět váš okruh, včetně aktuálního času ve frontě a dostupnosti.
Poznámka:
targets V seznamu nemusí být uvedena všechna data ve vašem pracovním prostoru – pouze okruhy, které jsou schopné přijmout Cirq nebo OpenQASM, budou zde uvedené.
print(service.targets())
[<Target name="quantinuum.qpu.h2-1", avg. queue time=0 s, Degraded>,
<Target name="quantinuum.sim.h2-1sc", avg. queue time=1 s, Available>,
<Target name="quantinuum.sim.h2-1e", avg. queue time=40 s, Available>,
<Target name="ionq.simulator", avg. queue time=3 s, Available>,
<Target name="ionq.qpu.aria-1", avg. queue time=1136774 s, Available>]
Vytvořte jednoduchý okruh
Dále vytvořte jednoduchý okruh Cirq, který se má spustit. Tento okruh používá bránu sqrt(X), která je nativní pro hardwarový systém IonQ.
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────────
Vyberte target, abyste spustili svůj program.
Spustit na simulátoru IonQ
Program teď můžete spustit prostřednictvím služby Azure Quantum a získat výsledek. Následující buňka odešle úlohu (do výchozího simulátoru IonQ), která spouští okruh s 100 snímky, čeká na dokončení úlohy a vrátí výsledky.
result = service.run(program=circuit, repetitions=100, target="ionq.simulator")
Vrátí to objekt cirq.Result.
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
Odhad nákladů na úlohu
Před spuštěním úlohy v QPU byste měli odhadnout, kolik bude stát spuštění.
Nejaktuálnější podrobnosti o cenách najdete tak, že navštivte Ceny IonQ nebo najděte svůj pracovní prostor a zobrazte možnosti cen na kartě 'Poskytovatel' vašeho pracovního prostoru prostřednictvím: aka.ms/aq/myworkspaces.
Spuštění v QPU IonQ
Předchozí úloha se spustila ve výchozím simulátoru "ionq.simulator". Můžete ho ale spustit také na hardwarovém procesoru IonQ (QPU ( Quantum Processor Unit ). Pokud chcete spustit na QPU IonQ, zadejte "ionq.qpu.aria-1" jako target argument:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu.aria-1",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
Opět vrátí objekt cirq.Result.
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
Asynchronní model s využitím úloh
U dlouhotrvajících okruhů může být užitečné je spouštět asynchronně.
Metoda service.create_job vrátí Job objekt, který můžete použít k získání výsledků po úspěšném spuštění úlohy.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
Pokud chcete zkontrolovat stav úlohy, použijte job.status():
print(job.status())
'completed'
Pokud chcete počkat na dokončení úlohy a pak získat výsledky, použijte blokující volání job.results():
result = job.results()
print(result)
00: 0.5
11: 0.5
Všimněte si, že to nevrací cirq.Result objekt. Místo toho vrátí objekt výsledků, který je specifický pro simulátor IonQ a místo dat z jednotlivých pokusů používá pravděpodobnosti stavu.
type(result)
cirq_ionq.results.SimulatorResult
Chcete-li tento objekt převést na cirq.Result objekt, použijte result.to_cirq_result():
print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100