你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
了解如何使用 azure-quantumPython 包提交 Cirq 量子线路。 可以通过使用本地计算机上的 Azure Quantum 开发工具包(QDK)、Jupyter Notebook 和 Visual Studio Code(VS Code)将 Cirq 电路提交到 Azure Quantum。
有关详细信息,请参阅量子线路。
先决条件
有关安装详细信息,请参阅 设置 QDK 扩展。
在您的 Azure 订阅中创建一个 Azure Quantum 工作区。 若要创建工作区,请参阅创建 Azure Quantum 工作区。
安装了 Python 的 Python 环境。
安装了 Azure Quantum 开发工具包、Python 和 Jupyter 扩展的 VS Code。
带有 [cirq] 标记的 Azure Quantum
azure-quantum包,以及qsharp和ipykernel包。python -m pip install --upgrade azure-quantum[cirq] qsharp 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 服务,程序将需要资源 ID 和 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 的硬件处理器(Quantum 处理器单位 (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