

MVP 手把手
微软在 Azure 云平台提供了量子计算资源(Azure 订阅用户,可以启用量子计算资源并获得500美元的免费试用额度)。经过几年的发展,微软已经在大规模使用量子计算领域取得了很大的进展。为了方便量子计算,微软在平台上使用了 Q# 量子编程语言。
Q# 语言是一种高级开源编程语言,便于研究人员将工作重点放到算法和应用程序级别的实现,而不用太纠结于具体量子计算实现的细节。同时,Q# 隔绝了量子计算硬件(即量子计算机)不同实现的差异并支持离线的编程。尽管在一些具体计算实现上还存在差异,但基本上可以让编写的程序运行于不同的平台。Q# 是 QDK 的一部分,除此之外还包含了很多库,比如用于模拟量子动力学和电子结构的量子化学库、利用量子计算来实现顺序分类的量子机器学习库和广泛用于数字范畴的量子数值库等。

现在世界不同了,量子计算也有 Copilot 了。

#1
Azure Quantum Copilot
微软学习路径中,介绍 Q# 的学习模块有不少示例代码,比如基本上所有编程都会上的第一课,“Hello World”。
namespace ExploringSuperposition {open Microsoft.Quantum.Canon;open Microsoft.Quantum.Intrinsic;open Microsoft.Quantum.Diagnostics;@EntryPoint()operation SayHello() : Unit {Message("Hello quantum world!");}}
我很想在这里显示正确的语法高亮,可是能选择的只有 C#。这是一段非常简单的代码,执行后会显示 “Hello quntanum world!”。问题除了 Message 那一行之外,其他的我都看不懂,也不知道为什么要这样写。
还记得 GPT 模型的特化 Codex 吧?还记得第一个面试的 AIGC 助手 Github Copilot 吧?对,大模型能够帮助我们解释代码。现在,该能力也包括了 Q# 量子计算语言。以下就是 Copilot 帮助我理解的代码含义:
这个 Q# 代码定义了一个简单的量子程序,用于在控制台上打印一条消息。以下是代码的详细解释:
1. namespace ExploringSuperposition:这一行定义了一个名为 ExploringSuperposition 的命名空间,它将包含大括号 {} 内的所有代码。
open Microsoft.Quantum.Canon;:这一行导入了 Microsoft.Quantum.Canon 命名空间,其中包含用于量子编程的有用实用函数和操作。
open Microsoft.Quantum.Intrinsic;:这一行导入了 Microsoft.Quantum.Intrinsic 命名空间,其中包含基本的量子操作和函数,如 H(哈达玛)和 CNOT 门。
open Microsoft.Quantum.Diagnostics;:这一行导入了 Microsoft.Quantum.Diagnostics 命名空间,其中包含量子编程的诊断工具,如本示例中使用的 Message 函数。
2. @EntryPoint():这一行是一个属性,它将下面的操作标记为程序的入口点。这意味着当程序执行时,将首先调用此操作。
3. operation SayHello() : Unit:这一行定义了一个名为 SayHello 的操作,它不接受输入并返回 Unit,这类似于经典编程语言中的 void。在 Q# 中,操作用于描述量子算法。
4. Message("Hello quantum world!");:在 SayHello 操作内部,这一行调用了 Message 函数,该函数接受一个字符串作为输入并将其打印到控制台。在这种情况下,消息是 "Hello quantum world!"。当执行此 Q# 程序时,它将在控制台上打印 "Hello quantum world!"。
Q# 需要首先声明需要使用的命名空间,我理解为和注明内引的库差不多。然后会有一个程序运行的进入点,在其后才是要运行的代码。其实这段代码基本上没涉及量子计算,那我们来真正生成一个随机数。写 Q# 代码?不存在的,让 Copilot 帮我写。

