你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:将 QIR 程序提交到 Azure Quantum 资源估算器

Azure Quantum 资源估算器基于 Quantum Intermediate Representation (QIR)构建,这是量子程序完全可互操作的规范。 QIR 充当量子编程语言和框架与目标量子计算平台之间的通用接口。 由于资源估算器采用 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 提供程序。

在工作区中创建新的笔记本

  1. 登录到 Azure 门户并选择你的 Azure Quantum 工作区。
  2. 在“操作”下,选择“笔记本”
  3. 单击“我的笔记本”,然后单击“添加新”
  4. 在“内核类型”中选择“IPython”。
  5. 键入文件的名称,然后单击“ 创建文件”。

当你的新笔记本打开时,它会根据订阅和工作区信息自动为第一个单元格创建代码。

from azure.quantum import Workspace
workspace = Workspace ( 
    resource_id = "", # Your resource_id 
    location = ""  # Your workspace location (for example, "westus") 
)

注意

除非另有说明,否则应按照单元的创建顺序运行每个单元,以避免任何编译问题。

单击单元左侧的三角形“播放”图标以运行代码。

加载所需的导入项

首先,需要从azure.quantumqiskitpyqir中导入一些 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 - 组件级约束

有关输入参数的详细信息,请参阅 Target 资源估算器的参数。

在本示例中,你将实现一个泛型函数,该函数采用连接到 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 ,请参阅 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# 编程的元素。