你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
(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# 示例程序之一:
- 在 VS Code中,打开“ 文件 ”菜单,然后选择“ 新建文本文件”。
- 为文件指定以扩展名结尾
.qs的名称。 - 在空文件中,输入 示例。 此时会打开包含的代码示例列表。
- 选择代码示例,例如 Bell Pair 示例。
- 若要在稀疏模拟器上运行程序,请从 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# 程序:
在 VS Code中,打开 “视图 ”菜单,然后选择 “命令面板”。
输入 Create: New Jupyter Notebook。 将在新选项卡中打开一个空的笔记本文件。
在第一个单元中,从
qdk包导入qsharp模块。from qdk import qsharp在新单元格中,使用
%%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); }创建新单元格。 若要在稀疏模拟器上运行 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) |
注释
NeutralAtomDevice和 NeutralAtomBackend 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)