在生成的代码后面,Copilot 还贴心地放了个“复制代码到编辑器”的按钮,连程序员两大快捷键 “Ctrl+C” 和 “Ctrl+V” 都省了。
namespace Quantum.RandomInt {open Microsoft.Quantum.Intrinsic;open Microsoft.Quantum.Measurement;open Microsoft.Quantum.Convert;operation GenerateRandomBit() : Result {use q = Qubit();H(q);return MResetZ(q);}operation GenerateRandomInt(nBits : Int) : Int {mutable result = 0;for idxBit in 1..nBits {let bit = GenerateRandomBit() == One ? 1 | 0;set result += bit * (1 <<< (idxBit - 1));}return result;}@EntryPoint()operation Main() : Int {let nBits = 32;let randomInt = GenerateRandomInt(nBits);Message($"Generated random {nBits}-bit integer: {randomInt}");return randomInt;}}
还是让 Quantum Copilot 帮我们解释一下代码:
这段 Q# 代码定义了一个量子随机数生成器,用于生成具有指定位数的随机整数。以下是代码的逐步解释:
1. namespace Quantum.RandomInt 声明了一个名为 Quantum.RandomInt 的新命名空间,用于包含代码。
2. open 语句导入所需的命名空间:
Microsoft.Quantum.Intrinsic 用于基本量子操作。
Microsoft.Quantum.Measurement 用于与测量相关的操作。
Microsoft.Quantum.Convert 用于类型转换函数。
3. operation GenerateRandomBit() : Result 声明了一个名为 GenerateRandomBit 的新操作,返回 Result 类型,可以是 Zero 或 One。此操作通过使用 Hadamard 门(H)将一个量子比特置于叠加态,然后测量该量子比特以生成一个随机比特。
4. operation GenerateRandomInt(nBits : Int) : Int 声明了一个名为 GenerateRandomInt 的新操作,该操作接受一个整数 nBits 作为输入,并返回具有指定位数的随机整数。在此操作中:
初始化一个可变变量 result 为 0。
使用 for 循环从 1 迭代到 nBits。
在每次迭代中,调用 GenerateRandomBit() 操作并检查结果是否为 One。如果是,则将 bit 变量设置为 1,否则设置为 0。
通过将 bit 的值乘以 2 的 (idxBit - 1) 次方来更新 result 变量。这实际上是逐位构建随机整数。
返回生成的随机整数 result。
5. @EntryPoint() 将 Main 操作标记为程序的入口点。在此操作中:
定义一个整数变量 nBits 并将其设置为 32。
调用 GenerateRandomInt(nBits) 操作以生成一个随机的 32 位整数,并将其分配给 randomInt 变量。
使用 Message 函数输出显示生成的随机整数的消息。
返回生成的随机整数 randomInt。
这段代码演示了如何使用 Q# 中的量子操作生成具有指定位数的随机整数。
在编辑器的下面有运行按钮,并且可以指定运行的次数。我们点击运行按钮来运行这段 Q# 代码。结果会显示在下方。

我们选择了运行五次代码,然后生成了五个32bit的随机整数。生成数字的概率分布是均匀的。
到这里,我们没有写一行代码,用量子计算 Copilot 生成了需要的程序并在浏览器中运行获得结果。如果我们需要将量子计算运行在我们自己的代码里,可以在 Azure 中创建量子工作空间资源后直接使用记事本。

也可以在本地部署使用比如 Python 的 Azure Quuantum 服务的包以及运行 Q# 的内核 IQ#。当然也可以通过 Visual Studio Code 和 Visual Studio的扩展,以及 API 调用让 Python 和 .Net 语言(C#、F#和VB.Net)结合 Q# 使用。

