写点什么

上(市场篇)| 量子计算与开源软件

  • 2022 年 9 月 07 日
    广东
  • 本文字数:6851 字

    阅读完需:约 22 分钟

​开源即开放源代码,兴起于软件行业,是源代码可开放共享的开发模式,开发者依托互联网平台,通过共同参与协作,不断累积群体智慧,实现持续创新的方法,具有自由开放、共建共享的特性,是促进信息技术创新的重要途径。开源对于量子计算产业技术价值的提升具有重要意义,同时还有利于提升企业的市场影响力以及产业生态的协同构建。本文将阐述量子计算与开源软件的关系。

1.开源软件介绍

1.1 什么是开源软件

开源软件,又可译为“开放源代码软件”,是指源代码开放、允许用户按照许可证条款对源代码进行修改并可自由重复发行的一类软件。开源软件需要公开源代码, 但需符合相应许可证的相关要求,在遵守许可证的条件下才能得到开源软件的源代码, 并可自由地对其修改或再发布。因此, 开源软件是通过许可证对其进行知识产权保护的, 也是受著作权保护的作品, 未经权利人许可不能随意使用。


OSI(Open Source Initiative)组织是全球范围内开源软件标准的权威发布机构,其对“开源”核心概念和要求的界定:开源软件必须包含可理解与运用的源代码,或提供简便的获取源代码的方式;且开源代码必须允许以源码或编辑后文件的形式传播;开源许可须允许源码修改及其衍生工作。开源许可不得限制开源软件的再传播,不得以此为由收费;仅当配合补丁文件一起发布时,开源许可证可以禁止修改的代码的发布;必须允许修改后的代码生成的软件的发布;开源许可不得将项目内容限制于特定软件,也不得对一起发布的其它软件施加各种限制。开源项目不得对任何个人、组织以及用途等规定歧视性条款;开源项目的内容须在无需进一步许可的条件下适用于所有获得该项目的主题;开源许可不得以某种特定技术或接口为前提,须保持技术中立。

1.2 开源将加快量子计算应用的普及

量子计算为什么没能普及开来呢?原因主要有两个:第一个是缺少针对量子处理器的优化算法,第二个是量子位保持其特殊量子特性时间的时长太短。虽然这主要是一个硬件问题,但是软件的开源能够推动硬件创新的发展。开源能够允许更多的物理学家、数学家及相关企业参与到开发当中,加快量子计算技术应用在公众中的普及,从而提升开发的效率。比如,D-Wave 公司发布了其基本量子计算软件“Qbsolv”的开源版本,向量子统治迈出了重要一步。量子计算一直是高精尖人才才有可能接触到的开发领域,一般从事量子计算开发的都是研究量子物理学的博士生。Qbsolv 的目的,就是能够降低量子计算开发的专业知识门槛,允许更多的开发人员参与到 D-Wave 的计算机编程工作中。


其次,量子计算软件开源有利于培养用户的习惯,也有助于推动量子计算的普及。用户习惯的培养有多重要?举个例子。当用户习惯使用 Windows 系统及其软件,如果换成 Mac 系统,用户将会很不习惯。这些都基于用户接触计算机时就已经被培养形成的习惯。同样量子计算软件的用户习惯培养也是如此。像发展经典计算机一样,量子计算的发展应从量子计算的硬件、操作系统、软件开发包、语言开发包,到云平台的整个生态系统去推进。当前国际上非常重视量子计算推广和用户习惯的养成,谷歌和 IBM 已经开展了很多在线量子编程教育、推广工作,也有非常多的初创公司参与量子软件尤其是量子应用软件的开发,他们已经形成了与传统软件一样成体系的发展模式。马里兰大学量子信息和计算机科学联合中心的联合主任安德鲁·柴尔兹(Andrew Childs)说:“我们现在还处于量子计算发展的早期阶段,如果有开源的平台,对大家都很有利。”

1.3 常见的开源许可协议(Open Source License)

开源软件的 License,一般是授权用户使用、拷贝、修改和再发布的合法权利及应当遵守的约定,同时包含作者的免责声明和使用自担责声明。以下将介绍几种开源许可协议介绍及其比较。


MIT 许可证

