Cirq

注意

我们仅记录与 Google 的 qsimcirq 不同的地方。有关更多信息,请查看 Google 的文档。有关使用 qsim 的信息,请参阅 其文档。有关开始使用带有 Cirq 的 NVIDIA cuQuantum Appliance 的信息,请访问 NGC 上的概述

API 参考

qsimcirq.QSimOptions

class QSimOptions:
    max_fused_gate_size: int = 4
    max_fused_diagonal_gate_size: int = -1
    cpu_threads: int = 1
    ev_noisy_repetitions: int = 1
    disable_gpu: bool = False
    gpu_mode: Union[int, Sequence[int]] = (0,)
    gpu_network: int = 0
    gpu_state_threads: int = 512
    gpu_data_blocks: int = 16
    verbosity: int = 0
    denormals_are_zeros: bool = False
    n_subsvs: int = -1
    use_sampler: Union[bool, None] = None

关键词

描述

gpu_mode

要使用的 GPU 模拟器后端。如果 1,模拟器后端将使用 cuStateVec。如果 n,一个大于 1 的整数,模拟器将使用多 GPU 后端,使用前 n 个设备。如果是一系列整数,模拟器将使用多 GPU 后端,设备序号与列表中的值匹配。默认设置为使用多 GPU 后端,设备 0。

n_subsvs

状态向量分区的数量。除非使用多 GPU 后端,否则此选项将被忽略。如果 -1,分区的数量等于 GPU 的数量。为了获得最佳性能,请确保分区的数量等于 GPU 的数量,并且两者都是 2 的幂。

use_sampler

如果为 None,多 GPU 后端将使用其采样器,所有其他后端将使用其默认采样器。如果为 True,则使用多 GPU 后端的采样器。如果为 False,则禁用多 GPU 后端的采样器。

gpu_network

GPU 间数据传输网络的拓扑结构。启用多 GPU 支持时,此选项有效。支持的网络拓扑结构包括交换网络和全网状网络。如果指定为 0,则自动检测网络拓扑结构。如果指定为 1 或 2,则分别选择交换网络或全网状网络。交换网络旨在支持 DGX A100 和 DGX-2 中的 GPU 数据传输网络,其中所有 GPU 通过 NVLink 连接到 NVSwitch。通过 PCIe 交换机连接的 GPU 也被视为交换网络。全网状网络旨在支持 DGX Station A100/V100 中看到的 GPU 数据传输网络,其中所有设备通过 NVLink 直接连接。

disable_gpu

是否禁用 GPU 模拟器后端。仅当此项为 False(默认值)时,才考虑所有 GPU 选项。请注意与 qsimcirquse_gpu 关键词的区别。

max_fused_diagonal_gate_size

每个融合对角门允许的最大量子比特数。除非使用 NGC 多 GPU 后端,否则此选项将被忽略。如果为 0,则禁用对角门的门融合。如果为 -1,则会自动调整此参数以获得更好的性能。


注意

NVIDIA cuQuantum Appliance 提供 GPU 和多 GPU 模拟器。如果需要在 qsimcirq 中运行 CPU 模拟器,建议使用 Google Quantum AI 团队 发布的 qsimcirq 包。如果需要在 NVIDIA cuQuantum Appliance 中安装的 CPU 后端,请指定选项 qsimcirq.QSimOptions(disable_gpu=True)

一些示例

options = qsimcirq.QSimOptions(gpu_mode=1)      # use cuStateVec (single-GPU) backend
options = qsimcirq.QSimOptions(gpu_mode=(0,))   # use multi-GPU backend with GPU #0
options = qsimcirq.QSimOptions(gpu_mode=2)      # use multi-GPU backend with the first 2 devices
options = qsimcirq.QSimOptions(gpu_mode=(0,2))  # use multi-GPU backend with GPU #0 & #2
options = qsimcirq.QSimOptions(gpu_mode=())     # use multi-GPU backend with GPU #0