以Amazon Braket SDK和QuTrunk为例介绍量子编程框架

概述:

在经典计算编程领域,软件框架是一种具有通用软件功能的抽象形式。使用这些软件框架的开发者们可以根据特定的功能需求对框架代码重新改写后,为特定应用提供定制化的服务。在大数据时代,经典计算的算力在海量数据面前的略显单薄。而量子计算因其纠缠与叠加特性在算力加速方面脱颖而出。业界对于量子编程软件的研究与设计普遍继承了经典程序设计思路,以最大限度的发挥量子计算的计算能力与优势。

目前,国内外已有许多科技企业纷纷推出量子编程框架软件,如量子计算开源软件框架 ProjectQ、IBM 公司的开源量子编程开发工具包 Qiskit、谷歌开源量子算法框架 Criq、Amazon Braket SDK、启科量子的量子编程框架 QuTrunk 等。本文主要以Amazon Braket SDK量子软件开发包和启科量子的QuTrunk量子编程框架为例进行介绍。

1. 什么是量子编程框架

量子编程框架则更着眼于当前技术条件下量子程序的快速开发。量子编程框架通常以传统编程语言为宿主语言,在上面添加描述量子计算体系的变量、函数、对象等元素,然后通过对这些元素的程序处理,实现量子算法并开发出量子软件。量子编程框架中也常常包含了常用量子算法软件库,方便量子程序的高效开发。同时,由于宿主语言的存在,量子编程框架技术可以很方便地实现量子和经典的混合编程。

常用的量子编程框架包括QPanda、QDK、Cirq、Qiskit、ProjectQ、HiQ以及Forest、Amazon Braket SDK、QPanda、QuTrunk等。由于量子编程框架是在经典宿主程序语言下引入量子计算的元素和概念,把量子芯片看作一个特殊的设备或对象,因此这对于开发者来说也是相对熟悉的开发范式。量子编程框架开发的程序经过编译后,其中经典程序代码部分转化成机器指令并后续在经典处理器上执行,而描述量子算法的量子线路代码部分则通常转化为量子中间表示,并后续发送给量子芯片控制系统处理。

公司 量子编程框架 支持经典语言类型
微软 QDK C#
IBM Qiskit Python
谷歌 Cirq Python
Xanadu Strawberry Fields Python
Rigetti Forest Python
亚马逊 Braket SDK Python
华为 HiQ Python/C++
本源量子 QPanda Python/C++
启科量子 QuTrunk Python

量子编程框架类软件用来编写运行在量子计算机中的量子算法和程序,经过封装后还可提供常用的量子计算组件和量子算法库,进行量子程序快速开发。

2. Amazon Braket SDK介绍

2.1 Amazon Braket

Amazon Braket 是亚马逊推出的一种全托管式Amazon Web Services(AWS)解决方案,可帮助研究人员和开发人员探索潜在的应用和评估当前的量子计算技术。它允许用户从零开始设计自己的量子算法,或者从一组预先构建的算法库中进行选择。定义算法后,Amazon Braket就会提供一个完全托管的模拟服务来帮助排除故障和验证。

Amazon Braket 可以分为三个方面(概念澄清):

(1)Build, 安装了 Amazon Braket SDK 的 Jupyter 环境,进行量子编程

(2)Test, 在模拟器中执行量子线路,Braket 支持 4 种 Simulator, 其中 local simulator 可以在本地模拟量子环境

(3)Run, 可以在真实量子环境中运行量子算法。目前 AWS 量子环境提供商有 D-Wave, IonQ, OQC. 因为量子计算机噪音影响目前无法完全去除,AWS 提供了 hybrid 的量子环境,通过QPU协同CPU工作,通过 PennyLane 开源库,支持 hybrid 算法。

2.png

Amazon Braket工作原理

3.png
4.png

(1)学习

Amazon Braket 提供分步指导、教程和资源库,可帮助您快速开始尝试使用量子计算。

(2)设计

要设计量子算法,您可以直接通过 Amazon Braket 控制台使用完全托管的 Jupyter botebook。示例笔记本可允许您访问预安装开发人员工具、示例算法和文档,从而快速上手。

(3)测试

您可以使用传统硬件上运行的模拟器,简化代码诊断和设计优化,从而加快算法开发。Amazon Braket 以完全托管服务方式来运行模拟,自动设置所需的计算实例,运行模拟,将结果发布至 Amazon S3,并在完成时关闭资源。

