Qiskit¶
cuQuantum Appliance 包含 Qiskit 和 cusvaer。 cusvaer 无缝集成到 Qiskit Aer 中,使用户能够通过 Qiskit Aer 运行多节点模拟,而无需对其源代码进行任何修改。
有关 cusvaer 后端求解器的详细信息,请参阅 cusvaer。
入门指南¶
以下 Python 脚本是运行 Greenberger-Horne-Zeilinger (GHZ) 电路的示例。
from qiskit import QuantumCircuit, transpile
from qiskit_aer import Aer
def create_ghz_circuit(n_qubits):
circuit = QuantumCircuit(n_qubits)
circuit.h(0)
for qubit in range(n_qubits - 1):
circuit.cx(qubit, qubit + 1)
return circuit
simulator = Aer.get_backend('aer_simulator_statevector')
circuit = create_ghz_circuit(n_qubits=20)
circuit.measure_all()
circuit = transpile(circuit, simulator)
job = simulator.run(circuit)
result = job.result()
print(result.get_counts())
print(f'backend: {result.backend_name}')
此脚本适用于 Qiskit Aer。当脚本在当前版本的 cuQuantum Appliance 中执行时,将自动选择多节点后端并运行模拟。后端名称为 "cusvaer_simulator_statevector"
。
$ python ghz.py
{'00000000000000000000': 493, '11111111111111111111': 531}
backend: cusvaer_simulator_statevector
通过使用 mpirun 启动脚本,模拟将分布到多个进程。在以下示例中,使用两个进程进行模拟,结果将输出两次。
$ mpirun -n 2 python ghz.py
{'00000000000000000000': 536, '11111111111111111111': 488}
cusvaer_simulator_statevector
{'00000000000000000000': 536, '11111111111111111111': 488}
cusvaer_simulator_statevector
通过添加下面显示的行,将选择 mpi_rank == 0
的进程来输出结果。
if result.mpi_rank == 0:
print(result.get_counts())
print(f'backend: {result.backend_name}')
$ mpirun -n 2 python ghz.py
{'00000000000000000000': 532, '11111111111111111111': 492}
cusvaer_simulator_statevector
注意
qiskit_aer.Aer
对象在 Qiskit 1.0 中可用。对于以前版本的 Qiskit,qiskit.Aer
的工作方式相同。
注意
此处使用 GHZ 电路作为示例,并不意味着演示性能。众所周知,当模拟分布到多个 GPU 和/或多个节点时,GHZ 电路太浅而无法显示良好的扩展性。
选择模拟器¶
当满足以下所有条件时,当前版本的 cuQuantum Appliance 中安装的 Qiskit Aer 扩展为实例化 cusvaer 后端求解器
cusvaer_enable == True
method == "statevector" or method == "automatic"
noise_model == None
cusvaer_enable
是 Qiskit Aer 的扩展,用于启用 cusvaer。默认值为 True
。method
和 noise_model
是 Qiskit Aer 提供的选项。仅当 noise_model
选项为 None
时才选择 cusvaer,因为 cusvaer 的第一个版本不支持噪声模型。
cusvaer 特定选项¶
请参阅 cusvaer 选项。
Qiskit Aer 选项的修改¶
下表显示了对 Qiskit Aer 的修改和添加的选项。
选项 |
描述 |
|
如果设置为 |
|
默认值已更改为 |
|
默认值已更改为 |
与 mpi4py 的互操作性¶
mpi4py 可与 cusvaer 后端互操作。有关详细信息,请参阅 与 mpi4py 的互操作性。
限制¶
当前发行版本有以下限制
不支持噪声模型和噪声电路模拟。
即使提供了 Qiskit Aer 的并行模拟选项(例如,
batched_shots_gpu
,batched_shots_gpu_max_qubits
),模拟也以串行方式执行。不支持单进程多 GPU 模拟。即使在单个节点中,用户也需要启动多个 MPI 进程。