你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:将 QIR 程序提交到 Azure Quantum 资源估算器
Azure Quantum 资源估算器基于 Quantum Intermediate Representation (QIR)构建,这是量子程序完全可互操作的规范。 QIR 充当量子编程语言和框架以及 targeted 量子计算平台之间的通用接口。 由于资源估算器采用 QIR 程序作为输入,因此它支持翻译为 QIR 的任何语言。 例如,它可由常用的量子 SDK 和语言(如 Q# 和 Qiskit)使用。 在本教程中,你将编写 QIR 程序并将其提交到资源估算器。 本教程使用 PyQIR 生成 QIR ,但是,可以使用任何其他 QIR 源。
本教程介绍以下操作:
- 连接到 Azure Quantum 服务。
- 定义一个函数以从 QIR 位代码创建资源估算作业
- 使用 PyQIR 生成器创建 QIR 位代码
- 将 QIR 作业提交到资源估算器
注册 30 天的免费 Azure 试用版订阅。
先决条件
- 具有活动订阅的 Azure 帐户。 如果没有 Azure 帐户,请免费注册并注册 即用即付订阅。
- Azure Quantum 工作区。 有关详细信息,请参阅创建 Azure Quantum 工作区。
- 已 添加到工作区的 Microsoft Quantum Computing 提供程序。
在工作区中创建新的笔记本
- 登录到 Azure 门户并选择你的 Azure Quantum 工作区。
- 在“操作”下,选择“笔记本”
- 单击“我的笔记本”,然后单击“添加新”
- 在“内核类型”中选择“IPython”。
- 键入文件的名称,然后单击“ 创建文件”。
当你的新笔记本打开时,它会根据订阅和工作区信息自动为第一个单元格创建代码。
from azure.quantum import Workspace
workspace = Workspace (
resource_id = "", # Your resource_id
location = "" # Your workspace location (for example, "westus")
)
注意
除非另有说明,否则应按照单元的创建顺序运行每个单元,以避免任何编译问题。
单击单元左侧的三角形“播放”图标以运行代码。
加载所需的导入项
首先,需要从azure.quantum
和qiskit
pyqir
中导入一些 Python 类和函数。 你不会使用 Qiskit 直接构建量子线路,但你将使用 AzureQuantumJob
,这是基于 Qiskit 生态系统构建的。 确保使用的是最新版本的 Qiskit。 有关详细信息,请参阅 更新 azure-quantum Python 包。
from azure.quantum.qiskit import AzureQuantumProvider
from azure.quantum.qiskit.job import AzureQuantumJob
from pyqir.generator import BasicQisBuilder, SimpleModule
连接到 Azure Quantum 服务
接下来,使用workspace
上一单元格中的对象创建一个AzureQuantumProvider
对象,以连接到 Azure Quantum 工作区。
provider = AzureQuantumProvider(workspace)
定义用于从 QIR 创建资源估算作业的函数
资源估算器是 target Microsoft量子计算提供程序。 使用资源估算器与针对 Azure Quantum 中的其他软件和硬件提供程序 targets 提交作业完全相同 - 定义程序、设置 target作业并提交作业以进行计算。
提交程序的资源估算请求时,可以指定一些 target 参数。
errorBudget
- 总体允许的错误预算qecScheme
- 量子纠错 (QEC) 方案qubitParams
- 物理量子比特参数constraints
- 组件级约束
有关输入参数的详细信息,请参阅 资源估算器的目标参数。
在本示例中,你将实现一个泛型函数,该函数采用连接到 Azure Quantum 工作区的对象和量子程序的 QIR 位码作为输入 provider
。 它作为 Azure Quantum 作业返回。
资源估算器 target 参数可以通过关键字参数传递给函数。
def resource_estimation_job_from_qir(provider: AzureQuantumProvider, bitcode: bytes, **kwargs):
"""A generic function to create a resource estimation job from QIR bitcode"""
# Find the Resource Estimator target from the provider
backend = provider.get_backend('microsoft.estimator')
# You can provide a name for the job via keyword arguments; if not,
# use QIR job as a default name
name = kwargs.pop("name", "QIR job")
# Wxtract some job specific arguments from the backend's configuration
config = backend.configuration()
blob_name = config.azure["blob_name"]
content_type = config.azure["content_type"]
provider_id = config.azure["provider_id"]
output_data_format = config.azure["output_data_format"]
# Finally, create the Azure Quantum jon object and return it
return AzureQuantumJob(
backend=backend,
target=backend.name(),
name=name,
input_data=bitcode,
blob_name=blob_name,
content_type=content_type,
provider_id=provider_id,
input_data_format="qir.v1",
output_data_format=output_data_format,
input_params = kwargs,
metadata={}
)
运行示例量子程序
接下来,使用 PyQIR 生成器创建一些 QIR 位代码。 此示例使用三个 T 门和两个 CNOT 门生成受控 S 门。
module = SimpleModule("Controlled S", num_qubits=2, num_results=0)
qis = BasicQisBuilder(module.builder)
[a, b] = module.qubits[0:2]
qis.t(a)
qis.t(b)
qis.cx(a, b)
qis.t_adj(b)
qis.cx(a, b)
可以使用上面定义的函数和 PyQIR 中的 bitcode()
函数生成资源估算作业。 还可以传递资源估算器特定参数。 此示例用于 errorBudget
将错误率设置为 5%。 有关参数的详细信息 target ,请参阅 资源估算器的目标参数。
job = resource_estimation_job_from_qir(provider, module.bitcode(), errorBudget=0.05)
result = job.result()
result
此函数创建一个表,该表显示总体物理资源计数。 可以通过折叠具有详细信息的组来进一步检查成本详细信息。 例如,如果折叠 逻辑量子比特参数 组,则更容易看到错误更正代码距离为 15。
逻辑量子比特参数 | 值 |
---|---|
QEC 方案 | surface_code |
码距 | 5 |
物理量子比特 | 50 |
逻辑周期时间 | 2us |
逻辑量子比特错误率 | 3.00E-5 |
交叉预制 | 0.03 |
错误更正阈值 | 0.01 |
逻辑周期时间公式 | (4 * twoQubitGateTime + 2 * oneQubitMeasurementTime ) * codeDistance |
物理量子比特公式 | 2 * codeDistance * codeDistance |
在“物理量子比特参数”组中,可以看到为此估计假定的物理量子比特属性。 例如,执行单量子比特测量和单量子比特门的时间分别假设为 100 ns 和 50 ns。
物理量子比特参数 | 值 |
---|---|
量子比特名称 | qubit_gate_ns_e3 |
指令集 | GateBased |
单量子比特测量时间 | 100 纳秒 |
T 门时间 | 50 ns |
T 门错误率 | 0.001 |
单量子比特度量误差率 | 0.001 |
单量子比特门时间 | 50 ns |
单量子比特错误率 | 0.001 |
双量子比特门时间 | 50 ns |
双量子比特错误率 | 0.001 |
有关详细信息,请参阅 资源估算器输出数据 的完整列表。
相关内容
继续探索其他量子算法和技术:
- 本教程 实现 Grover 的搜索算法 演示如何编写使用 Grover 搜索算法解决图形着色问题的 Q# 程序。
- 本教程 介绍了如何使用 Q# 对量子位执行量子纠缠以更改其状态,并演示叠加和纠缠的影响。
- Quantum Katas 是基于 Jupyter Notebook 的自定步教程和编程练习,旨在同时教授量子计算和 Q# 编程的元素。