(4)运行

您可以在自己所选择的量子硬件上执行量子算法,且只需按实际使用量付费。如果您选择运行混合量子算法,Amazon Braket 可以自动设置所需的传统计算资源,并管理传统任务与量子任务之间的工作流程。

(5)分析

完成后,系统将会自动通知您,并将结果存储在 Amazon S3 中。Amazon Braket 会将完成状态和运行时间等事件日志和性能指标发布至 Amazon CloudWatch。

Amazon Braket功能点

名称 说明
QPU 1.QPU资源有限,任务采取排队机制,不会立刻返回运算结果, 提供API获取任务执行状态;2.目前支持 quantum annealing: (D-Wave) 和 gate-model(ionq, Rigetti,OQC)
Simulator 1.本地Simulator(免费),集成在Braket SDK中;2.On-demand Simulator(收费),更高效的模拟服务,支持更多的qubit,embedded simulator等; 3.Nosie模拟,支持两种介入方式:初始化量子线路时介入以及线路运行过程中介入。
notebook 1.可直接创建集成了 Braket SDK的notebook instance; 2.也可下载Braket SDK,在本地部署jupyter。
Braket Moment属性 moment属性的目的是以门为单位,切割一个 circuit,获取 circuit 在某个门操作完成后,当下相应qubit的状态,从而分析算法的运行过程
Task batching 1.local simulator 不支持;2.On-demand simulator & QPU支持, 允许circuit 并行(并行价格更高)
Task Result 1.有统一的结果查询入口,方便历史结果查询;2.结果持久化到s3; 3.结果内容包括:task id, task status,device arn, timestamp
Hybrid jobs 1.不同Region,支持的QPU不同,不能跨Region访问当前Region不支持的QPU; 2.可选择预装了PennyLane (Tensorflow, PyTorch)的container; 3.支持BYOC, 通过 Dockerfile, 自定义 container; 4.创建job instance(EC2), 上传算法代码,Job结束后,ec2资源自动释放
Notification 联合SNS, 可以知道任务执行状态以及QPU变化状态。

Braket Task Flow

5.png

(1)为了便于客户定义、提交和监控他们的任务,Amazon Braket提供预装的托管 Jupyter 笔记本电脑。

(2)Amazon Braket开发工具包。您可以直接在SDK中构建量子电路,或者对于退火设备,定义退火问题和参数。这些区域有:Amazon BraketSDK 还提供了一个插件D-Wave’sOcean 工具套件这样你就可以在原生编程了D-Wave设备。定义任务后,您可以选择要在其上执行的设备并将其提交到Amazon Braket API。

(3)根据您选择的设备,任务将排队直到设备可用并将任务发送到 QPU 或模拟器执行。

(4)Amazon Braket允许您访问五种不同类型的QPU(D-Wave,IonQ,OQC,Xanadu,Rigetti) 和三个按需模拟器 (SV1,DM1,TN1)。您的任务处理完毕后,Amazon Braket将结果返回到AmazonS3 存储桶,数据存储在您的AWS账户。

(5)同时,SDK 会在后台轮询结果,并在任务完成时将其加载到 Jupyter 笔记本中。您还可以在上查看和管理您的任务任务页面中的一页Amazon Braket控制台或使用控制台或使用GetQuantumTask的操作Amazon Braket API。Amazon Braket与集成AmazonIdentity and Accccess ManagAmazon CloudWatch,Amazon CloudTrail 和Amazon EventBridge 用于用户访问管理、监控和记录以及基于事件的处理

2.2 Braket Python SDK

Amazon Braket Python SDK 是一个量子软件开发包,它提供了一个框架,可以使用该框架通过亚马逊 Braket 与量子计算硬件设备进行交互。

使用Amazon Braket在基于不同技术(包括D-Wave,IonQ和Rigetti的系统)选择的量子处理器上运行其量子算法。模拟和量子硬件作业均通过统一的开发经验进行管理,客户只需为使用的计算资源付费。其中,Amazon Braket SDK的一部分免费提供了本地模拟器,该本地模拟器适用于运行中小型模拟(通常最多25-qubit)。客户可以在使用Amazon EC2计算资源的量子计算机模拟器上运行,测试其算法并对其进行故障排除。准备就绪后,客户便可以在自己选择的量子计算机上运行其算法,而无需聘请多个提供商或采用单一技术。

