

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 比较 Amazon Braket 模拟器
<a name="choose-a-simulator"></a>

本节通过描述一些概念、限制和使用案例，帮助您选择最适合您的量子任务的 Amazon Braket 模拟器。

 **在本地模拟器和按需模拟器 (SV1, TN1, DM1) 之间进行选择** 

*本地模拟器*的性能取决于托管本地环境的硬件，如用于运行模拟器的 Braket Notebook 实例。*按需模拟器*在 AWS 云端运行，旨在超越典型的本地环境。按需模拟器针对较大的电路进行了优化，但是每个量子任务或批量子任务会增加一些延迟开销。如果涉及许多量子任务，这可能意味着需要权衡取舍。鉴于这些一般性能特征，以下指导可以帮助您选择如何运行模拟，包括带有噪声的模拟。

对于**模拟**：
+ 当使用量少于 18 个 qubits 时，请使用本地模拟器。
+ 当使用量为 18-24 个 qubits 时，请根据工作负载选择模拟器。
+ 当使用量超过 24 个 qubits 时，请使用按需模拟器。

对于**噪声模拟**：
+ 当使用量少于 9 个 qubits 时，请使用本地模拟器。
+ 当使用量为 9-12 个 qubits 时，请根据工作负载选择模拟器。
+ 当使用数超过 12 个 qubits 时，请使用 DM1。

 **什么是状态向量模拟器？** 

 SV1 是一个通用状态向量模拟器。它存储着量子态的全波函数，并按顺序将门运算应用于该状态。它存储了所有可能性，即使是极不可能的也是如此。SV1 模拟器执行量子任务的运行时随着电路中门的数量而线性增加。

 **什么是密度矩阵模拟器？** 

 DM1 用噪声模拟量子电路。它存储着系统的全密度矩阵，并按顺序应用电路的门和噪声运算。最终的密度矩阵包含有关电路运行后量子态的完整信息。运行时通常随操作数线性扩展，随 qubits 数呈指数级扩展。

 **什么是张量网络模拟器？** 

 TN1 将量子电路编码成结构化图。
+ 图的节点由量子门或 qubits 组成。
+ 图形的边缘表示门之间的连接。

由于这种结构，TN1 可以为相对较大且复杂的量子电路找到模拟解。

 ** TN1 需要两个阶段** 

通常，TN1 采用两阶段方法来模拟量子计算。
+  **排练阶段：**在这个阶段，TN1 想出一种高效遍历图表的方法，包括访问每个节点，这样您就可以获得您想要的测量结果。作为客户，您看不到此阶段，因为 TN1 同时为您执行两个阶段。它完成了第一阶段，并根据实际限制决定是否单独执行第二阶段。模拟开始后，您对该决定没有任何意见。
+  **收缩阶段：**此阶段类似于经典计算机中计算的执行阶段。该阶段包括一系列矩阵乘法。这些乘法的顺序对计算难度有很大的影响。因此，首先要完成排练阶段，以便在图中找到最有效的计算路径。在排练阶段找到收缩路径后，TN1 将电路的门收缩在一起以生成模拟结果。

 ** TN1 图表类似于地图** 

打个比方，您可以将底层 TN1 图表与城市街道进行比较。在采用规划网格的城市中，使用地图可以很容易找到通往目的地的路线。在一个无规划街道、街道名称重复等的城市中，通过查看地图可能很难找到通往目的地的路线。

如果 TN1 没有进行排练阶段，那就像在城市的街道上漫步寻找目的地，而不是先看地图。就步行时间而言，花更多的时间看地图确实可以获得回报。同样，排练阶段也提供了有价值的信息。

您可能会说，TN1 对它所穿越的底层电路的结构有一定的“意识”。它在排练阶段获得了这种意识。

 **问题类型最适合每种类型的模拟器** 

 SV1 非常适合于主要依赖于具有一定数量的 qubits 和门的任何类别的问题。通常，所需时间会随着门数的增加而呈线性增长，而不取决于 shots 的数量。SV1 通常比 28 个 qubits 以下的电路 TN1 快。

 SV1 对于较大的 qubit 数字，可能会变慢，因为它实际上模拟了所有可能性，即使是极不可能的情况下也是如此。它无法确定可能出现哪些结果。因此，要进行 30-qubit 评估，SV1 必须计算 2^30 个配置。受内存和存储限制，Amazon Braket SV1 模拟器的限值为 34 个 qubits，是一个实际限制。您可以这样想：每当您向 qubit 中添加一个 SV1 时，问题就会变得困难一倍。

对于许多类问题，由于 TN1 利用图结构，与 SV1 相比，TN1 可以在现实时间内评估更大的电路。它本质上是从一开始就跟踪解决方案的演变，并且仅保留有助于高效遍历的配置。换句话说，它保存配置以创建矩阵乘法的顺序，从而简化计算过程。

qubits 和门的数量对 TN1 来说很重要，但图表结构更重要。例如，TN1 非常擅长评估门为短距离的电路（图表）（也就是说，每个 qubit 门仅通过门连接到其最近的邻居 qubits），以及连接（或门）具有相似范围的电路（图表）。TN1 的典型范围是让每个 qubit 仅与 5 个 qubits 之外的另外 qubits 交谈。如果结构的大部分可以分解为更简单的关系，如这些关系，这些关系可以用*更多*、*更小*或*更统一*的矩阵表示，则 TN1 可以有效地执行评估。

 ** TN1** 的限制 

 TN1 可能比 SV1 慢一些，取决于图表的结构复杂度。对于某些图表，由于以下两个原因之一，TN1 会在排练阶段结束后终止模拟并显示 `FAILED` 的状态：
+  **无法找到路径**：如果图形太复杂，则很难找到一条好的遍历路径，模拟器就会放弃计算。TN1 无法进行收缩。您可能会看到类似于以下内容的错误消息：`No viable contraction path found.`
+  **收缩阶段太困难**：在某些图表中，TN1 可以找到遍历路径，但是评估起来非常漫长且非常耗时。在这种情况下，收缩非常昂贵，以至于成本高到令人望而却步，而是 TN1 在排练阶段之后退出。您可能会看到类似于以下内容的错误消息：`Predicted runtime based on best contraction path found exceeds TN1 limit.`

**注意**  
即使没有进行收缩且您会看到 `FAILED` 状态，您也需要支付排练阶段的 TN1 费用。

预测的运行时也取决于 shot 计数。在最坏的情况下，TN1 收缩时间线性地取决于 shot 的计数。该电路可以用更少的 shots 进行收缩。例如，您可以提交一个包含 100 个 shots 的量子任务，该任务 TN1 决定不可收缩，但是如果您只有 10 的量子任务重新提交，则会继续收缩。在这种情况下，要获得 100 个样本，您可以为同一电路提交 10 个 shots 的 10 个量子任务，最后合并结果。

作为最佳实践，我们建议您始终使用几个 shots（如 10）来测试您的电路或电路等级，以了解您的电路对 TN1 而言有多难，然后再继续使用更大的 shots 数量。

**注意**  
形成收缩阶段的一系列乘法从小的 NxN 矩阵开始。例如，2-qubit 门需要一个 4x4 矩阵。在被判定为太困难的收缩期间所需的中间矩阵是巨大的。这样的计算需要几天才能完成。这就是 Amazon Braket 不尝试极其复杂的收缩的原因。

 **并发** 

所有 Braket 模拟器都能使您同时运行多个回路。并发限制因模拟器和区域而异。有关并发限制的更多信息，请参阅[配额页面](https://docs.aws.amazon.com/braket/latest/developerguide/braket-quotas.html)。