以 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 等。由于量子编程框架是在经典宿主程序语言下引入量子计算的元素和概念,把量子芯片看作一个特殊的设备或对象,因此这对于开发者来说也是相对熟悉的开发范式。量子编程框架开发的程序经过编译后,其中经典程序代码部分转化成机器指令并后续在经典处理器上执行,而描述量子算法的量子线路代码部分则通常转化为量子中间表示,并后续发送给量子芯片控制系统处理。
量子编程框架类软件用来编写运行在量子计算机中的量子算法和程序,经过封装后还可提供常用的量子计算组件和量子算法库,进行量子程序快速开发。
2.Amazon Braket SDK 介绍
2.1Amazon Braket
Amazon Braket 是亚马逊推出的一种全托管式 Amazon Web Services(AWS)解决方案,可帮助研究人员和开发人员探索潜在的应用和评估当前的量子计算技术。它允许用户从零开始设计自己的量子算法,或者从一组预先构建的算法库中进行选择。定义算法后,Amazon Braket 就会提供一个完全托管的模拟服务来帮助排除故障和验证。
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 工作原理[ 《Amazon Braket Developer Guide》
(1)学习 Amazon Braket 提供分步指导、教程和资源库,可帮助您快速开始尝试使用量子计算。
(2)设计要设计量子算法,您可以直接通过 Amazon Braket 控制台使用完全托管的 Jupyter 笔记本。示例笔记本可允许您访问预安装开发人员工具、示例算法和文档,从而快速上手。
(3)测试您可以使用传统硬件上运行的模拟器,简化代码诊断和设计优化,从而加快算法开发。Amazon Braket 以完全托管服务方式来运行模拟,自动设置所需的计算实例,运行模拟,将结果发布至 Amazon S3,并在完成时关闭资源。
(4)运行您可以在自己所选择的量子硬件上执行量子算法,且只需按实际使用量付费。如果您选择运行混合量子算法,Amazon Braket 可以自动设置所需的传统计算资源,并管理传统任务与量子任务之间的工作流程。
(5)分析完成后,系统将会自动通知您,并将结果存储在 Amazon S3 中。Amazon Braket 会将完成状态和运行时间等事件日志和性能指标发布至 Amazon CloudWatch。
Amazon Braket 功能点
Braket Task Flow[ 《Amazon Braket Developer Guide》]
(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.4Amazon 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.1QuTrunk 框架介绍
启科量子自主研发一款量子编程框架 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.2QuTrunk 框架结构解析
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:环境准备
量子线路:以上代码模块中 core.circuit 提供量子线路功能。
量子逻辑门操作:from qutrunk.circuit.gates import H, CNOT, Measure 可以准备 H 门、CNOT 门和测量操作。
步骤 2:初始化量子线路,分配量子寄存器
步骤 3:应用量子逻辑门
打印线路:量子线路部分代码编辑好之后,直接打印量子线路。(用 Printer.+自定义函数。)根据逻辑门操作预测所得结果:|00〉+|11〉态。
步骤 4:Bell Pair 量子线路运行及结果返回
目前 QuTrunk 已经通过运行代码直接可以输出量子线路图。
步骤 5:输出运行结果
定义量子寄存器:以上定义量子寄存器是通过 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.总结
随着量子技术的不断发展,量子编程框架也在被人们不停的完善,使它更易于使用,兼容性也越来越好。通过上文的介绍,我们可以看到量子编程框架为开发人员提供了一个编程环境,简化了很多繁琐的基础步骤,使底层技术的复杂性不再是用户的问题,从而能够让更多的人可以参与到量子技术的研发上来,有利于推动量子技术的发展。
评论