对于需要高性能计算资源的更大,更复杂的算法(最多34-qubit),可以将模拟任务提交给Braket服务,使用Braket模拟器的成本取决于每个模拟任务的持续时间,以每小时的费率计费,以一秒为增量,最终以执行模拟所花费的时间做结算。

2.3 本地模拟量子环境(local simulator)

本地安装 Jupyter 即可进行量子线路编程。
安装 AWS Braket SDk,
pip install amazon-braket-sdk

(1)利用 Jupyter 在本地运行 Bell 算法


6.png

(2)可视化结果,可以使用可视化库进行显示


7.png

AWS 可以支持本地simulor,以及具有高效和支持更多qubit的simulator服务


8.png

2.4 Amazon Braket SDK的特性

(1)Moment 属性, Braket 有一个 pseudo-time概念,定义为moment, 含义是一个 qubit 在当下的moment,执行一个门操作。moment属性的目的是以门为单位,切割一个 circuit,从而获取 circuit 在某个moment 时的临时状态,从而分析算法的运行过程。代码如下图所示:

9.png
10.png

(2)Braket SDK 返回结果类型:Braket 返回结果支持多种类型,针对不同的后端平台,返回结果类型也有所不同,具体如下表所示:

11.png

(3)Verbatim compilation compiler 不做优化,算法的每一步都准确翻译,保证算法的执行与设计一致,(编译阶段,即将circuit中的门操作翻译成QPU native gate阶段,Braket compiler默认会做优化),该功能使用场景:例如benchmark 硬件的性能等
(4)支持OpenQASM 3.0 标准
(5)针对不同量子计算机平台,支持获取量子连接性查询接口

12.png

(6)Hybrid jobs, Braket 支持PennyLane的 embedded simulators, embedded simulator GPU。

13.png

(7)Hybrid jobs, Braket 针对 hybrid algorithms 提供了Hybrid jobs, 创建 job 时可上传量子算法的脚本,以及其他相关参数,job结果可持久化到s3中,也可在console, cloud watch中查看。

3. QuTrunk介绍

3.1 QuTrunk框架介绍

启科量子自主研发一款量子编程框架 QuTrunk,为量子编程开发提供了一个通用的软件环境。QuTrunk 使用 Python 作为宿主语言,利用 Python 的语法特性实现针对量子程序的 DSL(领域专用语言),所有支持 Python 编程的 IDE 均可安装使用 QuTrunk。

QuTrunk 基于量子逻辑门、量子线路等概念提供量子编程所需的各类 API。 这些 API 分别由相应的模块实现,比如 QCircuit 实现量子线路功能,Qubit 实现量子比特,Qureg 实现量子寄存器,Command 对应每个量子门操作的指令, Backend 代表运行量子线路的后端模块,gate 模块实现了各类基础量子门操作。 同时 QuTrunk 还可以作为其他上层量子计算应用的基础,比如:量子算法、量子可视化编程、量子机器学习等。

目前 QuTrunk 以 QuSprout 作为后端。QuSprout 也是启科量子自研的一款基 于经典计算资源的量子计算模拟软件,支持支持多线程、多节点、GPU 加速,也可预安装在 QuBox 中。QuTrunk 为量子编程工作提供了量子编程框架,建立起一套统一的量子编程规范,进而实现量子程序开发的“降本增效”。

3.2 QuTrunk框架结构解析

QuTrunk的架构如下图所示,用户可以利用QuBranch进行Python语言的直接编译,模块化的设计能够让用户根据实际情况调整编译器门组,更好的完成自定义设计。目前,QuTrunk框架默认以BackendLocal做为后端,同时提供Python和C++两个版本的本地后端。优先使用C++(需要进行源码编译),如果C++版本后端不可用,则使用Python版本的本地后端。

14.png

同时也支持扩展更多后端,理论上只要是对外开发了量子计算访问接口的后端,QuTrunk都可以进行兼容如,IBM、lonq等等。用户可以在QuTrunk进行量子编程,通过QuSL将量子程序转译成目标平台指令,然后选择不同的后端进行计算。

3.3 QuTrunk的特性

(1)灵活的后端设备扩展功能

