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

如何安装和运行 QDK 量子模拟器

(Microsoft Quantum 开发工具包QDK) 包括一组量子模拟器,可以从 (VS Code) 扩展和PythonQDK包访问Visual Studio Code。 通过这些模拟器,可以测试量子程序在真实量子硬件上的运行方式。 本文介绍如何安装模拟器以及如何在 Jupyter Notebook 和 VS Code中运行基本模拟。

QDK 包括四个量子模拟器:

  • 稀疏模拟器
  • 克利福德模拟器
  • GPU 模拟器
  • CPU 模拟器

有关 QDK量子模拟器的更多信息,请参阅QDK中的量子模拟器概述

先决条件

若要执行本文中的步骤,需要安装以下工具:

  • Python 环境(版本 3.10 或更高版本),Python 和 Pip
  • 最新版本(Visual Studio CodeVS Code)
  • Python 中的 Jupyter 和 VS Code 的最新版本

安装模拟器

包中 QDKPython 提供了所有四个模拟器,但扩展中 QDKVS Code 只有稀疏模拟器可用。

若要在 VS Code 扩展中使用稀疏模拟器,请安装用于 QDK 的 VS Code 扩展

若要使用量子模拟器,Python请Jupyter Notebook安装最新版本的Pythonqdk包,并jupyter额外安装:

pip install --upgrade "qdk[jupyter]"

使用模拟器不需要额外的 jupyter 功能,但会安装该 qdk.widgets 模块。 widgets 模块允许在 Jupyter Notebook 中通过模拟结果创建可视化效果。

使用适用于 QDK 的 VS Code 扩展运行模拟

用于QDK的VS Code扩展仅提供稀疏模拟器。 若要在 VS Code 的稀疏模拟器上运行程序,请在 .qs 中打开 Q#(.qasm)或 OpenQASM(VS Code)程序,并运行该文件。

例如,请按以下步骤运行随 QDK 扩展提供的 Q# 示例程序之一:

  1. 在 VS Code中,打开“ 文件 ”菜单,然后选择“ 新建文本文件”。
  2. 为文件指定以扩展名结尾 .qs 的名称。
  3. 在空文件中,输入 示例。 此时会打开包含的代码示例列表。
  4. 选择代码示例,例如 Bell Pair 示例
  5. 若要在稀疏模拟器上运行程序,请从 Main 操作上方的代码镜头中选择“运行”命令。

终端 VS Code 显示模拟的输出。

注释

你可以在 QDK 扩展中为 Q# 程序的稀疏模拟添加有限数量的噪声模型。 有关详细信息,请参阅 在 VS Code 中向稀疏模拟器添加泡利噪声

使用 QDKPython 包运行模拟

该 QDKPython 包提供所有四个模拟器。 如何调用模拟器取决于模拟器和量子编程框架。

调用稀疏模拟器

可以为 Q#、OpenQASM 和 Qiskit 程序调用稀疏模拟器。 下表显示了如何在每个支持的量子编程框架中从 qdk 包中调用稀疏模拟器 10 次。

编程框架 Python API 示例调用
Q# qsharp.run qsharp.run("MyQsharpProgram()", shots=10)
OpenQASM openqasm.run openqasm.run(my_qasm_program, shots=10)
Qiskit qiskit.QSharpBackend QSharpBackend().run(my_qiskit_program, shots=10)

注释

对于 Q# 和 OpenQASM 程序,可以使用 noise 参数将噪声模型添加到稀疏模拟器中,但对于 Qiskit 程序,则无法添加噪声模型。

例如,按照以下步骤在笔记本Jupyter中VS Code运行 Bell pair Q# 程序:

  1. 在 VS Code中,打开 “视图 ”菜单,然后选择 “命令面板”。

  2. 输入 Create: New Jupyter Notebook。 将在新选项卡中打开一个空的笔记本文件。

  3. 在第一个单元中,从qdk包导入qsharp模块。

    from qdk import qsharp
    
  4. 在新单元格中,使用 %%qsharp 魔法命令编写 Q# 代码。

    %%qsharp
    
    operation Main() : (Result, Result) {
        use (q1, q2) = (Qubit(), Qubit());
        PrepareBellPair(q1, q2);
        (MResetZ(q1), MResetZ(q2))
    }
    
    operation PrepareBellPair(q1 : Qubit, q2 : Qubit) : Unit {
        H(q1);
        CNOT(q1, q2);
    }
    
  5. 创建新单元格。 若要在稀疏模拟器上运行 Q# 程序,请从run模块调用qsharp函数并指定镜头数。

    qsharp.run("Main()", shots=10)
    

调用 Clifford 模拟器

可以为 Q#、OpenQASM、Qiskit 和 QIR 程序调用 Clifford 模拟器。 下表显示了如何在每个支持的量子编程框架中从 qdk 包中调用 Clifford 模拟器,以获取 10 次镜头。

编程框架 Python API 示例调用
Q# qsharp.run qsharp.run("MyQsharpProgram()", type='clifford', shots=10)
OpenQASM openqasm.run openqasm.run(my_qasm_program, type='clifford', shots=10)
Qiskit simulation.NeutralAtomBackend simulation.NeutralAtomBackend().run(my_qiskit_program, simulator_type='clifford', shots=10)
QIR simulation.NeutralAtomDevice simulation.NeutralAtomDevice().simulate(my_qir, type='clifford', shots=10)
QIR simulation.run_qir simulation.run_qir(my_qir, type='clifford', shots=10)

注释

NeutralAtomDeviceNeutralAtomBackend API 专门用于在中性原子量子计算机上进行模拟。 有关详细信息,请参阅 中性原子设备模拟器概述

例如,以下 Python 代码创建一个简单的 OpenQASM 程序,并在 Clifford 模拟器上运行程序:

from qdk.openqasm import run

qasm_code = """
    include "stdgates.inc";
    qubit[2] q;
    reset q;
    h q[0];
    cx q[0], q[1];
    bit c = measure q[1];
    """

run(qasm_code, type='clifford', shots=10)

调用 GPU 和 CPU 模拟器

可以为 Qiskit 和 QIR 程序调用 GPU 和 CPU 模拟器。 下表显示了如何在每个受支持的量子编程框架中从 qdk 包中调用 GPU 模拟器,以获取 10 次镜头。 若要调用 CPU 模拟器,请将模拟器类型参数中的 'gpu' 替换为 'cpu'

编程框架 Python API 示例调用
Qiskit simulation.NeutralAtomBackend simulation.NeutralAtomBackend().run(my_qiskit_program, simulator_type='gpu', shots=10)
QIR simulation.NeutralAtomDevice simulation.NeutralAtomDevice().simulate(my_qir, type='gpu', shots=10)
QIR simulation.run_qir simulation.run_qir(my_qir, type='gpu', shots=10)

例如,以下 Python 代码将简单的 OpenQASM 程序转换为 QIR,并在 GPU 模拟器上运行 QIR:

from qdk.openqasm import compile#, ProgramType
from qdk.simulation import run_qir

qasm_code = """
    include "stdgates.inc";
    qubit[2] q;
    reset q;
    h q[0];
    cx q[0], q[1];
    bit c = measure q[1];
    """

qir = compile(qasm_code)
run_qir(qir, type='gpu', shots=10)