以AmazonBraketSDK和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等。由于量子编程框架是在经典宿主程序语言下引入量子计算的元素和概念,把量子芯片看作一个特殊的设备或对象,因此这对于开发者来说也是相对熟悉的开发范式。量子编程框架开发的程序经过编译后,其中经典程序代码部分转化成机器指令并后续在经典处理器上执行,而描述量子算法的量子线路代码部分则通常转化为量子中间表示,并后续发送给量子芯片控制系统处理。
量子编程框架类软件用来编写运行在量子计算机中的量子算法和程序,经过封装后还可提供常用的量子计算组件和量子算法库,进行量子程序快速开发。
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 算法。
Amazon Braket工作原理
(1)学习
Amazon Braket 提供分步指导、教程和资源库,可帮助您快速开始尝试使用量子计算。
(2)设计
要设计量子算法,您可以直接通过 Amazon Braket 控制台使用完全托管的 Jupyter 笔记本。示例笔记本可允许您访问预安装开发人员工具、示例算法和文档,从而快速上手。
(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
(1)为了便于客户定义、提交和监控他们的任务,Amazon Braket提供预装的托管 Jupyter notebook。
(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与集成Amazon Identity and Access Management 、Amazon 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 算法
(2)可视化结果,可以使用可视化库进行显示
AWS 可以支持本地simulor,以及具有高效和支持更多qubit的simulator服务
2.4 Amazon Braket SDK的特性
(1)Moment 属性, Braket 有一个 pseudo-time概念,定义为moment, 含义是一个 qubit 在当下的moment,执行一个门操作。moment属性的目的是以门为单位,切割一个 circuit,从而获取 circuit 在某个moment 时的临时状态,从而分析算法的运行过程。代码如下图所示:
(2)Braket SDK 返回结果类型:Braket 返回结果支持多种类型,针对不同的后端平台,返回结果类型也有所不同,具体如下表所示:
(3) Verbatim compilation compiler 不做优化,算法的每一步都准确翻译,保证算法的执行与设计一致,(编译阶段,即将circuit中的门操作翻译成QPU native gate阶段,Braket compiler默认会做优化),该功能使用场景:例如benchmark 硬件的性能等
(4) 支持OpenQASM 3.0 标准
(5) 针对不同量子计算机平台,支持获取量子连接性查询接口
(6) Hybrid jobs, Braket 支持PennyLane的 embedded simulators, embedded simulator GPU。
(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版本的本地后端。
同时也支持扩展更多后端,理论上只要是对外开发了量子计算访问接口的后端,QuTrunk都可以进行兼容如,IBM、lonq等等。用户可以在QuTrunk进行量子编程,通过QuSL将量子程序转译成目标平台指令,然后选择不同的后端进行计算。
4. QuTrunk量子编程框架使用实例
4.1 Demo程序编写
QuTrunk部署完成后,可以开始我们的第一个量子计算程序的编写及运行了
4.1.1 Python解释器切换
windows及Linux下执行ctrl+shift+p,macOS下执行command+shift+p,打开命令行,输入quan搜索,选择quan:python解释器切换。python解释器切换可切换全工作区或为单一项目切换python环境。
4.1.2 新建工作区
在需要保存的目录下新建一个目录,示例中Qun-Demo,在IDE开始界面,选择打开文件夹,然后选中新建的文件夹打开,显示如下:
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)```python
步骤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:初始化量子编程工作区,执行初始化。启动初始化可视化编程工作区功能,将为用户建立一个虚拟工作区用于可视化编程。
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的能力用户可以查看当前量子电路图的量子态统计。
4.2.3 开始进行可视化编程示例
在可视化编程页面,用户可以通过托拉拽的方式选择各图形化编程元素加入或者删除完成编程,删除只需将元素脱出窗外松开即可,可视化编程示例如下:
5. 总结
随着量子技术的不断发展,量子编程框架也在被人们不停的完善,使它更易于使用,兼容性也越来越好。通过上文的介绍,我们可以看到量子编程框架为开发人员提供了一个编程环境,简化了很多繁琐的基础步骤,使底层技术的复杂性不再是用户的问题,从而能够让更多的人可以参与到量子技术的研发上来,有利于推动量子技术的发展。
QuTrunk项目开源地址Github地址:
http://github.com/qudoor/qutrunk
启科量子开发者官方平台:
http://developer.queco.cn
魔都新手爸爸定制锦旗,给探视亲友立规矩!这些话宝妈不爱听!快来自查!听说过给医生送锦旗的给民警送锦旗的那么你见过丈夫给妻子送锦旗的吗?近日,一段视频突然走红网络!上海一名男子特意为生产后的妻子定制了一面锦旗挂在门上!仔细看锦旗上写的内容很有意思大致
家长请注意!两岁娃一个举动致鼓膜穿孔,医生提醒生活中,很多人都有用棉签掏耳朵的习惯,稍不注意,就可能会给耳朵带来伤害。22日晚,泉州晋江一名2周岁的女宝雯雯(化名)趁大人不注意,拿起一支棉签学大人掏耳朵,一不注意棉签插进左耳道
90的肝癌与慢性肝病有关!这5件伤肝事很多人每天都做,快快自查五种伤肝行为千万不要做中医讲,五脏应四时,四季之中,春天属木,而人体的五脏之中,肝也是木性,因此,春季是肝气最活跃的季节。肝脏有代谢分泌和排泄胆汁解毒等功能,这个时候如果不适当的调
佛说人生无常人生,每个人都被无常所累,生活中处处都充满着不确定,我们的心情也随之而上下波动不停,时而高兴,时而愤怒,时而安详,时而伤心落泪,下一秒钟究竟要发生什么,我们永远都不知道,也不可能知
重视培养孩子的情绪感知力现实中,有些父母可能更多关注孩子的学业成绩,对孩子情绪方面的问题容易忽视或不够敏感。而不论是父母的情绪还是自身的情绪,都容易对孩子的情感发育和身心成长带来大的影响。如果父母意识到这
控制自己的情绪,是控制自己命运的起点能够控制自己的情绪,冷静应对,不为环境和他人所操战,并里能快速地作出判断,是一个人掌握自己命运的起点。诸葛亮和苏格拉底虽然对于心理问题频发的当今社会来说非常遥远,但他们的存在表明一
知道了这三个真相后,我的情绪开始变得平和每个人都有自己的情绪,情绪有好有坏,不是说有情绪就是坏事,只是情绪用错了地方不仅害了自己也伤了他人。特别是结婚有了孩子,在自己情绪崩溃的时候,会慢慢发现自己怎么会是这样?原来我们根
情绪文案从未拥有过,却又好似失去了千万次故事不怎么感人,讲故事的人却一直掉眼泪。1。hr人总是会在感性的时候错把欢喜当喜欢。2。hr你喜欢别人的样子我好羡慕那是我从未拥有的。3。hr从未拥有过你,可还是放不下我那不切实际
情绪文案心软穷半生,多情空余恨3月财经新势力一个从不回头的人,未必是因为勇敢,也许是怕被识破脸上的泪痕。一个时刻微笑的人,未必是因为快乐,可能是怕被看穿心底的叹息。一位老先生说过真心相爱的人是不会输给外貌和距离
夜读丨人到中年思维有曲度,情绪有尺度,心态有宽度文富小书随安思维有曲度看过一则故事。从前有一个年轻人,从他父亲手里继承了大片树林,成为场主。可好景不长,突然有天树林失火,把树木全部烧成了焦木。意外来的措手不及,场主失魂落魄地走在
起床来根烟,精神一整天?患者太对了!我得肺癌前一直这样做我国烟民数量早已突破3亿,这是一个惊人的数字,一方面,控烟任重道远工作量大,另一方面,防治抽烟引起的系列疾病的成本很高。判断一个烟民是不是真烟民老烟民纯烟民,不是看他抽的烟有多高档