QuTrunk 设有多种量子计算后端模块,如:BackendLocalPy(本地 Python 版本模拟器);BackendLocalCpp(本地 C++版本模拟器);BackendQuSprout(量子计算云服务);BackendIBM(IBM 量子云计算平台)等。开发者在使用 QuTrunk 开发量子程序时,可选择启科自研的量子计算设备 QuBox 作为后端,使用丰富的量子模拟资源运行量子算法。QuBox 连接方式包括远程连接模式和本地模式两种。在采用远程连接方式时,QuBox 只提供量子编程 API,可维护量子线路所有状态,极大减少对本地资源的占用情况。而本地模式可以使 QuTrunk 成为量子编程与量子模拟的全栈框架。QuTrunk 使用的本地量子计算后端可提供全振幅量子模拟计算。量子云服务可提供 OMP 多线程、多点并行 MPI、GPU 等计算加速,同时预留了对接离子阱量子计算机的接口。

(2)普适的混合量子-经典编程形式

QuTrunk 支持混合量子-经典程序编写,已设计了量子线路分段执行机制, 提供 QuSL 量子汇编指令标准,与 Python 代码完全兼容。由于量子算法中也包含有部分经典计算,因此在使用 QuTrunk 进行编程的过程中,当经典算法与量子算法产生依赖交互时,QuTrunk 可立刻将当前线路信息发送至后端运行并获取运行结果。目前的量子计算软件产品大多使用量子模拟器替代量子计算机,在模拟器模拟完成理论中量子比特的全部状态后,返回最终的真实结果。

为了能在量子虚拟机中更好的模拟真实量子计算机带来的计算误差,QuTrunk 支持在量子线路初始化时设置噪声模型,可为用户带来真实的量子编程体验。QuTrunk 的全振幅量子模拟功能可以一次性模拟计算量子态的所有振幅,在初始化时配置适当的计算方式,即可体验差异化的计算效率。在通用量子计算机正式问世之前,混合量子-经典计算将是量子计算领域一种很好的发展思路。

(3)简易的编程语言设计与丰富的量子门资源

在 QuTrunk 框架设计之初,研发人员充分遵循产品的易用性、便捷性等设计原则。通过重载“ * ”或“ |”运算符为开发者提供一种近似物理表达式的运算操作方式,让各种量子门表现形式更加直观,降低使用门槛。量子逻辑门是量子算法的基本组成单元,QuTrunk 对所有量子逻辑门及量子编程涉及到的基本概念进行了封装与实现,支持主流的量子算法。在使用 QuTrunk 进行量子编程时,开发者只需通过提供的量子编程 API 即可直接调用量子逻辑门进行使用。

(4)提供双向解析支持和完备的数据信息统计

QuTrunk 框架可在运行的同时不改变整个状态矢量,并获取线路的状态取值,比如计算某种状态出现的概率信息、计算所有状态的概率振幅信息等。此外,QuTrunk 框架还支持量子线路运行统计功能,如量子比特数、量子门等量子线路信息及运行耗时等设备信息。QuTrunk 还提供了 QASM 的解析功能,即提供双向支持:支持导出 OpenQASM,也支持将 OpenQASM 解析为 QuTrunk 格式。

(5)直观的量子线路打印与可视化编程功能

QuTrunk 与启科自研的量子集成开发环境 QuBranch 配合使用时,支持可视化量子编程,只需通过简单拖拽量子逻辑门符号即可自动生成相应代码和量子态柱状图等。QuTrunk 支持量子线路打印功能。使用时只需要输入线路打印命令,即可在终端以字符串方式打印量子线路。在量子线路的图形表示中,有多条并排直线分别代表不同的量子比特。其中直线从左到右表示时间顺序,直线上排列的不同符号表示不同的量子逻辑门操作。经过各个逻辑门操作后的量子态都会发生相应的改变。通过 QuTrunk 打印出的量子线路,可以更直观的了解到量子线路中的线路设计。

4. QuTrunk量子编程框架使用实例

4.1 Demo程序编写

QuTrunk部署完成后,可以开始我们的第一个量子计算程序的编写及运行了

4.1.1 Python解释器切换

windows及Linux下执行ctrl+shift+p,macOS下执行command+shift+p,打开命令行,输入quan搜索,选择quan:python解释器切换。python解释器切换可切换全工作区或为单一项目切换python环境。