#2
量子计算和加密
很多人尝试理解量子计算的一个原因是,“有量子计算,现在的加密都会被解密吧?”。
加密是使用物理或数学手段(例如,使用解决特定任务的某个计算难度)隐藏机密信息的方法。Peter W. Shor 在 IEEE 论文 (https://ieeexplore.ieee.org/document/365700) 的工作揭示了量子计算对传统加密方案构成的安全威胁——这些方案基于难以分解大数的假设。
现今流行的加密方案的一个示例是 Rivest–Shamir–Adleman (RSA)方案 ,它广泛用于电子商务等场景,以确保安全数据传输。其加密实现,是基于使用传统算法分解质数时的实际困难提出的。即我们前面提到的分解大数为质数因子的难度。
量子加密通过利用基本物理原理而不是复杂性假设来保证信息安全。RSA 目前是安全的,因为可缩放的量子计算机尚不可用,目前量子计算的计算量子位(qutanum bit)还比较有限。但是,在大规模构建量子计算机后,多项式时间加速的量子算法可能会破解这些加密系统的底层数学问题, 因此 RSA 会变得不安全。由于预期将来会有足够大的容错量子计算机问世,研究人员在以下方面进行了积极的研究:
判断后量子环境中给定位长度的加密系统的安全性。
估算将当前加密系统迁移到新系统需要多长时间。
微软一直在与微软Quantum 的研究人员 (https://www.microsoft.com/research/blog/cryptography-quantum-computing-intersect/) 协作,针对破解当前的加密系统开发具体的量子估算方法。同时也在研究如何让这些系统能够抵御量子攻击。
量子计算的另一个用处是图形。“查找路径问题”是显式选择扩展图的硬性问题。实际上已建议 (https://eprint.iacr.org/2006/021.pdf) 开发后量子加密系统(即,可以抵御量子攻击的传统协议)。学术界和产业界之间在过去几年紧密互动,导致具有商业利益的量子加密产品蓬勃发展。量子加密已经成为现实。我们可以期待数学家和密码学家在接下来的几年里会努力确定后量子加密标准的最佳选择。
说到这里是不是想起了我们国家之前说到的量子通信卫星“墨子”?于是我又问了一个关于量子加密通信的问题。

大致就是能否给我个示例代码,实现双方受到量子计算保护的安全通信。一旦消息被截获会收到通知。于是,Copilot 就给我了一段代码和说明。

这段代码其实是不能直接实现我想要的全部功能的。但是 Copilot 贴心地进行了说明,并且告诉我这其实是有专门协议的——BB84 协议。查尔斯·贝内特(Charles Bennett)与吉勒·布拉萨(Gilles Brassard)于 1984 年发表的论文中提到的量子密码分发协议,后来被称为“BB84协议”。

BB84 协议是最早描述如何利用光子的偏振态来传输消息的。发送者(通常称为 Alice)和接收者(通常称为 Bob)用量子信道来传输量子态。如果用光子作为量子态载体,对应的量子信道可以是光纤或者简单的自由空间。另外他们还需要一条公共经典信道,比如无线电或因特网。公共信道的安全性不需考虑,BB84 协议在设计时已考虑到了两种信道都被第三方(通常称为 Eve)窃听的可能。因为基于海森堡不确定性原理,在量子系统中,只有一对共轭性质(如位置和动量)的一个性质是可以确定的(对粒子位置的合理测量会干扰其速度)。量子密码学利用了这一点,通过使用不同碱基上的光子偏振(因为光子可以通过光纤链路交换)作为共轭特性。当 Eve 截获量子密钥时,基于无克隆定理,即不可能创建未知量子态的相同副本,就可以发现是否中断了量子通道。
这跟我一开始理解的,基于量子纠缠的通信有些不一样。即无论相距多远,两个量子粒子都可以纠缠,当测量粒子特定属性时,该属性的相关状态将出现在另一个粒子上。基于该原理的协议是 Eckert 协议。但实际中很难处理纠缠态粒子,产生及使用都会比较困难。通过向 Copilot 产生代码并解释,我也学习了新的知识。
#3
大规模量子计算
在五分钟的折腾过程中,我也顺便学习了一下微软的量子计算进展。也许你和我一样,在不久前还听到新闻里哪一家将量子位突破到了多少位,正在进军量子霸权……但上个月一个线上的量子计算直播刷新了我的认知。

能够解决人类面临的许多最困难问题的量子机器最终将需要至少1万个稳定的量子比特,这些量子比特可以执行1个万亿次运算,同时最多犯一个错误。
如大家所熟知,量子计算需要克服温度噪声的干扰,所以经常需要在真空和足够低温的环境下运行。但所有这些都必须在启用与量子比特通信的同时完成,所以传统的量子计算机金灿灿的外观下总有着一堆线缆缠绕。微软使用了一种独特的方法,通过设计具有新型量子比特(拓扑量子比特)的机器来扩展大规模量子计算。从理论上讲,它比迄今为止设计的任何其他量子比特都更稳定,这意味着这台量子机器将足够小,可以放在壁橱里,并且足够快,可以在几天到几周内解决问题。
多年来,微软制造了自己的自旋、传输、门和其他类型的量子比特,最终发现它们不适合规模。相反,微软已着手设计一个拓扑量子比特。这一旅程的第一步需要重大的物理突破,产生拓扑超导相及其伴随的马约拉纳零模式。
现在,独立专家已经验证了我们的数据,我们正在设计世界上第一个拓扑量子比特,这是唯一已知的有可能满足规模量子计算所需标准的设计。
由 David Reilly 博士领导的微软和悉尼大学研究人员团队,他们开发了一种低温量子控制平台,该平台使用专门的 CMOS 电路来获取数字输入并生成许多并行量子比特控制信号 - 允许扩大对数千个量子比特的支持 - 比以前的技术领先一步。为该平台提供动力的芯片称为 Gooseberry [1],它以 100 毫开尔文(mK)的速度运行,同时耗散足够低的功率,使其不超过标准商用研究冰箱在这些温度下的冷却功率,从而解决了量子计算机中 I O 的几个问题。这回避了将数千根电线插入冰箱的无法克服的挑战。

量子计算的比特数不断提升,但如何降低错误率是个严肃实际的问题。微软量子研究人员正在率先开发拓扑量子比特,拓扑量子比特在硬件级别内置了高水平的错误保护。这减少了软件级纠错所需的开销,并能够以更少的物理量子比特完成有意义的计算。
在量子堆栈中,量子比特构成了它的基础。量子平面(上图底部)由一系列拓扑量子位(本身由半导体、超导体和电介质组成)、栅极、布线和其他有助于处理来自原始量子比特的信息的封装组成。重要的通信过程发生在堆栈中更高的下一层(上图中标记为“量子经典接口”)。Gooseberry 芯片和冷冻计算核心协同工作,为这种通信画上句号。后者位于堆栈“经典计算”部分的底部,而 Gooseberry 相对于其他控制平台的独特之处在于,它与量子平面温度相同的量子位坐在一起——能够将来自冷冻计算核心的经典指令转换为发送到量子比特的电压信号。
* 更多的细节可以参考文末关于开创性量子硬件的文章链接。
#4
混合量子计算
大规模大范围使用量子计算,我猜有两个问题要解决。第一,维持量子计算资源的效率。如同大型计算机一样,量子计算机估计难以频繁启停,开起来是需要复杂的条件和充足的资源的。如果计算闲置就意味着很大的浪费。这个问题目前打算如同机器学习算力一样,通过云平台共享算力来解决。第二,除了量子计算本身,围绕着量子计算也需要足够的传统计算来提供支持和灵活应用。
混合量子计算 [2] 是指传统计算机和量子计算机共同解决问题的过程和体系结构。经典计算机在量子计算中一直用于定义量子门、控制量子计算机的配置、提交作业以及处理量子计算机的结果。借助 Azure Quantum 集成混合中提供的最新一代混合量子计算体系结构,你可以通过将经典指令和量子指令混合在一起来开始对量子计算机进行编程。

为了让两种计算方式更好地一起工作,微软采用了如图的分类来了解每个体系结构及其优势。
批处理量子计算
本地客户端定义线路并将其作为作业提交到量子处理单元 (QPU) ,后者将结果返回给客户端。但是,将多个线路批处理到一个作业中可以消除作业提交之间的等待,从而可以更快地运行多个作业。可以利用批量量子计算的问题示例包括 Shor 算法和简单的量子相位估计。
交互式量子计算
在此模型中,客户端计算资源将移动到云,从而降低延迟,并重复执行具有不同参数的量子线路。作业可以按逻辑分组到一个会话中,并优先于非会话作业。尽管会话允许较短的队列时间和更长的运行问题,但量子比特状态不会在每次迭代之间保留。可以使用此方法的问题示例包括 Variational Quantum Eigensolvers (VQE) 和 Quantum Approximate Optimization Algorithms (QAOA) 。
集成量子计算
借助集成量子计算,经典体系结构和量子体系结构紧密耦合,允许在物理量子比特一致的情况下执行经典计算。尽管受量子比特生存期和纠错的限制,但这允许量子程序远离仅线路。程序现在可以使用常见的编程构造来执行中间线路测量、优化和重用量子比特,以及实时适应 QPU。可以利用此模型的方案示例包括自适应相位估计和机器学习。
分布式量子计算
在此体系结构中,经典计算与逻辑量子位一起工作。逻辑量子比特提供的长一致性时间支持跨异质云资源进行复杂的分布式计算。与由大量量子比特组成的 QPU 配对,可以预期此体系结构将用于解决诸如评估可有利于商业应用的全反应以及人类面临的最困难问题(包括碳捕获和新药的发现)等问题。
* 有兴趣可以访问文末的链接了解。
[1]: 全栈领先:开创性的量子硬件允许在低温下控制多达数千个量子比特 - Microsoft研究
(https://www.microsoft.com/en-us/research/blog/full-stack-ahead-pioneering-quantum-hardware-allows-for-controlling-up-to-thousands-of-qubits-at-cryogenic-temperatures/)
[2]: 混合量子计算概述 - Azure Quantum (https://learn.microsoft.com/zh-cn/azure/quantum/hybrid-computing-overview?WT.mc_id=Azure-MVP-33253)
批处理量子计算
(https://learn.microsoft.com/zh-cn/azure/quantum/hybrid-computing-batch?WT.mc_id=Azure-MVP-33253)
交互式量子计算
(https://learn.microsoft.com/zh-cn/azure/quantum/hybrid-computing-interactive?WT.mc_id=Azure-MVP-33253)
集成量子计算
(https://learn.microsoft.com/zh-cn/azure/quantum/hybrid-computing-integrated?WT.mc_id=Azure-MVP-33253)
分布式量子计算
(https://learn.microsoft.com/zh-cn/azure/quantum/hybrid-computing-distributed?WT.mc_id=Azure-MVP-33253)

胡浩
Microsoft MVP MCT
19 届多方向微软 MVP,目前奖励领域是 Azure 和 AI。多年从事基础架构相关工作,熟悉全栈虚拟化、终端用户和边缘计算等,对多个技术方向有所涉猎。乐于学习并分享 Azure 和 AI,曾在很多大型研讨会演讲,如微软 TechEd、MEDC、Tech Summit、Ignite,威睿 VMworld、vForum、ENPOWER、Explore 等技术会议。同时也是很多社区大会如 Global AI Bootcamp、Global Azure Bootcamp、Global M365 Bootcamp 等活动的组织者和演讲者。

微软最有价值专家(MVP)是微软公司授予第三方技术专业人士的一个全球奖项。30年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项。MVP 是经过严格挑选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的热情并乐于助人的专家。MVP 致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人,并最大程度地帮助微软技术社区用户使用 Microsoft 技术。
更多详情请点击阅读原文登录官方网站:
https://mvp.microsoft.com/zh-cn