MIT 源自麻省理工学院(Massachusetts Institute of Technology, MIT),用户有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软体及软体的副本,可根据程式的需要修改授权条款为适当的内容。在软件和软件的所有副本中都必须包含版权声明和许可声明。MIT 条款可与其他授权条款并存。另外,MIT 条款也是自由软体基金会(FSF)所认可的自由软体授权条款,与 GPL 相容。 格式:一般使用 MIT 授权的项目,需在源文件头部增加以下内容:

Copyright [yyyy] [name of copyright owner]. All rights reserved.
复制代码


[yyyy]:表示该源文件创建的年份。 [name of copyright owner]:即版权所有者。如果为个人项目,就写个人名称;若为团队项目,则宜写团队名称。


BSD 许可证

BSD 开源协议是一个给予使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。BDS 由于允许使用者修改和重新发布代码,也允许使用或在 BSD 代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。很多的公司企业在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。但是,如果要使用 BSD 协议的代码或以 BSD 协议代码为基础做二次开发自己的产品,需要满足以下条件:

 (1)如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的 BSD 协议。

 (2)如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的 BSD 协议。 

(3)不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。


Apache 许可证

Apache 许可证是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布,需要满足的条件也和 BSD 类似:

 (1)需要给代码的用户一份 Apache License。如果用户修改了代码,需要在被修改的文件中说明。

 (2)在延伸的代码中需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

 (3)如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache License。用户可以在 Notice 中增加自己的许可,但不可以表现为对 Apache License 构成更改。

 (4)Apache License 也是对商业应用友好的许可。用户也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。 格式: 该许可证要求在所有的源文件中的头部放置以下内容才能算协议对该文件有效:

Copyright [yyyy] [name of copyright owner]
复制代码


[yyyy]:表示该源文件创建的年份。 [name of copyright owner]:版权所有者。如果为个人项目,就写个人名称;若为团队项目,则宜写团队名称。 示例: Mindquantum/Apache License 2.0


LGPL 许可证

LGPL 许可证是 GPL 的一个为主要为类库使用设计的开源协议。和 GPL 要求任何使用/修改/衍生之 GPL 类库的的软件必须采用 GPL 协议不同。LGPL 允许商业软件通过类库引用(link)方式使用 LGPL 类库而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。但是如果修改 LGPL 协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议。因此 LGPL 协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。GPL/LGPL 都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。


GPL 许可证

GPL 同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。GPL 还规定:只要修改文本在整体上或者其某个部分来源于遵循 GPL 的程序,该修改文本的整体就必须按照 GPL 流通,不仅该修改文本的源码必须向社会公开,而且对于这种修改文本的流通不准许附加修改者自己作出的限制。



怎么选择开源软件的 License


1.4 开源软件许可合规工具

开源软件是异质的和重复使用的,这虽然对软件开发有积极意义,但对合规性造成了挑战。合规性需要多种工具,这些工具最好能组合成一个工作流程,以支持一些业务和开发人员的要求。其中一个要求是在现代开发环境中的易用性,即代码开发周期越来越短,新的开发成果越来越快地被推向运营。要做到这一点,开源合规性工具很可能需要与开发工具集成。以下将介绍几种开源软件许可合规工具。


AboutCode Toolkit

「官网」:AboutCode AboutCode - Welcome to AboutCode!

「许可证」:Apache-2.0

「摘要」:AboutCode Toolkit 和 About 文档提供了一种简单的方式来记录你在项目中使用的第三方软件组件的来源、许可、使用和其他重要或有趣的信息。此外,这个工具能够生成归属声明,并识别你的项目中使用的可重新分配的源代码。


AboutCode Manager

「官网」:AboutCode AboutCode - Welcome to AboutCode!

「许可证」:Apache-2.0

「摘要」:AboutCode Manager 提供了一个先进的可视化用户界面,帮助你快速评估由 ScanCode 识别的许可证和其他通知,并记录你对一个组件的有效许可证的结论。AboutCode Manager 是基于 Electron 的,是使用 nexB 的 AboutCode 工具的主要桌面/UI 工具。


Apache Rat

「官网」:Apache Rat Apache Rat™ – A Release Audit Tool

「许可证」:Apache-2.0

「摘要」:Apache Rat 是一个发布审计工具,主要针对许可证。它用 Java 编写,通过 Maven 和 Ant 的插件在命令行中运行。Rat 是可扩展的。它是 Apache Creadur 项目的一部分。


Apache Tentacles

「官网」:

Apache Tentacles Apache Tentacles

