瞭解如何使用 azure-quantumPython 套件提交 Cirq 量子線路。 您可以使用 Azure Quantum 開發套件 (QDK) 和 Visual Studio Code (VS Code) 中的 Jupyter Notebook 從本機電腦將 Cirq 線路提交至 Azure Quantum。
如需詳細資訊,請參閱 量子電路。
必要條件
如需安裝詳細資料,請參閱 設定 QDK 擴充功能。
Azure 訂用帳戶中的 Azure Quantum 工作區。 若要建立工作區,請參閱 建立 Azure Quantum 工作區。
具備安裝了Python 的Python環境。
VS Code 上已安裝 Azure Quantum Development Kit、Python 和 Jupyter 擴充功能。
Azure Quantum
azure-quantum套件,附帶cirq額外元件,以及qdk和ipykernel套件。python -m pip install --upgrade "azure-quantum[cirq]" qdk ipykernel注意
如果未偵測到 Jupyter Python 核心
ipykernel,則 VS Code 會提示您安裝它。
建立新的 Jupyter Notebook
- 在 VS Code 中,開啟 [檢視] 功能表,然後選擇 [命令面板]。
- 輸入並選取 [建立:新增 Jupyter Notebook]。
- VS Code 會偵測並顯示為筆記本選擇的Python版本和Python虛擬環境。 如果您有多個 Python 環境,則可能需要使用右上角的核心選擇器來選取核心。 如果未偵測到任何環境,請參閱 VS Code 中的 Jupyter Notebook 以取得設定資訊。
載入必要的匯入模組
在筆記本的第一個儲存格中,執行下列程式碼以載入必要的匯入項目:
import azure.quantum
from azure.quantum.cirq import AzureQuantumService
聯機到 Azure Quantum 服務
若要連線到 Azure Quantum 服務,您的程式將需要資源識別碼和 Azure Quantum 工作區的位置。
- 登入您的 Azure 帳戶、 https://portal.azure.com、
- 選取您的 Azure Quantum 工作區,然後流覽至 [ 概觀]。
- 複製欄位中的參數。
新增數據格,並使用您的帳戶資訊來建立 Workspace 和 AzureQuantumService 物件,以聯機到您的 Azure Quantum 工作區。
workspace = Workspace(
resource_id = "", # Add the resourceID of your workspace
location = "" # Add the location of your workspace (for example "westus")
)
service = AzureQuantumService(workspace)
列出全部 targets
使用 targets() 方法來列出工作區中可以運行您電路的所有 targets,包括當前的佇列時間和可用性。
注意
在您的工作區中,所有的targets可能不會列出,只有那些可以接受 Cirq 或 OpenQASM 電路的targets才會顯示。
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>]
建立簡單線路
接下來,建立要執行的簡單 Cirq 線路。 此電路使用 IonQ 硬體系統中原生的 X 門的平方根。
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────────
選擇 target 以執行您的程式
在 IonQ 模擬器上執行
您現在可以透過 Azure Quantum 服務執行程式,並取得結果。 下面的單元格會提交一個工作(到預設的 IonQ 模擬器),執行電路100次,然後等待工作完成,並傳回結果。
result = service.run(program=circuit, repetitions=100, target="ionq.simulator")
這會傳回一個cirq.Result 物件。
print(result)
b=1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010, 1001100101100001000011011101000011010100010111100011001000100100010000001110010010101110110000011010
預估作業成本
在 QPU 上執行作業之前,您應該先估計執行的成本。
如需最新的定價詳細數據,請參閱 IonQ 定價,或透過下列方式在工作區的 [提供者] 索引卷標中尋找您的工作區並檢視定價選項: aka.ms/aq/myworkspaces。
在 IonQ QPU 上執行
上一個作業在預設模擬器上執行, "ionq.simulator"。 不過,您也可以在 IonQ 的硬體處理器 (量子處理器單元 (QPU) 上執行它。 若要在 IonQ QPU 上執行,請提供 "ionq.qpu.aria-1" 作為 target 自變數:
result = service.run(
program=circuit,
repetitions=100,
target="ionq.qpu.aria-1",
timeout_seconds=500 # Set timeout to accommodate queue time on QPU
)
再次,這會回傳 cirq.Result 物件。
print(result)
b=0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111, 0101011011011111100001011101101011011110100010000000011110111000100100110110101100110001001111101111
作業驅動的異步模型
對於長時間運行的電路,非同步方式運行可能會很有用。
方法 service.create_job 將傳回 Job 物件,您可以在作業成功執行後使用該物件來取得結果。
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator"
)
若要檢查工作狀態, 請使用 job.status():
print(job.status())
'completed'
若要等候作業完成,然後取得結果,請使用封鎖呼叫 job.results():
result = job.results()
print(result)
00: 0.5
11: 0.5
請注意,這不會傳 cirq.Result 回 物件。 相反地,它會傳回 IonQ 模擬器特有的結果物件,並使用狀態機率,而不是拍攝數據。
type(result)
cirq_ionq.results.SimulatorResult
若要將這個轉換成 cirq.Result 物件,請使用 result.to_cirq_result():
print(result.to_cirq_result())
b=1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100, 1110101111111110111000011101011111001100010000001011011101001111001111001101100111010000001100011100