15.png

4.1.2 新建工作区

在需要保存的目录下新建一个目录,示例中Qun-Demo,在IDE开始界面,选择打开文件夹,然后选中新建的文件夹打开,显示如下:

16.png

4.1.3 量子计算Demo程序编写及运行

从开始界面,选择新建python文件,并保存为demo.py,下面的代码为bell_pair算法例子:

步骤1:环境准备

    from qutrunk.circuit import QCircuit
    from qutrunk.circuit.gates import H, CNOT, Measure

量子线路:以上代码模块中core.circuit提供量子线路功能。

量子逻辑门操作:from qutrunk.circuit.gates import H, CNOT, Measure可以准备H门、CNOT门和测量操作。

步骤2:初始化量子线路,分配量子寄存器

    qc = QCircuit()
    qr = qc.allocate(2)

步骤3:应用量子逻辑门

    H * qr[0]
    CNOT * (qr[0], qr[1])
    Measure * qr[0]
    Measure * qr[1]

    # print circuit
    qc.print()

打印线路:量子线路部分代码编辑好之后,直接打印量子线路。(用Printer.+自定义函数。)

根据逻辑门操作预测所得结果:|00〉+|11〉态。

步骤4:Bell Pair量子线路运行及结果返回

    # run circuit
    res = qc.run(shots=1024)

    # print result
    print(res.get_measure())
    print(res.get_counts()) 

目前QuTrunk已经通过运行代码直接可以输出量子线路图。

步骤5:输出运行结果

   *qreg q[2]  
    creg c[2]  
    H * q[0]  
    MCX(1) * (q[0], q[1])  
    Measure * q[0]  
    Measure * q[1]  
    [{"00": 505}, {"11": 519}]*  

定义量子寄存器:以上定义量子寄存器是通过qreg操作完成的。指令为qreg q[2]表示定义一个名为q的2位量子寄存器;同理,指令creg c[2]表示定义一个名为c的经典寄存器。

测量结果:测量结果为[{"00": 505}, {"11": 519}]。该结果表示量子线路运行次数分别为505、519,共计运行1024次。对以上程序进行多次运行,发现结果都不相同,比如第二、三次的运行结果分别为[{"00": 507}, {"11": 517}]、[{"00": 528}, {"11": 496}]。

4.2 可视化编程

4.2.1 初始化量子编程工作区

打开IDE,先初始化量子编程工作区:windows上按ctrl+shift+p,macOS上command+shift+p打开命令行,输入quan搜索,选择quan:初始化量子编程工作区,执行初始化。启动初始化可视化编程工作区功能,将为用户建立一个虚拟工作区用于可视化编程。

17.png

4.2.2 启动可视化量子编程

再次按ctrl+shift+p/comand+shift+p,输入quan搜索,可以看到量子可视化编程已经出现,选择“quan:量子可视化编程“启动量子编程可视化功能。该功能允许用户生成多个可视化编程的qdoor文件,并且切换不同的qdoor文件生成不同的量子电路图,亦允许您使用编程的方式或者使用可视化拖拽的方式编辑电路图,将量子门图入电路图中生成电路图,将量子门从电路图中拖出可删除量子门。目前支持H、NOT、Sdg、Toffoli、Tdg、X、Y、Z、P、Rx、Ry、Rz、R、SqrtX、T、Measure,其中X、Y、Z、P、Rx、Ry、Rz允许添加一个控制位,Rx、Ry、Rz允许变更旋转角。并提供了关键字高亮,代码提示,代码自动完成等功能。借助Qutrunk的能力用户可以查看当前量子电路图的量子态统计。

18.png

4.2.3 开始进行可视化编程示例

在可视化编程页面,用户可以通过托拉拽的方式选择各图形化编程元素加入或者删除完成编程,删除只需将元素脱出窗外松开即可,可视化编程示例如下:

19.png

5.总结

随着量子技术的不断发展,量子编程框架也在被人们不停的完善,使它更易于使用,兼容性也越来越好。通过上文的介绍,我们可以看到量子编程框架为开发人员提供了一个编程环境,简化了很多繁琐的基础步骤,使底层技术的复杂性不再是用户的问题,从而能够让更多的人可以参与到量子技术的研发上来,有利于推动量子技术的发展。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容