「许可证」:Apache-2.0

「摘要」:Apache Tentacles 通过自动与包含发布工件的版本库进行交互来帮助审查者。Apache Tentacles 简化了审查由大量工件组成的版本库的工作。它是用 Java 编写的,从命令行运行。


Apache Whisker

「官网」:

Apache Whisker Apache Whisker™ – Introducing Apache Whisker

「许可证」:Apache-2.0

「摘要」:Apache Whisker 协助组装的应用程序保持正确的法律文件。Whisker 可以 验证--针对某一个发行版检查其元数据的质量 生成--从元数据中生成法律文件 对于复杂的组合式应用程序特别有用。


Bang

「官网」:

Bang GitHub - armijnhemel/binaryanalysis-ng: Binary Analysis Next Generation (BANG)

「许可证」:AGPL-3.0

「摘要」:Binary Analysis Next Generation,即 BANG,是一个分析二进制文件的工具。目前,它的主要目标是非常迅速地找出二进制文件的内容,如固件更新,并使从内容中提取的信息可用于进一步分析,如许可证合规性、安全研究或成分分析。它支持大约 130 种不同的文件格式。

(以上引用来源:盘点现有开源软件许可合规工具。https://mp.weixin.qq.com/s/cb7qlH4s3aZUiXo_dHmhDw)

2. 量子计算开源软件

一台量子计算机的架构可以被视为具有以下典型层的堆栈:最底层是实际的量子计算硬件,硬件上面一层是系统层,在系统层之上是软件和应用层。最顶层是现在最常见的云技术。


图:量子计算机堆栈

软件是连接人与机器的桥梁,通过软件才能发挥机器的作用。在量子计算机还未能大面积普及使用的时候,量子计算开源软件的发展,有利于让更多用户接触并使用它,从而推动量子计算硬件的研发,以及促进量子计算产业的提前布局与生态的良性培养。下面将介绍量子计算领域开源软件状况。


2.1 量子云服务

量子云是提供以量子计算能力为核心的一种云服务。由于量子计算机仍需要严苛的运行环境与复杂的辅助设备,这些系统造价高昂,普通用户很难接触到。量子云平台有助于让更多用户体验、学习、探索量子计算,使用云技术连接用户与真实的量子计算设备。通过供来自互联网上的用户将待执行的量子程序,通过经典信道远程提交到量子云平台的服务器上,在量子云平台完成它的编译,执行与读出最后将计算结果返回给各用户。


量子云平台有利于吸引更多人在平台探索量子计算在各个方面的研究和应用,了解、接触和运行量子算法,这不仅能有助于了解处理器的性能、技术瓶颈等重要特性,还将帮助到下一代处理器开发,为优化应用积累经验。



2.2 量子模拟器

量子模拟是利用可控的量子系统去模拟待研究的量子系统,它可以作为一种有效的实验手段用于研究经典计算机难以计算的问题和实验条件无法观测的现象。用量子计算模拟器开展量子算法的设计,将解决无法使用、高代价使用真实量子计算机的问题。


通过在经典计算机上运行的量子模拟器,可在量子系统上模拟量子算法的运行。比如 Microsoft Quantum 开发工具包 (QDK) 包含一个完整状态向量模拟器以及其他专用量子模拟器。QDK 提供了可模拟本地计算机上的量子计算机的全态模拟器,可以使用全态模拟器来运行和调试用 Q# 编写的量子算法。以下是如何从 C#、Python、命令行、Jupyter Notebook 调用并运行全态模拟器的操作:


从 C# 调用模拟器 创建 QuantumSimulator 类的实例,然后将其与任何附加参数一起传递给量子操作的 Run 方法。

using (var sim = new QuantumSimulator()) 
       {   
         var res = myOperation.Run(sim).Result;   
         ///...      
        }  
复制代码


从 Python 调用模拟器 将 Q# Python 库中的 simulate() 方法与导入的 Q# 操作一起使用:

qubit_result = myOperation.simulate()
复制代码


从命令行调用模拟器 从命令行运行 Q# 程序时,全态模拟器是默认的目标计算机。 或者,可以使用 --simulator(或 -s 快捷方式)参数指定所需的目标计算机 。 以下两个命令都使用全态模拟器运行程序。

dotnet run   
dotnet run -s QuantumSimulator  
复制代码


从 Jupyter Notebook 调用模拟器 使用 Q# magic 命令 %simulate 运行 Q# 操作。

%simulate myOperation
复制代码

2.3 量子编译器

量子计算程序需要最终被转化为量子计算机能够执行的一种表示方法就是“量子编译”。而量子编译器需要对量子程序进行一系列变换以满足量子处理器的物理约束。


编译量子电路需要添加额外的门,这些门将量子位状态移动到所需的门可以在实际量子处理器的物理约束下作用于它们的位置。在某种程度上,这类似于如何将经典程序从程序员理解的语言(例如,C++)编译成硬件可以执行的二进制表示。下图是量子编译过程的示例。



2.4 量子操作系统

操作系统是管理计算机软硬件的“大管家”,也是决定其性能的关键技术领域。“如果把量子芯片比喻成人的心脏,量子计算机操作系统就相当于人的大脑,量子应用软件则是血肉。”中科院院士、中科院量子信息重点实验室主任郭光灿说,一个好的操作系统,可以让量子计算机的运行更加高效、稳定。


目前全球范围内可供使用的量子计算机数量非常有限,如果不能做到有效利用,就会出现算力浪费情况。因此,量子计算机也需要操作系统对其进行有效调配和管理,硬软件协同发展才能让量子计算机实现落地应用。“本源司南”是国内首个量子操作系统。


2.5 量子算法

量子算法是一套用于分析问题的计算机指令,其利用量子现实的独特性质,即一个比特的数据可以代表两个相反的值,例如二进制逻辑中的 1 和 0。量子算法需要一台量子计算机才能运行。


Shor 算法

Shor 量子算法可以有效地用来进行大数因子分解。大数因子分解现在广泛用于电子银行、网络等领域的公开密匙体系 RSA 安全性的依据。采用现有计算机对数 N(二进制长度为 LogN)做因子分解,其运算步骤(时间)随擦和高输入长度(LogN)指数增长。


迄今在实验上被分解的最大数为 129 位,1994 年在世界范围内同时使用 1600 个工作站花了 8 个月时间才完成这个分解。若用同样计算功能来分解 250 位的数则要用 80 万年,而对于 1000 位的数,则要有〖10〗^25 年。与此相反,量子计算机采用 Shor 算法可以在几分之一秒内实现 1000 位数的因子分解,而且操作时间仅随输入数的 3 次方增长。可见 Shor 量子算法将这类“难题”问题编程“易解”问题。Shor 的开创性工作有力的刺激了量子计算机和量子密码术的发展,成为量子信息科学发展的重要里程碑之一。


Grover 算法

Grover 算法,也称为量子搜索算法,可以对随机数据库相对经典搜索平方根加速。为了实现这样的加速,Grover 算法主要依赖于量子态的叠加,适用于解决如下问题:从 N 个未分类的客体中寻找出某个特定的客体。


Grover 算法的重要性,一是因为本身解决的无序数据库搜索问题就是一个很重要的问题;二是因为,这个量子算法的提出,和 Shor 质因子分解算法提出一样,给了研究者们用量子算法解决经典算法无法有效解决的问题的希望,极大提高了人们对于量子算法研究的热情;再者,从 Grover 算法衍生出了一系列利用了幅度放大思想的算法,是现今量子算法研究中的一个重要部分。


量子近似优化算法(QAOA)

QAOA 是一个多项式时间的近似优化算法,属于变分量子算法(VQA)的一种,可用于解决组合优化问题、最大分割问题等难题。该算法在解决某些 NP-hard 问题时有明显的加速效果,可以在多项式复杂度下给出问题的近似解。


QAOA 算法的核心思想是通过量子绝热优化算法从初始哈密顿量的基态,逐步迭代演化至目标问题的哈密顿量的基态;在此过程中需要逐步优化量子绝热算法的参数,参数的优化过程主要是在经典计算上完成,绝热演化过程是在量子计算上完成。原则上,QAOA 算法需要在通用量子计算机上完成运算,即要求量子计算机能实现图灵完备的量子门操作;然而,受限于通用量子计算机的物理实现,目前停留在几十个量子比特的规模。

用户头像

量子计算技术交流 2022.06.10 加入

关注量子计算软件技术最新动态

评论

发布
暂无评论
上(市场篇)| 量子计算与开源软件_启科量子开发者官方号_InfoQ写作社区