量子电路的实现 基于ibm的qiskit
量子计算的物理实现
量子计算的实现有几种方式,最常用的就是超导量子计算机,它的量子处理器是用超导传输量子比特构建的,它是由一个约瑟夫森结和一个并联的电容器组成的电路。约瑟夫森结是一种非线性电感,由两层重叠的超导金属层和它们之间的绝缘屏障构成。在非常低的温度下,超导体种的电子会形成所谓的库珀对。库珀对可以自发地通过绝缘势垒从结的一边隧穿到另一边。这种隧穿的非线性特性,从而产生了我们的量子位。微波传输线在芯片上制造,用于将微波信号传递给量子比特。
当这些线路应用高度校准的微波脉冲——具有特定的频率、幅度、形状和持续时间时,我们可以让量子比特执行特定的操作。这构成了我们的量子门的基础。制造芯片,使得相邻的量子比特以特定的晶格结构连接,称为重六角晶格。这种连接性——所谓的拓扑结构——是我们设计电路时需要考虑的重要因素。
性能指标
每个处理器都列出了三个性能指标,我们在上一课讨论过,但作为提醒,它们是:Qubit count、EPLG和CLOPS。
Qubit count,这是显而易见的:它是单个量子处理器上可用的量子比特总数。对于一个相对较大的、实用规模的问题,你需要确保你使用的处理器有足够的量子比特来解决问题。但量子比特数量本身并不是唯一重要的因素。
EPLG,或“每层门的错误次数”。这是衡量量子比特和量子门质量的一个指标。它测量在100个量子比特的链中纠缠相邻量子比特的电路中每个门引入的平均错误。你希望这个数值尽可能小。
CLOPS,或“每秒电路层操作次数”。这量化了处理器的速度。它测量量子处理单元(QPU)每单位时间内可以执行多少层某种基准测试电路,称为量子体积电路。数值越高,我们的计算速度就越快。
设计量子电路:Qiskit模式
那么,我们如何设计和运行量子电路呢?了解典型量子计算工作流程的最简单方法是通过Qiskit模式。Qiskit模式是一个概念性框架,允许用户通过使用模块化工具实现某些步骤来运行量子工作负载。这使得量子计算任务可以通过异构(CPU/GPU/QPU)计算基础设施来执行。这些步骤可以作为服务执行,并且可以合并资源管理,从而在开发新功能时实现无缝的可组合性。
1.映射:这一步形式化了我们如何处理我们感兴趣的一般问题,并找出如何以量子电路的形式将其映射到量子计算机上。
2.优化:在这一步中,使用Qiskit的转译器(transpile)将电路路由和布局到实际的物理量子比特硬件上。这包括将单个量子门转换为在硬件上执行的操作序列,以及对门的布局进行优化。
3.执行:Qiskit运行时原语提供了IBM量子硬件的接口,该接口允许运行编译电路。此步骤还包括使用错误抑制和缓解技术,这些技术在很大程度上可以从用户中抽取出来。
4.后处理:在这个步骤中,来自量子处理器本身的数据被处理,为用户提供原始问题的有用结果。基本上,这包括对所获得数据的任何进一步分析。
映射
映射步骤基本上提出了这样一个问题:“我如何将我的问题转化为可以在量子硬件上合理运行的量子电路?”毫无疑问,地图绘制是一个难题,也是一个活跃的研究领域。没有一种万无一失的方法可以保证成功,但有一些建议的指导方针和我们已经知道如何解决的问题的例子。
第一条准则是让经典计算机做它们更擅长的工作。对于经典计算机来说很容易的任务可能不会从量子计算机中受益。量子计算机用于解决传统难题。当然,如果是第一次使用Qiskit或量子计算机,不要担心会发现计算复杂的问题。把它分解成更小、更小的问题,你可以在直接进行大规模项目之前学会解决这些问题。接下来,将您想要度量或理解的问题的结果转换为期望值或成本函数。成本函数是一个特定于问题的函数,它将问题的目标定义为最小化或最大化。它可以用来查看试验状态或解决方案相对于目标的表现如何。这个概念可以应用到化学、机器学习、金融、优化等领域的各种应用中——你从哪个学科来解决问题并不重要。还要记住,您将要使用的硬件具有特定的拓扑,正如我们在硬件部分所讨论的那样。有些量子位是连接的,有些不是——你需要把你的问题映射到一个遵循IBM量子处理器的重十六进制拓扑的电路上。这个阶段需要练习。您不仅需要很好地理解您的问题,还需要很好地理解硬件功能—我们将在以后的课程中通过具体的示例和用例来了解如何平衡所有这些考虑因素。
优化
下一步,我们需要选择一个量子处理器,它有足够高质量的量子比特,我们可以运行我们的量子电路。在硬件部分讨论的三个指标的指导下做出这些决策:qubit number(量子数)、EPLG(每层错误次数)和CLOPS(每秒电路层操作次数)。然后针对所选硬件优化电路。首先,我们需要有效地布局和布线我们的电路。布局是指将电路中的虚拟量子位映射到处理器上的物理量子位。路由是指调整电路,使电路中虚拟量子位之间的连通性与处理器上物理量子位的连通性相匹配。在布局和布线阶段有几件事要记住。并非所有量子位都是相连的。有些在芯片上彼此相距很远,我们需要尽可能减少或消除远距离交互。您可以在相邻的量子位之间应用一系列SWAP门来移动量子位信息,但是SWAP门成本高且容易出错,因此可能有更好的方法来实现这一点。尽量避免使用太多昂贵的SWAP门。布局和路由是迭代过程。你可以手工操作,但也有一个名为mapomatic的Qiskit工具,它可以根据近似错误率为物理量子位布局提供建议。转译器(将在稍后讨论)也可以给出明智的建议。接下来,可以将作用于相同量子位的单量子位门序列组合成单个门-有时也可以摆脱不必要的门或门的组合。例如,一些门的组合可以简化为更简单的组合——事实上,有时门的组合可能等同于恒等运算,因此我们可以简单地消除它们。您可以使用Qiskit转译器自动执行此操作,但如果您想要更多的控制,也可以逐个逐个地手动执行此操作。一旦我们改进了电路布局,路由和门计数-无论是手工还是使用转译器-我们通常想要可视化我们的电路,以确保所有门的定时都是有意义的。您可以在转译器中标记一个参数,以可视化电路的时间轴,并确保一切都按照您期望的方式排列。
编译
Qiskit Transpiler可用于在模式工作流的早期阶段提供帮助。现在让我们更详细地研究一下它的功能。它可以重写给定的输入电路,使其与特定量子器件的拓扑结构相匹配,并优化电路的执行和抗噪声的弹性。它还将给定电路改写为您选择使用的特定量子处理器的基础门。
Qiskit有四个内置的编译管道,对应于不同的优化级别,除非您已经熟悉量子电路优化,否则建议您使用其中一个。
默认情况下,编译过程包括以下六个步骤:
1.初始化:这个阶段运行在我们开始将电路嵌入到后端之前所需的任何初始传递。这通常涉及展开自定义指令并将电路转换为单量子位和双量子位门。
2.布局:这个阶段将电路中的虚拟量子位映射到后端上的物理量子位。有关更多细节,请参阅布局阶段。(https://docs.quantum.ibm.com/api/qiskit/transpiler#layout-stage)
3.布线:此阶段在应用布局后运行,并将门(例如交换门)注入原始电路以使其与后端连接兼容。请参阅路由阶段了解更多详细信息。
(https://docs.quantum.ibm.com/api/qiskit/transpiler#routing-stage)
4.翻译:这个阶段将电路中的门转换为目标后端的基集。请参阅翻译阶段了解更多细节。
(https://docs.quantum.ibm.com/api/qiskit/transpiler#translation-stage)
5.优化:这个阶段反复运行主优化循环,直到达到某个条件(例如达到某个目标深度)。我们有四种不同的优化级别可供选择,如下所述。
6.调度:此阶段适用于任何硬件感知调度过程。在高层次上,调度可以被认为是在电路中插入延迟,以解释指令执行之间量子位的空闲时间。
注意,qiskit的教程里有教学案例,可以自己试(唯一困难的点在于,调用真实的量子计算机需要排队,通常时间很长而且额度有限)有从0到3的四个优化级别,其中更高的优化级别需要更多的时间和计算努力,但可能产生更好的电路。优化级别0用于器件特性实验,因此,仅将输入电路映射到目标后端的约束,而不执行任何优化。优化级别3花费最大的精力来优化电路。然而,由于转译器中的许多优化技术都是基于启发式的,因此花费更多的计算工作并不总是导致输出电路质量的改善。如果对此有进一步的兴趣,请查看Qiskit文档中的转译器页面。
抑制错误
减少电路中错误的第一步是优化布局,布线和最小化门数,我们已经完成了,要么使用转译器,要么自己完成。现在来讨论一些更复杂的误差抑制方法。错误抑制是指在编译过程中转换电路以使错误最小化的一类技术。它不同于错误缓解,我们将在下面的“执行”一节中讨论错误缓解。我们使用的两种最常见的错误抑制形式是动态解耦和泡利旋转:
1. 动态解耦用于有效地抵消当量子位空闲时引入的一些环境噪声。通过在特定时间应用一系列门,您可以使在空闲时间的一部分中积累的噪声大致抵消另一部分中的噪声。
2. 泡利旋转是一种插入随机门的方法,不是像动态解耦那样消除噪声,而是简化噪声。通过插入随机门,它可以防止不同误差的影响快速累积,并且使噪声更容易表征,因为它现在具有随机性质。这种方法还构成了一种强大的错误缓解技术的基础,将在下面讨论。
执行
现在我们准备好执行量子程序了。Qiskit Runtime原语提供了一个到IBM Quantum硬件的接口,它们还从用户那里抽取出错误抑制和缓解。有两个原语可供选择:Sampler和Estimator。
Qiskit Runtime的采样器在量子设备上多次运行电路,每次运行执行测量,并从恢复的位串中重建概率分布。它执行的运行(或射击)越多,结果就越准确,但这需要更多的时间和量子资源。具体来说,它通过测量电路制备的状态来计算获得每个可能的标准基态的概率。
Qiskit Runtime的Estimator使用一个复杂的代数过程,通过将可观察对象分解成具有已知特征基的其他可观察对象的组合,来估计真实量子设备上的期望值。
在执行步骤中,我们还可以选择错误缓解策略。错误缓解是指允许用户通过对执行时存在的设备噪声进行建模来减少电路错误的技术。通常,这会导致与模型训练相关的大量预处理开销,以及通过使用生成的模型来减轻原始结果中的错误的经典后处理开销。作为这笔开销的交换,我们能够得到更准确的结果。
我们可以实现多种技术来减少错误。我们将讨论三种,以增加对错误的弹性的顺序,但也因此,以增加计算成本的顺序。然而,请注意,这是一个活跃的研究领域——所以我们可能会继续发明新的,并改进旧的。
在弹性水平0,转译器对你的电路不做任何事情,在弹性水平1,它引入了一种称为旋转读出错误消除(T-REX)的方法。T-REX使用泡利旋转,正如在错误抑制部分所讨论的那样。如前所述,在电路中插入随机门可以使非常复杂,难以建模的噪声看起来是随机的,并且在后处理中更容易解释或减去。在弹性水平2,加入零噪声推断ZNE)。这是一种流行的技术,我们最近取得了很多成功。ZNE背后的想法可能有点令人惊讶-我们实际上在已经存在的基础上添加了噪音!但这让我们可以反向推断,来预测如果噪音越来越少,结果会是什么样子。添加噪声可以通过几种不同的方式完成。例如,我们可以延长门,使其更长,从而更容易出错,或者运行更多的门,最终导致身份操作,因此电路不会改变功能,但我们有目的地采样更多的噪声。你必须对每条电路和每一个你想要跟踪的期望值都这样做,所以你可以看到它最终是如何在计算上昂贵的。
ZNE的一种特殊类型被称为概率误差放大(PEA)。一旦我们了解了门的噪声模型,PEA就会从噪声模型中采样误差,并有意地将其注入电路中。我们将讨论的最后一种错误缓解形式是概率错误消除(PEC)。PEC不是第三个弹性级别,而是必须在Qiskit中手动打开的特殊功能,因为与其他错误缓解技术相比,所需的计算资源的可伸缩性不是很好。您首先要了解影响电路的噪声-为电路中的每个独特的双量子位门层运行噪声学习或噪声表征电路。这些结果让你可以用泡利算子来描述噪声。一旦你知道了这些噪声项,你就可以修改你的电路,这样它们就可以有效地内置相反的泡利门来消除这些噪声通道。在某些方面,这个过程类似于降噪耳机的工作方式。然而,这种消除噪声的方法非常昂贵,运行时间在门的数量上呈指数级增长,因此它可能不是非常大的电路的最佳选择。
后处理
后处理阶段是我们可视化和分析量子电路输出的阶段。有许多Qiskit工具可供您使用,例如可视化和量子信息模块。
参考
1.Evidence for the utility of quantum computing before fault tolerance | Nature
2.Running Quantum Circuits | IBM Quantum Learning
3.transpiler | IBM Quantum Documentation